0

我有一个场景,其中有一个像“调用树:”这样的标题/常量文本出现在整个 Word 文档中,然后有一些行,一旦行结束,就会有一个Table。所以我希望使用 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()

..

但我不确定,如何使用这个标准来选择这样的多行。

对此有任何想法/建议吗?

4

1 回答 1

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()

我建议先尝试使用宏在 word 中执行您想要的操作(如果您不熟悉 VBA,请尝试记录宏),然后将代码转换为 Python。

于 2013-04-24T22:45:02.207 回答