выбрать из двух таблиц, используя JPQL

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

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

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

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

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

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

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

Дизель (л)
390436 15012 25000

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

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

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

7
задан Community 9 July 2018 в 19:34
поделиться

1 ответ

вот код, использующий позднее связывание чем 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. Насколько я знаю, это стандарт в Excel 2003, но лучше проверить, чем сбой.

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

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

8
ответ дан 7 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: