整体思路为:如果复制第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()

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐