Тема: Добавление в отчёт данных из ранее сохранёного файла Excel

Здравствуйте. Мне необходимо присоединить к отчёту данные из ранее сохранёного файла Excel, путь к которому постоянен.  Мне кажется, что  это возможно через процедуру Implement, если в ней прописать подключение к нужному файлу. Но я в этом не очень сильна...  Может кто-то уже делал нечто похожее.  Поделитесь пожалуйста опытом и соображениями.

Re: Добавление в отчёт данных из ранее сохранёного файла Excel

Получить доступ к какому либо файлу Excel в процедуре Implement можно, например вот так:

Set XLS = CreateObject("Excel.Application") ' создаем объект Excel
Set XLS_App = XLS.Application ' создаем ссылку на глобальный объект приложение

XLS.Visible = False ' скроем приложение из задач
XLS.DisplayAlerts = False ' откажемся от всяких сообщений Excel

XLS.Workbooks.Close

Str = Путь+"Имя Файла.xls" ' файл по умолчанию

     Call XLS_App.Workbooks.Open(Str)

     Set Sheet = XLS_App.ActiveSheet ' активный лист книги

Далее другие команды VBA по необходимости.

Другой вопрос, что вы подразумеваете под словом "присоединить к отчету данные". Опишите, пожалуста, какие данные лежат у вас в этом файле, какую задачу вы хотите решить. Если это просто дополнительные данные, которые должны попасть к вам в отчет, то целесообразнее их хранить в таблице Access, а не в Exel

Re: Добавление в отчёт данных из ранее сохранёного файла Excel

Нужно составить смету на ремонт конкретных серийных номеров оборудования. Данные по состояниям оборудования есть в ТКС. Отчётом можно вывести то оборудование ( с категорией ремонтной сложности), для которого назначен капитальный ремонт, с его сроками, параметрами и пр. А потом нужно категорию ремонтной сложности каждого станка, подлежащего кап. ремонту, умножить на стоимость одной ремонтной единицы, которая рассчитывается в том самом экселевском файле.

Re: Добавление в отчёт данных из ранее сохранёного файла Excel

Поскольку, для формирования нужного вам отчета, необходимы перекрестные запросы к таблицам выгруженной БД Access, при этом желательно использовать и таблицу со стоимостями, то логичнее всего перенести нужные вам данные в дополнительную таблицу Access. Сделать это можно как в процедуре Implement, так и в пользовательской процедуре, вызываемой в области "Выполнить" бланка.
Выглядеть это может примерно таким образом:

Dim FullPathMDB As String
Dim DatConct As Object
Dim RecSet As Object

Set DatConct = CreateObject("ADODB.Connection")
Set RecSet = CreateObject("ADODB.Recordset")

   FullPathMDB = ActiveWorkbook.Worksheets("ComplSheet").Range("RGN_Data").Value
   DatConct.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FullPathMDB ' Открыть соединение к БД Access с выгруженными данными
RecSet.Open "Create table TableSmeta (p0 string, p1 long ...)", DatConct            ' Создать дополнительную таблицу в текущем наборе данных
RecSet.Close

'состав полей таблицы должен соответствовать вашему внешнему файлу Excel, в нем должно быть поле для связи с другими таблицами базы
RecSet.Open "TableSmeta", DatConct, 1, 3             ' Открыть созданную таблицу на запись

'Далее организовать цикл по количеству строк внешней таблицы Excel, примерно так:

i = 2
Do While Sheet.Range("A"+CStr(i)).Value <> ""
With  RecSet
         .Addnew
         .fields("p0").Value = Sheet.Range("A"+CStr(i)).Value     ' Здесь Sheet активный лист (см. пример выше)
         .fields("p1").Value = Sheet.Range("B"+CStr(i)).Value
         .Update
         End With
i = i + 1
Loop

RecSet.Close
DatConct.Close
XLS.Application.Quit ' выход из Excel
            Set XLS_App = Nothing
            Set XLS = Nothing

Re: Добавление в отчёт данных из ранее сохранёного файла Excel

Спасибо за ответ, попробую реализовать.

Re: Добавление в отчёт данных из ранее сохранёного файла Excel

Как вариант, можно еще предложить следующее:
если таблица со стоимостями ремонтных единиц не очень часто меняется и имеет простую структуру, то проще всего ее сохранить в виде дополнительной таблицы прямо в шаблоне отчета. Сделать это можно стандарным способом с помощью MS Access. Для этого надо зайти в режим редактирования вашего шаблона отчета, закладка "База MS Access", кнопка "Редактировать". Откроется шаблон набора данных, а именно база MS Access с таблицами для выгрузки данных. Вам надо просто добавить свою таблицу, импортированную из Excel - файла и сохранить шаблон отчета вместе с ней. Для этого нажимаете меню "Файл" - "Внешние данные" - "Импорт".
При запуске отчета на выполнение данная таблица будет выгружаться вместе с переменными данными.
Еще одна рекомендация: в шапке таблицы лучше указывать наименования столбцов латинскими буквами, как и имя листа, где таблица находится. При импорте в БД, имя листа станет именем таблицы, а имена столбцов в шапке, именами полей.

Re: Добавление в отчёт данных из ранее сохранёного файла Excel

Я думала о таком варианте.... Но тогда получается, что как только данные по стоимостям изменятся, мне надо будет заменять таблицу в шаблоне БД. А при реализации первого варианта, предложенного Вами, всё изменения стоимости, проведёные пользователями в Excel, автоматом передадутся в отчёт. Надо только им строго-настрого :) запретить менять место хранения файла. Попробую и так и так. Лишняя тренировка не помешает :)

Re: Добавление в отчёт данных из ранее сохранёного файла Excel

Тогда такой совет:
в качестве источника данных используйте вызов функции,в которую и поместите вышеуказанную обработку и другие действия, позволяющие вернуть необходимый набор данных. Т.е.  область ИсточникДанных = "GetDataSource  GetDs". Здесь GetDs - имя функции (см. п 14.10.11 справки). Это будет гарантией того, что формирование отчета не начнется ранее, чем перенесутся данные из внешней таблицы Excel в таблицу Access.
А поскольку функция будет находиться в модуле БД Access, отпадет необходимость подсоединяться к ней через ADO. Любой запрос к базе можно осуществить таким образом:

Dim RecSet As ADODB.Recordset

Set RecSet = New ADODB.Recordset
RecSet.Open "Select ........", Application.CurrentProject.Connection, adOpenDynamic, adLockOptimistic
...