2009-02-03 6 views
5

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

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

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

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

Последний привлекателен для меня, поскольку веб-интерфейс строится с Django, но я никогда не использовал win32com или не пытался использовать скрипт Word из python.

EDIT: Я начал извлекать текст с помощью VBA, потому что это облегчает работу с объектной моделью Word. У меня проблема: все текст в таблицах, и когда я вытаскиваю строки из CELLS, которые я хочу, в конце каждой строки появляется странный маленький символ. Мой код выглядит так:

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?

ответ

4

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 
+0

Спасибо, Джоэл! Я понял, что могу использовать Left() для разметки конца маркера ячейки, но это не показалось мне элегантным. Кроме того, спасибо за другой указатель. Я не эксперт-программист и, безусловно, не гуру VBA. –

0

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

+0

Вопрос «извлечение текста из текстовых файлов MS в python» посвящен работе в среде linux. Такие инструменты, как antiword, недоступны под Windows, кроме cygwin, тогда как этот плакат готов выполнять COM-скриптинг Word. –

+0

Если у вас нет ничего приятного сказать ... Некоторые из вышеперечисленных ответов на этот вопрос не являются специфичными для Linux. Наверное, ты пропустил их. –

1

Ну, я никогда не писал 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 ? 

Это проверялось, но я думаю, что что-то подобное будет просто открыть файл и сохранить его в виде простого текста (при условии, вы можете найти правильный FileFormat) - вы могли бы прочитать текст в питон и манипулировать им оттуда. Вероятно, есть возможность напрямую захватить содержимое файла, но я не знаю его; документация может быть трудно найти, но если у вас есть документы или опыт VBA, вы сможете их переносить.

Посмотрите это сообщение раньше времени: http://mail.python.org/pipermail/python-list/2002-October/168785.html Прокрутите вниз до COMTools.py; там есть хорошие примеры.

Вы также можете запустить makepy.py (часть дистрибутива pythonwin) для генерации «сигнатур» питона для доступных функций COM, а затем просмотреть его как своего рода документацию.

0

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

1

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

0

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