Извлечение данных из MS Word - PullRequest
5 голосов
/ 03 февраля 2009

Я ищу способ извлечения / очистки данных из файлов Word в базу данных. Наши корпоративные процедуры имеют протоколы встреч с клиентами, задокументированные в файлах MS Word, в основном из-за истории и инерции.

Я хочу иметь возможность извлекать элементы действий из этих минут собрания в базу данных, чтобы мы могли получать к ним доступ через веб-интерфейс, превращать их в задачи и обновлять их по мере их выполнения.

Какой лучший способ сделать это:

  1. Макрос VBA из Word для создания CSV и последующей загрузки в БД?
  2. Макрос VBA в Word с подключением к БД (как подключиться к MySQL из VBA?)
  3. Сценарий Python через win32com, затем загрузить в БД?

Последний вариант привлекателен для меня, поскольку веб-интерфейс создается с помощью Django, но я никогда не использовал win32com и не пробовал писать сценарии 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?

Ответы [ 6 ]

4 голосов
/ 03 февраля 2009

В 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
1 голос
/ 03 февраля 2009

Вы можете использовать OpenOffice. Он может открывать текстовые файлы, а также запускать макросы Python.

1 голос
/ 03 февраля 2009

Ну, я никогда не писал сценарии 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, а затем просмотреть их как документацию.

0 голосов
/ 03 февраля 2009

Можно программно сохранить документ Word в формате HTML и импортировать таблицы, содержащиеся в Access. Это требует очень мало усилий.

0 голосов
/ 03 февраля 2009

как насчет сохранения файла в формате xml. затем с помощью Python или чего-то еще и вытащить данные из слова в базу данных.

0 голосов
/ 03 февраля 2009

Я бы сказал, посмотрите на соответствующие вопросы справа -> top , похоже, имеет несколько хороших идей для того, чтобы идти по маршруту python.

...