簡體   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