Массив, как источник данных для сводной таблицы

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Доброго времени суток всем!
Вопрос по существу: есть програмно сформированный (без применения ADO) двумерный массив данных, представляющий из себя базу данных (первая строка - заголовки столбцов, остальное - данные), числом строк превышающий 65536 строк.
Как сформировать на его основе сводную таблицу в Excel 2003? Т.е. нужно каким-то образом присвоить объекту PivotCache значение массива без переноса данных на лист. И пока не получается.
Подскажите, кто знает, будьте добры!
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Ну что, никто не сможет помочь?
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Разгрузите ваш массив в файл одного из стандартных форматов (csv,dbf,mdb) а затем стройте сводную таблицу на основе внешнего источника данных
Андрей Энтелис,
aentelis.livejournal.com
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

А как это сделать из Excel (загрузить массив в файл csv, dbf или mbd)?
Как построить сводную таблицу из внешнего источника данных я разберусь.
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Самое простое - записать CSV - это же обычный текстовый файл -идёте в цикле по вашей матрице и пишете построчно...
Либо через ADO в MDB Insert'тами
Либо воспользоваться одним из многочисленных Freeware классов для VBA для работы с dbf и создать dbf
Что именно непонятно?
Андрей Энтелис,
aentelis.livejournal.com
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Решил остановиться на первом варианте, как наименее затратном. Записал построчно CSV-файл, проверил его, всё в порядке.
Застопорился на этапе создания кэша сводной таблицы:

Код: Выделить всё

Dim PTcache As PivotCache
Dim ConString As String
Dim QueryString As String
Dim file_name As String

Set PTcache = ActiveWorkbook.PivotCaches.Add _
      (SourceType:=xlExternal)

file_name = "C:\" 'Файл для подключения C:\Data.csv

ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &  file_name & _
                   "; Extended Properties=""text;HDR=Yes;FMT=Delimited"";"

QueryString = "SELECT * FROM Data.csv"
	
With PTcache
        .Connection = ConString 'На этой строке выдаёт ошибку: _
                              "Не источник данных ODBC и не веб-запрос"
        .CommandText = QueryString
End With
Видимо, что-то не в порядке со строкой подключения. Но что именно?
Данные взял здесь: http://connectionstrings.com/textfile
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Уфф, разобрался! Оказывается сначала нужно было создать объект рекордсет с данными. А уже после этого на его основе формировать кэш сводной таблицы. Строка подключения оказалась правильная, но напрямую с методом "Connection" кэша сводной таблицы она не работает. Только через рекордсет:

Код: Выделить всё

Set PTcache.Recordset = newRecordset
Правильный пример нашёл во встроенной справке по vba.
Ответить