Страницы: 1
RSS
Сводная таблица на основе двумерного массива, кэш сводной таблицы на основе двумерного массива
 
Есть большой массив данных, который не влазит на лист, - masiv(i,7) т.е. 7 столбцов и очень много строк...
как из него сделать кэш для сводной
у меня есть мысль

Код
 Dim objPivotCache As PivotCache
 Set objPivotCache = ActiveWorkbook.PivotCaches.Add(xlExternal)

' А вот как передать  masiv(i,7) в objPivotCache???
' Строим сводную на лист1
 With wsPivot
   objPivotCache.CreatePivotTable TableDestination:=sheets("Лист1").Range("a1")
 End With

Может кто знает как это сделать??? без выгрузки в промежуточные файлы типа (txt) ?
Изменено: SLAVICK - 25.10.2015 02:38:15
 
Можно, по идее, только не через массив, а через PivotCache.Recordset задать собственную таблицу Recordset, как результат некоторой выборки. Только сводная в этом случае не будет обновляться.
Как пример для одной из создаваемых таблиц
Скрытый текст
 
это понятно, а вот с массива..
Живи и дай жить..
 
Спасибо, как запрос передать в PivotCache.Recordset я уже нашел :D, даже нашел как запрос передать в массив, а вот как массив в тот же PivotCache.Recordset :?:
 
Приношу свои извинения за отсутствие деталей и сумбурность. Мне казалось логичным, что следующий шаг понятен - переписать данные массива в свой Recordset.
Скрытый текст
 
а как подсунуть этот кэш уже существующей сводной?
пробую  
Код
Set ActiveSheet.PivotTables("ÇâåäåíàÒàáëèöÿ2").PivotCache.Recordset = pRSet
не правильно
 
Спасибо  :D , попробую...
С этим можно многое сделать :)
 
C цифрами работает... а с текстом не хочет из за строки :
Код
pRSet.Fields.Append "F" & CStr(k), 5

Нужно задать свойства поля, и длину

Цитата
' Типы данных ADOX, доступные для Excel:
Const adDouble = 5, adDate = 7, adCurrency = 6, adBoolean = 11, adVarWChar = 202, adLongVarWChar = 203
т.е. должно для текста быть что-то вроде:
Код
pRSet.Fields.Append "F" & CStr(k), 203, 20

значит текст длиной 20 символов. Правильно я понимаю?  :D  
т.е. если у нас есть таблица то нужно для каждого поля определить тип данных и прописать его в свойства поля... т.к. если поставить этот формат на числа - сводная не поймет что это число...
Еще раз спасибо Вам. Очень многому научился.  :D
Изменено: SLAVICK - 03.10.2013 02:08:57
 
Доброе утро (или доброй ночи) ;)
Цитата
Правильно я понимаю?
Да всё правильно. Recordset - аналог таблицы базы данных поэтому для каждого поля нужно определить тип. В моём примере массив состоял из одного целочисленного типа, поэтому и для всех полей был указан он, иначе, если "миссив" Variant, то нужно задать для каждого столбца свой тип.
Цитата
Еще раз спасибо Вам. Очень многому научился.
Успехов.
 
Dima S
Цитата
а как подсунуть этот кэш уже существующей сводной?
А кэш он ... разный бывает (5 типов). И не думаю, что можно поменять разнотипные. Впрочем, можете по экспериментировать с методами сводной таблицы ChangePivotCache, ChangeConnection
Изменено: anvg - 03.10.2013 05:30:10
 
Цитата
Dima S пишет:
а как подсунуть этот кэш уже существующей сводной?
Цитата
anvg пишет:
можете по экспериментировать с методами сводной таблицы ChangePivotCache, ChangeConnection
Подскажите плиз как это реализовать, как это должно выглядеть
У меня есть сводная созданная на основе массива(320т.строк), чтобы добавить новые данные удаляю сводную и создаю новую с новыми данными
В сводной сгруппированы поля по условию, после удаления вся эта наработка исчезает ((
Если правильно понимаю необходимо удалить кэш и залить новый при этом и наработка не пропадет и новые цифры будут!??
P.S. думал создать сводную а потом группировать макросом но там как-то совсем не понятно ((
 
Доброе время суток.
Цитата
У меня есть сводная созданная на основе массива(320т.строк),
А что подразумевается под массивом? Если это некоторая таблица листа Excel, то просто в источнике данных поменяйте диапазон. Если это что-то, полученное, как обсуждалось здесь, преобразованием некоторого массива в Recordset и подсовыванием в качестве кэша, то по другому по-видимому никак (по крайней мере на момент завершения обсуждения у меня ничего не вышло).
А главное в чём смысл такого варианта? Не проще ли хранить такие большие данные в какой-нибудь базе данных и уже по ним строить сводную? Некоторый тип сводных вполне можно получать запросом на группировку.
 
У меня Excel2003, так что сводную делаю на основе двумерного массива.
С базами данных я не сталкивался У нас данные выгружаются в xls, а так все храниться в dbf файлах Это получается надо изучать базы данных (какую выбрать , как туда заливать и тд)
А мож установить 2007 Excel и использовать xlsx файл как хранилище, написать макрос, заливать туда новые данные!??
 
Цитата
все храниться в dbf файла
Вам тогда проще скачать и установить Microsoft OLE DB Provider for Visual FoxPro (удобнее чем существующий Jet.OLEDB.4 тем, что позволяет задавать codepage для dbf-файлов) для выполнения запросов к таблицам dbf, создать подключение с запросом и уже затем это подключение использовать в качестве источника для сводной таблицы. После этого нужно будет только обновлять сводную без всяких "танцев с бубном". Стоку подключения можно взять Visual FoxPro connection strings (для Free table directory).
Успехов.
 
Спасибо большое за совет
Обращение к БД через SQL запрос это очень интересно!)
Продолжаю копать в этом направлении
Изменено: Tikr - 20.02.2014 10:12:12
 
Добрый всем вечер!
Процедура  ArrayToRecordset() очень классная, только подскажите,пожалуйста, возможно ли чтобы данные массива добавлялись не в "Выберите поле для добавления в отчёт", а часть полей добавлялась   непосредственно сразу в сводную? Возможно ли это ? и что необходимо дописать для этого?

Цель: тоже обработка файла большого размера (300 000 строк) для записи его в "накопительный регистр" после нахождения нужных слов регулярными выражениями
Изменено: SvetaS_love - 24.10.2015 22:52:30
одинокий странник
 
Доброе время суток
Цитата
SvetaS_love написал:
а часть полей добавлялась   непосредственно сразу в сводную?
Что вы под этим подразумеваете? Макросом дальше назначались столбцы Recorset для строк/столбцов и вычисляемой статистики?
 
Добрый День!
Андрей VG, не поняла вопрос.
Я имела в виду, что  ArrayToRecordset() даёт результат , который на рисунке
одинокий странник
 
а хотелось бы, сразу в структуру таблицы, чтобы поля добавлялись....
т.е.
одинокий странник
 
Цитата
SvetaS_love написал: а хотелось бы, сразу в структуру таблицы
примеры заполнения полей Сводной в VBA - здесь -
Как поставить заполненый Recordset в источник сводной таблицы
и подключайте способности google -
хорошие примеры кодов по Сводным - на globaliconnect, contextures (линки в той же ветке в #9)
успехов
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
JeyCi,огромное спасибо... пойду изучать.....
одинокий странник
Страницы: 1
Наверх