繁体   English   中英

使用 win32com.client 读取 MS Word 表格

[英]Using win32com.client to Read MS Word Table

我有一个 MS Word 文档 (Microsoft 365),我想使用 win32com.client 模块通过 python 更新它。 在 .docx 文件中,插入了一些表格,并且在这些表格中有包含文本值的单元格,我想更新这些单元格。 我一直在测试如何使用 win32com 阅读表格。 例如:

import win32com.client

word = win32com.client.gencache.EnsureDispatch("Word.Application")
word.Visible = True

doc = word.Documents.Open(r"path_to_my_doc")

doc = word.ActiveDocument

table = doc.Tables(2)

for row in range(1,table.Rows.Count + 1):
    for col in range(1,table.Columns.Count + 1):
        print(table.Cell(Row = row,Column = col).Range.Text)

当读取具有相同行和列且没有合并或拆分单元格的表时,上面的代码工作正常。 我遇到的问题是表格合并单元格或拆分单元格的地方。 代码将开始读取表格,但当它遇到比最后一行具有更多或更少单元格的行时,它会产生错误:

Traceback (most recent call last):
  File "W:\em\vic\mtb\Local\MTB_Scripts\Testing_Area\mmacrae\IOR\2022Nov_updates\script\win32com_word.py", line 41, in <module>
    table.Cell(Row = row,Column = col).Range.Text = table.Cell(Row = row,Column = col).Range.Text
  File "E:\sw_nt\Python27\ArcGIS10.6\lib\site-packages\win32com\gen_py\00020905-0000-0000-C000-000000000046x0x8x5\Table.py", line 50, in Cell
    , Column)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'Microsoft Word', u'The requested member of the collection does not exist.', u'wdmain11.chm', 25421, -2146822347), None)

这是我一直在测试的包含 3 个表格的 word 文档的屏幕截图。

在此处输入图像描述

第一个表的每一行都有相等的列。 当我在该表上运行代码时,它会毫无错误地打印我们的单元格文本值。 当我在第二个 2 个表上运行代码时,我在其中拆分了几个单元格以便每行有奇数列,我收到错误。

经过大量测试,我觉得是这些合并或拆分的单元格导致了问题。 我一直在谷歌搜索,看看是否出现了这个问题,但我在 Stack 上找不到任何东西。 希望就如何处理这些表和代码提出一些建议。

使用 OP 的结构,更改内部循环的迭代范围:

for row in range(1,table.Rows.Count+1):
    for col in range(1,table.Rows(row).Cells.Count+1):
        print(table.Cell(Row = row,Column = col).Range.Text)

但是,使用 Python 的迭代功能可能会更简洁一些:

for rw in table.Rows:
    for cl in rw.Cells:
        print(cl.Range.Text)

其副产品是您不能超出范围的末端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM