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