单词:使用Python删除表和标题之间的行

时间:2013-04-24 06:37:54

标签: python ms-word pywin32 win32com

我有一个场景,其中有一个标题/常量文本,如“调用树:”遍布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()

..

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

对此有何想法/建议?

1 个答案:

答案 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。