Извлечение данных из MS Word
Вопрос
Я ищу способ извлечь / очистить данные из файлов Word в базу данных.Наши корпоративные процедуры содержат протоколы встреч с клиентами, задокументированные в файлах MS Word, в основном из-за истории и инерции.
Я хочу иметь возможность извлекать элементы действий из этих протоколов собраний в базу данных, чтобы мы могли получать к ним доступ из веб-интерфейса, превращать их в задачи и обновлять по мере их выполнения.
Какой лучший способ сделать это:
- Макрос VBA из Word для создания CSV и последующей загрузки в базу данных?
- Макрос VBA в Word с подключением к DB (как подключиться к MySQL из VBA?)
- Скрипт Python через win32com затем загружается в БД?
Последний вариант мне нравится, поскольку веб-интерфейс создается с помощью Django, но я никогда не использовал win32com и не пробовал использовать scripting Word из python.
Редактировать: Я начал извлекать текст с помощью VBA, потому что это немного упрощает работу с объектной моделью Word.Однако у меня возникла проблема - весь текст находится в таблицах, и когда я вытаскиваю строки из нужных мне ЯЧЕЕК, я получаю странный маленький символ-прямоугольник в конце каждой строки.Мой код выглядит следующим образом:
sFile = "D:\temp\output.txt"
fnum = FreeFile
Open sFile For Output As #fnum
num_rows = Application.ActiveDocument.Tables(2).Rows.Count
For n = 1 To num_rows
Descr = Application.ActiveDocument.Tables(2).Cell(n, 2).Range.Text
Assign = Application.ActiveDocument.Tables(2).Cell(n, 3).Range.Text
Target = Application.ActiveDocument.Tables(2).Cell(n, 4).Range.Text
If Target = "" Then
ExportText = ""
Else
ExportText = Descr & Chr(44) & Assign & Chr(44) & _
Target & Chr(13) & Chr(10)
Print #fnum, ExportText
End If
Next n
Close #fnum
Что не так с маленьким окошком управляющего символа?Встречается ли какой-то символьный код в Word?
Решение
В Word есть маленькая штучка-маркер, которую он помещает в конец каждой ячейки текста в таблице.
Он используется так же, как маркер конца абзаца в абзацах:чтобы сохранить форматирование для всего абзаца.
Просто используйте функцию Left(), чтобы удалить его, т. е.
Left(Target, Len(Target)-1))
Кстати, вместо
num_rows = Application.ActiveDocument.Tables(2).Rows.Count
For n = 1 To num_rows
Descr = Application.ActiveDocument.Tables(2).Cell(n, 2).Range.Text
Попробуй это:
For Each row in Application.ActiveDocument.Tables(2).Rows
Descr = row.Cells(2).Range.Text
Другие советы
Ну, я никогда не писал скрипты для Word, но с win32com довольно легко выполнять простые вещи.Что - то вроде:
from win32com.client import Dispatch
word = Dispatch('Word.Application')
doc = word.Open('d:\\stuff\\myfile.doc')
doc.SaveAs(FileName='d:\\stuff\\text\\myfile.txt', FileFormat=?) # not sure what to use for ?
Это непроверено, но я думаю, что что-то подобное просто откроет файл и сохранит его как обычный текст (при условии, что вы сможете найти правильный формат файла) – затем вы могли бы прочитать текст в python и манипулировать им оттуда.Вероятно, есть и способ получить содержимое файла напрямую, но я не знаю его сразу;документацию может быть трудно найти, но если у вас есть документы по VBA или опыт работы, вы должны быть в состоянии распространить их по всему миру.
Взгляните на этот пост, опубликованный некоторое время назад: http://mail.python.org/pipermail/python-list/2002-October/168785.html Прокрутите вниз до COMTools.py;там есть несколько хороших примеров.
Вы также можете запустить makepy.py (часть дистрибутива pythonwin), чтобы сгенерировать "подписи" python для доступных COM-функций, а затем просмотреть это как своего рода документацию.
Вы могли бы использовать OpenOffice.Он может открывать файлы word, а также запускать макросы python.
Я бы сказал, посмотрите на связанные вопросы справа -> The верхний из них кажется, есть несколько хороших идей для того, чтобы пойти по пути python.
как насчет сохранения файла в формате xml?затем используйте python или что-то еще и извлеките данные из word в базу данных.
Можно программно сохранить документ Word в формате HTML и импортировать содержащиеся в нем таблицы в Access.Это требует очень мало усилий.