python使用win32com复制word的某一页然后粘贴到新的word页面中

整体思路为:如果复制第2页。1.先跳到word的第2页 然后光标会在第2页最开始的位置。2.记录此时光标的位置。3.再跳到word的第3页,此时光标在第3页开始位置,如果这时候复制会带着复制第3页 相当于2个页面。4.光标往左移动一下,切换到第3页结尾。(这里应该也有方法直接跳到该页结尾,懒得再翻文档了。。)5.再次记录光标位置。6.最后选中两个位置。7.复制再到新的word上粘贴。

会有如下问题,指定页和总页数一样,这时候就全选光标向右移,记录位置 相当于word结尾处,再全选,复制,粘贴。

多个页面的时候也是相似的处理方法,总体就是记录当前的坐标和结尾的坐标。

另附官网vb链接  Word (Pages) | Microsoft Docs

好了 代码如下:

import win32com
from win32com.client import Dispatch
import os

# 指定copy页
page_n = 2
word = win32com.client.Dispatch('Word.Application')

word.Visible = 1 # 后台运行,不显示
word.DisplayAlerts = 0 # 不警告
#	path = # word文件路径
doc_add = word.Documents.Add()
doc_new = word.Documents.Open(r'C:\Users\xx\Desktop\5.doc')
doc = word.Documents.Open(r'C:\Users\xx\Desktop\2.doc', False, False, False, "123")
# word
pages = doc.ActiveWindow.Panes(1).Pages.Count
if page_n > pages:
	print("指定页索引超出已有页面")
else:
	# 123 是word密码 没有则删除或者为''
	objRectangles = doc.ActiveWindow.Panes(1).Pages(page_n)
	# 移动来
	doc.Application.ActiveDocument.Range().GoTo(1, 1, page_n).Select()
	# 记录位置
	start = word.Selection.Start.numerator
	doc.Application.ActiveDocument.Range().GoTo(1, 1, page_n+1).Select()
	# 往左移一下
	word.Selection.MoveLeft()
	if pages==page_n:
		doc.Range().Select()
		word.Selection.MoveRight()
		end = word.Selection.Start.numerator
	else:
		end =  word.Selection.Start.numerator
	doc.Range(start, end).Select()
	word.Selection.Copy()
	doc_new.Application.ActiveDocument.Range().Paste()

多个页面的时候则为下面的代码

import win32com
from win32com.client import Dispatch
import os

# 指定copy页
page_n = 2
word = win32com.client.Dispatch('Word.Application')

word.Visible = 1 # 后台运行,不显示
word.DisplayAlerts = 0 # 不警告
#	path = # word文件路径
doc_add = word.Documents.Add()
doc_new = word.Documents.Open(r'C:\Users\xx\Desktop\5.doc')
doc = word.Documents.Open(r'C:\Users\xx\Desktop\2.doc', False, False, False, "123")
# word
pages = doc.ActiveWindow.Panes(1).Pages.Count
list_len = [2,4]
objRectangles = doc.ActiveWindow.Panes(1).Pages(list_len[0])
# 移动
doc.Application.ActiveDocument.Range().GoTo(1, 1, list_len[0]).Select()
# 记录位置
start = word.Selection.Start.numerator
doc.Application.ActiveDocument.Range().GoTo(1, 1, list_len[-1] + 1).Select()
# 往左移一下
word.Selection.MoveLeft()
if pages == list_len[-1]:
	doc.Range().Select()
	word.Selection.MoveRight()
	end = word.Selection.Start.numerator
else:
	end = word.Selection.Start.numerator
	doc.Range(start, end).Select()
	word.Selection.Copy()
	doc_new.Application.ActiveDocument.Range().Paste()

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农村落魄小青年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值