Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2010, 19:11   #1
Swatch
Форумчанин
 
Регистрация: 05.07.2009
Сообщений: 209
Печаль выгрузка в Excel по шаблону

Здравствуйте!!! Подскажите, пожалуйста, как можно решить следующую проблему. Я задавала уже здесь вопрос, почему при выгрузке из аксесса 97 отчета в файл Excel в полученном файле текстовое поле "Код материала" автоматически преобразуется в числовое... решение так и не нашла и решила попробовать выгружать отчет с применением шаблона. Я создала шаблон Excel "КР_ВыгрузкаЭксель".xlt, в котором сохранила нужное форматирование и при выгрузке указала путь к шаблону

Dim mn, mn1 As String
Dim u As String
u = UserName_W() - имя пользователя
mn = "КР_ВыгрузкаЭксель"
mn1 = Format(Date, "dd.mm.yyyy")
DoCmd.OutputTo acOutputReport, mn, acFormatXLS, "C:\Documents and Settings\" & u & "\My Documents\" & mn & mn1 & ".xls", True, "C:\Zatraty\КР_ВыгрузкаЭксель.x lt" - выгружаю отчет "КР_ВыгрузкаЭксель" в свою папку в файл "КР_ВыгрузкаЭксель9.11.2010" с форматированием по шаблону который лежит в "C:\Zatraty"
но при открытии полученного файла форматирование как в шаблоне не сохраняется, вобщем шаблон не помог (((((((((((((((((
Swatch вне форума Ответить с цитированием
Старый 09.11.2010, 22:35   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Swatch.
"..задавала .. вопрос .. решение так и не нашла.." Вы лукавите, это Ваши слова,
Цитата:
...Не совсем поняла...
найти и понять - разные вещи, вариант решения был предложен значит все же не поняла, печально

очередное объяснение надеюсь не будет "не найденным"
к сожалению с использованием команды JET ядра DoCmd которой Вы усердно пытаетесь достичь результата, возможно только решение предложенное мной ранее (которое Вы не нашли)
Но использование библиотеки ADO дает возможность обойти эту "проблему". Образец кода выполняет такую задачу, т.е. выкладывает рекордсет на лист шаблона Excel, возможно с заданным форматированием
Код:
'процедура
Sub ToExcel(sFile$, sSQL$, sTitle$, sCap$, Optional iSheet% = 1)
'sFile$     путь сохранения файла
'sSQL$      запрос/таблица источник рекордсета
'sTitle$    титул1
'sCap$      титул2
'iSheet%    номер листа
Const sTempl = "\report.xls" 'шаблон отчета в папке с БД
Dim rs As ADODB.Recordset, XL As Object, b As Boolean
Dim XLT As Object, XLL As Object
Dim s$
Set rs = New ADODB.Recordset
rs.Open sSQL, CurrentProject.Connection, adOpenKeyset, adLockReadOnly
If Not rs.State = adStateOpen Then              'не открыт рекордсет
ElseIf Not rs.EOF Then                          'рекордсет пуст
    On Error Resume Next: Err.Clear
    Set XL = CreateObject("Excel.Application")  'Переменная созданного объекта Excel
    s = CurrentProject.Path + sTempl            'расположение щаблона
    If Not Len(Dir(sFile)) = 0 Then             'файл существует
        Set XL = XL.Workbooks.Open(sFile)       'Открытие файла
    ElseIf Len(Dir(s)) = 0 Then                 'шаблон отсутствует
        Set XLT = XL.Workbooks.Add              'создание книги
        XLT.SaveAs sFile                        'сохранение книги
    Else
        Set XLT = XL.Workbooks.Open(s)          'открытие шаблона
        XLT.SaveAs sFile                        'сохранение книги
    End If
    With XLT.Worksheets(iSheet)
        .Range("A1:R65000").ClearContents       'предварительное очищение
        .Range("a6").CopyFromRecordset rs       'размещение рекордсета
        'заполение титула
        .[a1] = Format(Date, "d mmmm yyyy г.")
        .[a2] = sTitle
        .[a3] = sCap
    End With
    XLT.Save                                    'сохранение книги
    XL.Application.Visible = True               'отображение Excel
End If
End Sub
'её применение
Sub buildReport()
Const sP2 = ".xls"
Dim s$
s = CurrentProject.Path + "\" + Format(Date, "dd.mm.yyyy") + "_" + Environ("UserName") + sP2
ToExcel s, "Tabl", "Отчет " + Environ("UserName"), "о проделанной работе"
End Sub
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 10.11.2010, 19:30   #3
Swatch
Форумчанин
 
Регистрация: 05.07.2009
Сообщений: 209
Вопрос Ошибка

Спасибо, Евгений, я попробовала применить ваш вариант, только в качестве источника отчета у меня не adodb а обычный рекордсет то бишь запрос в базе данных... однако возникло новое препятствие:
.Range("a6").CopyFromRecordset rs
при записи в эксель из этого рекордсета выходит ошибка "Class doesn't support Automation (Error 430)"
что бы это значило?
Swatch вне форума Ответить с цитированием
Старый 10.11.2010, 22:34   #4
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Swatch, попробуйте подключить Excel, в редакторе VBA, меню : Tools / References / Microsoft Excel..., думаю у Вас всё получится.

Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 10.11.2010, 23:46   #5
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Swatch, ещё MS Access позволяет выполнять подобные запросы
Код:
SELECT * INTO Лист1 IN 'C:\Temp.xls'[Excel 8.0;HDR=YES;IMEX=2] FROM Table1
ити так:
Код:
SELECT * INTO Лист1$A6:F500 IN 'C:\Temp.xls'[Excel 8.0;HDR=YES;IMEX=2] FROM Table1
создающие файл C:\Temp.xls если не существует или только заполняющий Лист1 существующего файла.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VAlue2&! Выгрузка в Excel Регинка-малинка БД в Delphi 0 04.10.2010 20:33
Выгрузка из DBGrid в Excel Nika03 БД в Delphi 1 19.05.2010 22:06
Выгрузка Excel и выборка asale Общие вопросы Delphi 3 03.05.2010 12:11
выгрузка определенных ячеек из excel kate158 Общие вопросы Delphi 12 23.09.2009 11:26
Как указать путь к шаблону excel ??? antoni БД в Delphi 4 04.11.2008 11:22