-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


Выгрузка перекрестного запроса в xcell шаблон

Суббота, 25 Июля 2015 г. 09:57 + в цитатник
Возможна ли выгрузка перекрестного запроса в Excel шаблон?
Сейчас реализовано так.

DoCmd.OpenWQuerry "name", acViewNormal, acReadOnly ' этот запрос создает новую табличку
DoCmd.OpenWQuerry "name1", acViewNormal, acReadOnly ' этот запрос создает перекресный запрос
DoCmd.Close acQuerry, "name1" ' это закрывает 2й запрос, почему то 1й формирует таблицу но не открывается а второй открывается (странность)
DoCmd.TransferSpreadSheet acExport, acSpreadSheetTypeExel5, "name1", "c:\test\test.xlsx"

В принципе такая выгрузка устраивает.
НО!
Перекрестный запрос не умеет (или я просто не знаю об этом) считать сумму по колоночно.
Поэтому хочется сделать готовый эксель файл с строчкой суммирования по колонкам.
Или при существующей выгрузке как то добавить кодом что бы в последней строке после выгрузки вставлялась формула суммирования.
_________________
кроме того интересует вопрос как заставить в данной конструкции выгружаться данные в нужный мне лист? так как почему то сейчас при экспорте в книге Excell создается лист с именем выгружаемого запроса, если такой лист есть создается такое же имя с добавлением циферки 1, при чем потом в последующем он ее перезатирает и новый лист не создает (прям полтергейст).
________________
2й вопрос, почему то при создании перекрестного отчета колокни определяются как формат даты 25_07_2015 (хочется привычный вид иметь как 25.07.2015)
Кроме того почему то навание колонок при выгрузке имеют название полей в перекрестном отчете, хотя по всем полям занесены описания, и хотелось бы вместо "Name_pol" видеть "наименование".
_______________
3й вопрос) как заставить в конце формирования отчета открывать файлик отчета сформированный в Excell)
__________________

Нашел примерный код:
Private Sub testexcel_Click()
'Объявляем переменные
Dim XL As Object
Dim XLT As Object
Dim newrow As Object
Dim rsd As ADODB.Recordset
Dim strSQL As String
Set rsd = New ADODB.Recordset
'Запрос к базе данных
strSQL = "select * from dbo.table where kod = " & Me.kod & ""
rsd.open strSQL, CurrentProject.Connection
'Создаем необходимые объекты
Set XL = CreateObject("Excel.Application")
'для примера показываю, как можно сразу загружать шаблон без выбора
Set XLT = XL.Workbooks.open("C:\testfile.xls")
'1 способ если источнике данных всего одна строка
With XLT.Worksheets("Лист1")
              .[a1] = rsd.Fields("field1")
              .[b1] = rsd.Fields("field2")
              .[c1] = rsd.Fields("field3")
              .[d1] = rsd.Fields("field4")
            End With
'2 способ если строк в источнике несколько
'причем мы учтем то, что у нас есть шапка и примечание в Excel
'и мы не знаем, сколько строк у нас вставится 
'и поэтому строки будем добавлять в случае необходимости
'зададим, с какой строки будем начинать вставлять данные
Rowss = 10
'для нумерации
numrow = 1
'запускаем цикл до тех пор, пока не закончатся строки в нашем источнике
While Not (rsd.EOF)
    'смотрим, если строк больше чем мы задали в шаблоне
     If Rowss >= 12 Then
	 'то добавляем строку
         XLT.Worksheets("Лист1").Rows(Rowss).Insert
	 'Запомним нашу строку
         Set newrow = XLT.Worksheets("Лист1").Rows(Rowss)
	 'и вставим туда копию предыдущей строки
	 'для того если вдруг у вас там есть объединенные ячейки или какие-то нужные данные
	 'так как новая строка создастся без всяких объединений и значений
         XLT.Worksheets("Лист1").Rows(Rowss - 1).Copy newrow
	 'это просто для примера как можно очистить некий диапазон внутри документа
         'XLT.Worksheets("Лист1").Range("A10:F10").ClearContents
         'динамически формируем адрес нужной ячейки
	 cell = "a" & Rowss
	 'и задаем ей значение
         XLT.Worksheets("Лист1").Range(cell) = numrow
         cell = "b" & Rowss
         XLT.Worksheets("Лист1").Range(cell) = rsd.Fields("field5").Value
         'переходим на следующую строку
	 Rowss = Rowss + 1
	 'переходим на следующую строку в источнике данных
         rsd.MoveNext
     Else
	 'а это выполняется до тех пор, пока не закончатся заданные строки в шаблоне
	 'т.е. если строк в источнике всего 1 то в код, который выше мы даже не попадем
         cell = "a" & Rowss
         XLT.Worksheets("Лист1").Range(cell) = numrow
         cell = "b" & Rowss
         XLT.Worksheets("Лист1").Range(cell) = rsd.Fields("field5").Value
         Rowss = Rowss + 1
         rsd.MoveNext
     End If
	'для нумерации
         numrow = numrow + 1
'конец цикла
Wend
'это просто пример как можно удалить строку целиком
'XLT.Worksheets("Лист1").Rows(20).Delete
'делаем Excel видимым
XL.Visible = True
'Очищаем переменные
Set XL = Nothing
Set XLT = Nothing
Set newrow = Nothing
End Sub

но в данном случае он берет данные из SQL, а я из перекресного запроса. И не понятно как его переделать для моего запроса =(

http://www.sql.ru/forum/1167592/vygruzka-perekrestnogo-zaprosa-v-xcell-shablon


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку