Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Возможно ли получить результат запроса PowerQuery в массив - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Возможно ли получить результат запроса PowerQuery в массив (Макросы/Sub)
Возможно ли получить результат запроса PowerQuery в массив
nilem Дата: Пятница, 19.04.2019, 08:27 | Сообщение № 1
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Всем здравствуйте!
Собственно, вопрос в названии темы. Каким образом можно (можно ли?) результат запроса в PowerQuery не выгружать на лист, а получить в виде VBA-массива, чтобы потом обработать его макросами.


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеВсем здравствуйте!
Собственно, вопрос в названии темы. Каким образом можно (можно ли?) результат запроса в PowerQuery не выгружать на лист, а получить в виде VBA-массива, чтобы потом обработать его макросами.

Автор - nilem
Дата добавления - 19.04.2019 в 08:27
sboy Дата: Пятница, 19.04.2019, 09:16 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Я думаю, что можно, надо экспериментировать. Запрос хранится в книге, данные можно получить через OLEDB. Посмотрите в свойствах запроса в "Подключениях" к книге.
Встречный вопрос, а почему не обработать данные в PQ до необходимого результата?


Яндекс: 410016850021169
 
Ответить
СообщениеДобрый день.
Я думаю, что можно, надо экспериментировать. Запрос хранится в книге, данные можно получить через OLEDB. Посмотрите в свойствах запроса в "Подключениях" к книге.
Встречный вопрос, а почему не обработать данные в PQ до необходимого результата?

Автор - sboy
Дата добавления - 19.04.2019 в 09:16
nilem Дата: Пятница, 19.04.2019, 09:32 | Сообщение № 3
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Спасибо за ответ. Хотелось, чтобы сам PQ своими средствами создавал массив.
"почему не обработать данные в PQ" - результат будет порядка 5 млн строк, их надо будет разбить и, например, сохранить в csv.


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеСпасибо за ответ. Хотелось, чтобы сам PQ своими средствами создавал массив.
"почему не обработать данные в PQ" - результат будет порядка 5 млн строк, их надо будет разбить и, например, сохранить в csv.

Автор - nilem
Дата добавления - 19.04.2019 в 09:32
boa Дата: Пятница, 19.04.2019, 12:13 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
nilem,
тогда вам PQ не нужна,
используйте ADODB.Recordset и выгружвйте в csv


 
Ответить
Сообщениеnilem,
тогда вам PQ не нужна,
используйте ADODB.Recordset и выгружвйте в csv

Автор - boa
Дата добавления - 19.04.2019 в 12:13
nilem Дата: Пятница, 19.04.2019, 12:46 | Сообщение № 5
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
используйте ADODB.Recordset

ADO пробовал - оч. долго. И умирает примерно на втором млн.
Хотел вот попытаться современными средствами )


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
используйте ADODB.Recordset

ADO пробовал - оч. долго. И умирает примерно на втором млн.
Хотел вот попытаться современными средствами )

Автор - nilem
Дата добавления - 19.04.2019 в 12:46
anvg Дата: Суббота, 20.04.2019, 10:59 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток

ADO пробовал - оч. долго.
Первую строку не теряли? Года два тому назад пробовал, так и не смог побороть этот глюк. :(
 
Ответить
СообщениеДоброе время суток

ADO пробовал - оч. долго.
Первую строку не теряли? Года два тому назад пробовал, так и не смог побороть этот глюк. :(

Автор - anvg
Дата добавления - 20.04.2019 в 10:59
nilem Дата: Суббота, 20.04.2019, 15:15 | Сообщение № 7
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Первую строку не теряли?

Нет, с этим вроде все норм. Запрос происходит к базе Оракл.


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
Первую строку не теряли?

Нет, с этим вроде все норм. Запрос происходит к базе Оракл.

Автор - nilem
Дата добавления - 20.04.2019 в 15:15
anvg Дата: Суббота, 20.04.2019, 23:50 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Нет, с этим вроде все норм. Запрос происходит к базе Оракл.

Я несколько о другом :) О доступе к результату запроса Power Query из VBA через ADODB.
1. Выполняется первый раз более минуты.
2. Иногда вылетает с ошибкой.
3. Если и сработает, то вывод начинается со второй строки данных.
Пример прикладываю. Excel 2016 64bit, версия Power Query 2.61.5192
К сообщению приложен файл: testConn.xlsb (21.6 Kb)
 
Ответить
Сообщение
Нет, с этим вроде все норм. Запрос происходит к базе Оракл.

Я несколько о другом :) О доступе к результату запроса Power Query из VBA через ADODB.
1. Выполняется первый раз более минуты.
2. Иногда вылетает с ошибкой.
3. Если и сработает, то вывод начинается со второй строки данных.
Пример прикладываю. Excel 2016 64bit, версия Power Query 2.61.5192

Автор - anvg
Дата добавления - 20.04.2019 в 23:50
nilem Дата: Вторник, 23.04.2019, 09:43 | Сообщение № 9
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
В общем, как и советовал boa, с ADO получилось выгрузить 5 млн строк и записать в csv. Долго конечно, но работает.
Если использовать запрос Power Query из ADO по примеру anvg, да, первая строка данных пропадает. Видимо, и запрос PQ не берет заголовки, и ADO тоже - так и пропадают 2 верхние строки (заголовок и 1-я строка данных). Но это только предположение.
Такие вот пироги :)


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеВ общем, как и советовал boa, с ADO получилось выгрузить 5 млн строк и записать в csv. Долго конечно, но работает.
Если использовать запрос Power Query из ADO по примеру anvg, да, первая строка данных пропадает. Видимо, и запрос PQ не берет заголовки, и ADO тоже - так и пропадают 2 верхние строки (заголовок и 1-я строка данных). Но это только предположение.
Такие вот пироги :)

Автор - nilem
Дата добавления - 23.04.2019 в 09:43
anvg Дата: Вторник, 23.04.2019, 10:00 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Долго конечно, но работает

Запрос происходит к базе Оракл.
Средствами Oracle не пробовали?
 
Ответить
Сообщение
Долго конечно, но работает

Запрос происходит к базе Оракл.
Средствами Oracle не пробовали?

Автор - anvg
Дата добавления - 23.04.2019 в 10:00
boa Дата: Вторник, 23.04.2019, 12:06 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
nilem,
Долго конечно, но работает.
может SQL-запрос не правильно составлен?
накидал "Козу" для выгрузки данных, может поможет...


 
Ответить
Сообщениеnilem,
Долго конечно, но работает.
может SQL-запрос не правильно составлен?
накидал "Козу" для выгрузки данных, может поможет...

Автор - boa
Дата добавления - 23.04.2019 в 12:06
nilem Дата: Вторник, 23.04.2019, 13:43 | Сообщение № 12
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Средствами Oracle не пробовали?

Пока нет. Наверное, это будет следующий этап )


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
Средствами Oracle не пробовали?

Пока нет. Наверное, это будет следующий этап )

Автор - nilem
Дата добавления - 23.04.2019 в 13:43
nilem Дата: Вторник, 23.04.2019, 13:48 | Сообщение № 13
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
boa, спасибо за "Козу" )
У меня вот так:

Странно, но GetString работает заметно медленнее, чем Do...Loop & MoveNext (проверял на 200k записей)


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеboa, спасибо за "Козу" )
У меня вот так:

Странно, но GetString работает заметно медленнее, чем Do...Loop & MoveNext (проверял на 200k записей)

Автор - nilem
Дата добавления - 23.04.2019 в 13:48
boa Дата: Вторник, 23.04.2019, 14:10 | Сообщение № 14
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
nilem,
вот тут и подвох
вы выгружаете каждую строку по отдельности, а в моем примере все выгружается скопом.
после вывода заголовков выгружайте весь РСТ в файл


 
Ответить
Сообщениеnilem,
вот тут и подвох
вы выгружаете каждую строку по отдельности, а в моем примере все выгружается скопом.
после вывода заголовков выгружайте весь РСТ в файл

Автор - boa
Дата добавления - 23.04.2019 в 14:10
nilem Дата: Вторник, 23.04.2019, 14:16 | Сообщение № 15
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Да, именно таким кодом и проверял. Казалось бы, что GetString д.б. быстрее/проще/эффективнее, но на самом деле получилось, что построчная запись в файл примерно в 5 раз быстрее, чем GetString.
Не знаю, как это объяснить. Может, от базы зависит?


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеДа, именно таким кодом и проверял. Казалось бы, что GetString д.б. быстрее/проще/эффективнее, но на самом деле получилось, что построчная запись в файл примерно в 5 раз быстрее, чем GetString.
Не знаю, как это объяснить. Может, от базы зависит?

Автор - nilem
Дата добавления - 23.04.2019 в 14:16
Bamboo Дата: Вторник, 23.04.2019, 14:21 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Если использовать запрос Power Query из ADO по примеру anvg, да, первая строка данных пропадает. Видимо, и запрос PQ не берет заголовки, и ADO тоже - так и пропадают 2 верхние строки (заголовок и 1-я строка данных). Но это только предположение.


ADO действительно первую строку понимает как заголовки столбцов и отделяет ее от данных, при этом она сохраняется в том же объекте recordset в качестве названия полей Fields и их оттуда можно вытащить.
 
Ответить
Сообщение
Если использовать запрос Power Query из ADO по примеру anvg, да, первая строка данных пропадает. Видимо, и запрос PQ не берет заголовки, и ADO тоже - так и пропадают 2 верхние строки (заголовок и 1-я строка данных). Но это только предположение.


ADO действительно первую строку понимает как заголовки столбцов и отделяет ее от данных, при этом она сохраняется в том же объекте recordset в качестве названия полей Fields и их оттуда можно вытащить.

Автор - Bamboo
Дата добавления - 23.04.2019 в 14:21
boa Дата: Вторник, 23.04.2019, 14:45 | Сообщение № 17
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
Не знаю, как это объяснить. Может, от базы зависит?

скорее, от размера оперативной памяти компа.
можно попробовать порциями выгружать, допустим по 100к строк


 
Ответить
Сообщение
Не знаю, как это объяснить. Может, от базы зависит?

скорее, от размера оперативной памяти компа.
можно попробовать порциями выгружать, допустим по 100к строк

Автор - boa
Дата добавления - 23.04.2019 в 14:45
boa Дата: Вторник, 23.04.2019, 14:48 | Сообщение № 18
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
а вот с "отделением" 1-й строки ни разу не сталкивался. может у вас что-то в строке подключения напутано?


 
Ответить
Сообщениеа вот с "отделением" 1-й строки ни разу не сталкивался. может у вас что-то в строке подключения напутано?

Автор - boa
Дата добавления - 23.04.2019 в 14:48
anvg Дата: Вторник, 23.04.2019, 16:57 | Сообщение № 19
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
ADO действительно первую строку понимает как заголовки столбцов и отделяет ее от данных,
А можно привести пример и, хотя бы минимально объяснить, как было получено такое поведение?
Сделал останов на If pRset.EOF Then pRset.MoveNext
В Immediate получаю следующее
Цитата


?pRset.Fields(0).Name

id

?pRset.Fields(1).Name

part

В Locals, как на картинке
К сообщению приложен файл: 1285043.png (19.4 Kb)
 
Ответить
Сообщение
ADO действительно первую строку понимает как заголовки столбцов и отделяет ее от данных,
А можно привести пример и, хотя бы минимально объяснить, как было получено такое поведение?
Сделал останов на If pRset.EOF Then pRset.MoveNext
В Immediate получаю следующее
Цитата


?pRset.Fields(0).Name

id

?pRset.Fields(1).Name

part

В Locals, как на картинке

Автор - anvg
Дата добавления - 23.04.2019 в 16:57
boa Дата: Вторник, 23.04.2019, 17:53 | Сообщение № 20
Группа: Друзья
Ранг: Ветеран
Сообщений: 550
Репутация: 167 ±
Замечаний: 0% ±

365
If pRset.EOF Then pRset.MoveNext
а вот тут ошибочка

Первую строку не теряли? Года два тому назад пробовал, так и не смог побороть этот глюк
.MoveNext переводит к следующей записи, поэтому у вас первая строка и пропадает

ADO не содержит заголовков в строках
заголовки - это RST.Fields.Name
а значения - это RST.Fields.Value


 
Ответить
Сообщение
If pRset.EOF Then pRset.MoveNext
а вот тут ошибочка

Первую строку не теряли? Года два тому назад пробовал, так и не смог побороть этот глюк
.MoveNext переводит к следующей записи, поэтому у вас первая строка и пропадает

ADO не содержит заголовков в строках
заголовки - это RST.Fields.Name
а значения - это RST.Fields.Value

Автор - boa
Дата добавления - 23.04.2019 в 17:53
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Возможно ли получить результат запроса PowerQuery в массив (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!