我有一个场景,其中有一个标题/常量文本,如“调用树:”遍布Word文档,之后有一些行,一旦行结束,有一个表。所以我希望使用python / win32组件删除表格和标题/常量文本“调用树:”之间的行。
例如:
输入为:
...
Call Tree :
Line 1 ...
Line 2 ...
....
....
....
....
Line N ....
Table # 1
.....
输出(即表格和“呼叫树”之间的所有行都被删除):
...
Call Tree :
Table # 1
.....
我不确定,是否有任何方法可以在常量文本(即“调用树”)和表之间选择多行。 我知道,可以使用以下方法选择行和删除:
..
app = win32com.client.DispatchEx("Word.Application")
app.Visible = 0
app.DisplayAlerts = 0
# select a Text
app.Selection.Find.Execute("TEXT TO BE SELECTED")
# extend it to end
app.Selection.EndKey(Unit=win32com.client.constants.wdLine,Extend=win32com.client.constants.wdExtend)
# check what has been selected
app.Selection.Range()
# and then delete it
app.Selection.Delete()
..
但我不确定,如何使用此标准选择这样的多行。
对此有何想法/建议?
答案 0 :(得分:0)
您可以在使用MoveRight和EndKey找到文本后迭代这些行,然后您可以使用属性Tables测试选择是否为表。喜欢
import win32com.client as com
from win32com.client import constants as wcons
app = com.Dispatch('Word.Application')
# Find the text
app.Selection.Find.Execute('Call Tree',
False, False, False, False, False,
True, wcons.wdFindContinue, False,
False,False,)
# Extend the selection to the end
app.Selection.EndKey(Unit=wcons.wdLine)
while True:
# Move the selection to the next character
app.Selection.MoveRight(Unit=wcons.wdCharacter, Count=1)
# And Select the whole line
app.Selection.EndKey(Unit=wcons.wdLine, Extend=wcons.wdExtend)
# If I hit the table...
if app.Selection.Tables.Count:
print "Table found... Stop"
# I leave the loop
break
# Otherwise delete the selection
print "Deleting ...",app.Selection.Text
app.Selection.Delete()
# And delete the return
app.Selection.TypeBackspace()
我建议您首先尝试使用宏来执行您想要的操作(如果您不熟悉VBA,请尝试录制宏),然后将代码转换为Python。