Извлечение данных из документа Word в таблицу Excel - PullRequest
7 голосов
/ 25 августа 2010

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

  1. Используя файл Excel, создайте скрипт vba и добавьте любые ссылки на текстовые документы.

2 Используя слово, перейти к таблице «9. ЗАПАСЫ ... »(извлеченный пример ниже - Приложение A) и прочитайте ежедневное использование дизельного топлива (букв), выделенное красным.

3. Запишите это значение в ячейку электронной таблицы.

  1. Дата для этого значения также является ключевой, но она содержится в другой части слова document (Приложение B). Даты также указаны в имени файла, но мы доверяем внутреннему значению больше, чем слово документа word. Со знанием пунктов 3 и 4 извлеките связанную дату в соседнюю ячейку электронной таблицы.

Таблица отображается ниже, из-за форматирования я не могу отправить вам точную таблицу, но я смогу отправить ее значения.

9.STOCKS (По состоянию на 00:01 часов в день выпуска отчета). Фондовая проведено Ежедневное использование Минимальный запас

Дизель (букв)
390436 15012 25000

Азот (мм)
35 1 19 Чемпион 1033 (тотализатор)
15 1 4 Nexguard (Котлы) 4
0,25 4 х 200 л

Приложение Б: Беатриче Период Отчета: 00:01 - 24:00 10 августа 2010 года

Если у вас есть какие-либо сомнения относительно моего вопроса, пожалуйста, ответьте мне, я ценю ваши усилия и хотел бы заранее поблагодарить

1 Ответ

7 голосов
/ 31 августа 2010

вот некоторый код, использующий позднюю привязку (объявлять объекты, а не word.application и т. Д.). Из Excel 2003 , это

  1. открывает документ WORD
  2. ищет строку "минимальный запас"
  3. перемещает курсор на несколько строк / слов дальше
  4. расширяет / выбирает курсор WORD
  5. вставляет это слово в EXCEL

шаги 2-5 повторяются для «Периода отчета:» (обратите внимание, что «:» является границей слова, поэтому нам нужно перейти на 8 слов вправо, чтобы прийти к дате)

Для WORD я скопировал текст из вашего Q, как есть (без таблицы, просто текст). Если вместо этого вы используете таблицы, вам может понадобиться поиграть с единицами различных операторов Move (например, для ячеек unit:=12); стратегия остается прежней: найти постоянный текст, переместить курсор к конечному пункту назначения, расширить выделение, создать диапазон слов и передать.

Оба элемента помещаются в текущую ячейку в Excel и ее правого соседа.

Sub GrabUsage()
Dim FName As String, FD As FileDialog
Dim WApp As Object, WDoc As Object, WDR As Object
Dim ExR As Range

    Set ExR = Selection ' current location in Excel Sheet

    'let's select the WORD doc
    Set FD = Application.FileDialog(msoFileDialogOpen)
    FD.Show
    If FD.SelectedItems.Count <> 0 Then
        FName = FD.SelectedItems(1)
    Else
        Exit Sub
    End If

    ' open Word application and load doc
    Set WApp = CreateObject("Word.Application")
    ' WApp.Visible = True
    Set WDoc = WApp.Documents.Open(FName)

    ' go home and search
    WApp.Selection.HomeKey Unit:=6
    WApp.Selection.Find.ClearFormatting
    WApp.Selection.Find.Execute "Minimum Stock"

    ' move cursor from find to final data item
    WApp.Selection.MoveDown Unit:=5, Count:=1
    WApp.Selection.MoveRight Unit:=2, Count:=2

    ' the miracle happens here
    WApp.Selection.MoveRight Unit:=2, Count:=1, Extend:=1

    ' grab and put into excel        
    Set WDR = WApp.Selection
    ExR(1, 1) = WDR ' place at Excel cursor

    'repeat
    WApp.Selection.HomeKey Unit:=6
    WApp.Selection.Find.ClearFormatting
    WApp.Selection.Find.Execute "Period of Report:"
    WApp.Selection.MoveRight Unit:=2, Count:=8
    WApp.Selection.MoveRight Unit:=2, Count:=3, Extend:=1

    Set WDR = WApp.Selection
    ExR(1, 2) = WDR ' place in cell right of Excel cursor

    WDoc.Close
    WApp.Quit

End Sub

Вы можете создать кнопку и вызвать этот сабвуфер оттуда или связать GrabUsage () с функциональной клавишей.

Я прокомментировал WApp.Visible = True, потому что в процессе производства вы не хотите, чтобы WORD даже появлялся, но он вам понадобится для отладки и воспроизведения движений курсора.

Недостатком позднего связывания (а не использования ссылок на библиотеку Word) является жесткое кодирование единиц (6 = история, 5 = строка, 2 = слово) вместо использования перечислений Word, но я иногда получаю сбои ОС при раннем связывание .... не очень сексуально, но, кажется, работает.

Для объекта FileDialog требуется ссылка на библиотеку MS Office Office. AFAIK это стандартно в Excel 2003, но лучше проверить, чем вылетать.

И я не включил код, чтобы проверить, действительно ли найдены предметы; Я оставляю это вашему творчеству.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...