#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 имеет проблемы с обработкой таблицы, если ваша таблица содержит ячейки, которые были объединены. Вы можете протестировать таблицу, которая вызовет проблемы, используя .Единообразное свойство. Я оставлю вас исследовать, как вы справляетесь с неоднородной таблицей, если вам нужно.