Вопрос

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

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

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

  1. Макрос VBA из Word для создания CSV и последующей загрузки в базу данных?
  2. Макрос VBA в Word с подключением к DB (как подключиться к MySQL из VBA?)
  3. Скрипт 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.Это требует очень мало усилий.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top