сохранение значений столбцов из таблицы Word с помощью Python с библиотекой docx

#python #ms-word

#python #ms-word

Вопрос:

Как я могу напечатать только значения во втором столбце таблицы MS word. Приведенный ниже мой код выводит значение первого столбца, значения второго столбца одно под другим. Пример: Формат таблицы Word:

 colm 1       column2
SR#          32213
Part#        K9843
PartDesc     SteamBolt
  

—мой код—

 import docx
from docx import Document
wordDoc = Document('c:python-programsssis-test.docx')
for table in wordDoc.tables:
    for row in table.rows:
        for cell in row.cells:
            print (cell.text)
  

—завершить мой код—
Приведенный выше код печатается следующим образом.

 SR#
32213
Part# 
K9843
PartDesc
SteamBolt
  

Я хочу печатать только значения 32213, K9843 и SteamBolt (только во втором столбце).)

Версия Python: 3.5.2 с библиотекой docx.

Ценю вашу помощь.

Ответ №1:

Docx, вероятно, не лучший подход, поскольку он предлагает лишь небольшое подмножество Word api и, несмотря на появление на GitHub, не получал существенного развития в течение ряда лет.

Лучшим подходом было бы использовать Win32Com, который предоставляет полный доступ к объектным моделям Com (таким как приложения office). С Win32com вы также захотите использовать makepy для генерации intellisense для объектной модели, которую вы хотите использовать.

Быстрый просмотр здесь поможет

http://timgolden.me.uk/pywin32-docs/html/com/win32com/HTML/QuickStartClientCom.html

Подход VBA к вашему вопросу был бы

 Option Explicit

Sub test()

    Dim my_table                    As Word.Table
    Dim my_row                      As Word.Row
    Dim my_text                     As String

    For Each my_table In ActiveDocument.Tables

        For Each my_row In my_table.Range.Rows

            my_text = my_row.Range.Cells(2)

        Next

    Next

End Sub
  

Но это не гарантировано, поскольку Word имеет проблемы с обработкой таблицы, если ваша таблица содержит ячейки, которые были объединены. Вы можете протестировать таблицу, которая вызовет проблемы, используя .Единообразное свойство. Я оставлю вас исследовать, как вы справляетесь с неоднородной таблицей, если вам нужно.