Страница 1 из 1

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

Добавлено: 07 окт 2010, 22:33
AlexZZZ
Доброго времени суток всем!
Вопрос по существу: есть програмно сформированный (без применения ADO) двумерный массив данных, представляющий из себя базу данных (первая строка - заголовки столбцов, остальное - данные), числом строк превышающий 65536 строк.
Как сформировать на его основе сводную таблицу в Excel 2003? Т.е. нужно каким-то образом присвоить объекту PivotCache значение массива без переноса данных на лист. И пока не получается.
Подскажите, кто знает, будьте добры!

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

Добавлено: 11 ноя 2010, 23:22
AlexZZZ
Ну что, никто не сможет помочь?

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

Добавлено: 16 ноя 2010, 19:25
Aent
Разгрузите ваш массив в файл одного из стандартных форматов (csv,dbf,mdb) а затем стройте сводную таблицу на основе внешнего источника данных

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

Добавлено: 16 ноя 2010, 23:42
AlexZZZ
А как это сделать из Excel (загрузить массив в файл csv, dbf или mbd)?
Как построить сводную таблицу из внешнего источника данных я разберусь.

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

Добавлено: 16 ноя 2010, 23:52
Aent
Самое простое - записать CSV - это же обычный текстовый файл -идёте в цикле по вашей матрице и пишете построчно...
Либо через ADO в MDB Insert'тами
Либо воспользоваться одним из многочисленных Freeware классов для VBA для работы с dbf и создать dbf
Что именно непонятно?

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

Добавлено: 23 ноя 2010, 00:28
AlexZZZ
Решил остановиться на первом варианте, как наименее затратном. Записал построчно 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

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

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

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

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