Удобное внедрение языка программирования "Python" в файл Excel на основе портативной сборки Python, Настроенный файл Excel для удобного вызова скриптов Python из Excel
Sub refresh()
t = Timer
Const f = "C:\temp\ex"
Set WshShell = CreateObject("WScript.Shell")
Set TextStream = WshShell.Exec("%comspec% /c chcp 1251 | dir " & f & "\*.xls* /s /b").StdOut
s = vbNullString
While Not TextStream.AtEndOfStream
If s <> vbNullString Then
s = s & vbCrLf & "UNION ALL "
End If
s = s & "Select * FROM `" & Trim(TextStream.ReadLine()) & "`.`Sheet1$`"
Wend
ThisWorkbook.Connections(1).ODBCConnection.CommandText = s
Sheet1.PivotTables(1).RefreshTable
MsgBox Timer - t
End Sub
2,11 c на предложенных данных, правда пока все исходные просто не открыл запрос был с ошибкой. Конечно начнутся разговоры, что это не чистый VBA .... Но я и не спорю, для Меня VBA это дополнительное , а не основное средство.
Есть еще один толи минус толи плюс. Файл содержит все данные в кеше, файло
считаю, что, если питон только за счёт библиотек и работает, то и в вба все подключения разрешены (в моём варианте словари подключены, но можно сортировкой без них) Поздравляю с феноменальной скоростью (можно через ранее связывание попробовать) и краткостью! Вариант перебора вложенных подпапок забрал
Огорчён: • фирменное подмигивание/моргание Shell • фиксированное имя листа • функции для работы с кириллицей в путях (не всегда проявляется)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
БМВ, а вы можете работающий файл-пример выложить? У меня при вставке вашего кода в новую книгу не работает: ThisWorkbook.Connections(1).ODBCConnection.CommandText = s
Цитата
Jack Famous написал: считаю, что, если питон только за счёт библиотек и работает, то и в вба все подключения разрешены (в моём варианте словари подключены, но можно сортировкой без них)
А это не приведет к деградации темы? Интересны решения, базирующиеся на штатных средствах Excel, которые идут "из коробки" при его установке (ну то есть с применением того, что было бы установлено при установке Excel на чистый виндовс). В противном случае сталкиваемся с тем, что то, что запускаете вы, можно запускать и из под кода Python и что же тогда сравнивать будем?
Сергей Юрьевич: интересны решения, базирующиеся на штатных средствах Excel, которые идут "из коробки"
вы сначала тогда разберитесь или вопросы формулируйте по-другому. НЕштатных библиотек, в отличие от вашего решения, использовано не было
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous, думаю, я не правильно выразился, но меня несколько смущают необходимость с VBA переходить на SQL в этих тестах. Так как мой код тоже можно изменить чтобы он фрагментарно исполнялся на SQL. Понимаете? Надо все делать на SQL либо ничего, иначе это не спортивно. В чем же я не прав?
Сергей Юрьевич: меня несколько смущают необходимость с VBA переходить на SQL
ну а меня нет, родной язык, родные библиотеки, у всех есть - какие проблемы? Для меня тесты - про скорость и удобство. У вас заморочки, что бы подготовить файл, но потом просто вызывать, мало кода и неплохая скорость Если я подключу библу bedvit'a (что, надо заметить, гораздо проще вашего развёртывания питона), то вы в скорости проиграете - хотя и это можно считать корректным, т.к. такое же внедрение (можно не подключать надстройку, а также менеджером внедрить в файл) Я так делать уже не стал, но почему не использовать, то что Microsoft дал в роли штатных инструментов/библиотек …
С каждым сообщением вы всё больше показываете переживание, что змея плохо выглядит на публике в среде Excel
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Сергей Юрьевич написал: Так как мой код тоже можно изменить чтобы он фрагментарно исполнялся на SQL. Понимаете? Надо все делать на SQL либо ничего, иначе это не спортивно. В чем же я не прав?
не следует смешивать понятия SQL синтаксиса и выполнения на SQL и тем более исполнение на SQL server.
Цитата
Сергей Юрьевич написал: а вы можете работающий файл-пример выложить?
On Error GoTo err1
Set objFolder = objShellApp.NameSpace(Folder.Path)
On Error GoTo err2
Set objFolderItems = objFolder.items()
objFolderItems.Filter 64 + 128, "*.pptx;*.ppt;*.pptm;*.ppsx;*.pps;*.ppsm;*.potx;*.pot;*.potm"
'On Error Resume Next
For Each File In objFolderItems
БМВ, спасибо, осталось ещё 2 В принципе скорость получения путей меня устраивает и рекурсией, но для развития решить было бы неплохо Моргание, как я понял, не убрать
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
БМВ, отдельная функция для получения списка считается библой и в учёт не входит По сути, у меня так и есть - надстройка с кучей готовых функций и процедур, для того чтобы вот такой ГЛАВНЫЙ код был коротким, но при этом быстрым и понятным
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
БМВ, это же не так Нужные для работы модули переносятся в файл, подключаются библиотеки и всё - файл автономен. Изи
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
БМВ, перетащить мышкой модули (~5 сек), поставить флажки в ссылках на библы (~ 5 сек, если надо) По-моему, потратить до 10ти секунд для использования намного проще, чем использовать Shell (моргание, косяки и пропуск ошибок так, что даже не понять, всё ли нормально прошло) я найду это сумасшедшее время
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
обычно гораздо больше, чем нужно, но зачем тратить время на чистку, если на скорости это никак не отразится
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Добрый день! Метод Filter, указанный Михаилом в #99, работает синхронно (если не указывать специального флага) в отличие от многих других методов, относящихся к объектам от Shell.Application. Для больших папок (в тысячи файлов), особенно сетевых, он гораздо быстрее (даже при получении списка всех файлов), чем соответствующий метод от FSO (Folder.Files).
sokol92: Filter работает синхронно в отличие от других методов Shell. Для больших папок (в тысячи файлов), особенно сетевых, он гораздо быстрее, чем FSO
приветствую, Владимир и спасибо за интересную инфу! Завтра создам отдельную тему и протестирую, а то и так намусорили тут …
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
БМВ, спасибо за пример (лучше новым сообщением, а то я пропустил обновление, пока не начал искать) Сделал тему
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
БМВ, спасибо) Сделаю ещё тему: Сбор данных из файлов и там обсудим. Интересуют ограничения
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Доброй ночи! Очень долго искала способ "подружить" python с Excel. Задача тут python - импортировать xps в excel. Код работает, теперь хочу запускать его из-под Excel. Пробую делать так, как здесь посоветовали. Возникает ошибка. Итак, я скачала Portable Python, запускаю Console-Launcher (и под именем админа тоже пробовала), набираю команду pip install xlwings - а он пишет, что pip не явлется внутренней или внешней командой, исполняемой программой или пакетным файлов. Что я не так сделала? Буду благодарна за помощь!
Лина Сафиуллина, честно говоря не знаю с какой проблемой вы столкнулись, я сейчас попробовал и у меня команда выполнилась. Все что мне приходится сделать для установки: открываю Console-Launcher.exe и через комбинацию Ctrl+V вставляю скопированный текст pip install xlwings Нажимаю клавишу Enter и все само устанавливается
Ищу уже полгода возможность, которую Вы здесь так детально описали. Фанатею от визуализации Excel, но надо решать задачи классификации, строить нейросети и т.п. В VBA я не вижу готовых решений и богатого матаппарата для этого. Поэтому начинаю учить python, и вот хочу иметь удобный для меня графический и табличный визуализатор. Пока хотя бы без Big Data.
Сегодня начну следовать Вашей инструкции. Скорее всего, будут ошибки, поэтому буду задавать глупые вопросы, за что сразу прошу прощения.
P.S. Учитывая что у проекта xlwings в клиентах, например, компания Royal Dutch Shell, видно что есть перспективы у этого проекта.
Основной интерес в подобных инструментах вызывает возможность выполнять код, который хранится в ячейках листа. Таким образом можно в зависимости от выбранных пользователем настроек запускать не только скрипты, формировать графики, но и динамически менять контент веб-отчета. Как я понял для данной надстройки - это только в платной версии. для языка программирования R есть пакет excel.link который бесплатно имеет подобный функционал - с помощью пакета reticulate из R можно запускать пайтон скрипты, а результаты и графики сразу встают в excel. можно гибко формировать код веб-приложений в shiny, или менятm настройки ml моделей (keras в том числе),
Но это все интересно только в случае если Вам прямо сейчас из экселя интересно что-то посмотреть. Для отчетности, автоматизации - лучше использовать etl инструменты в совокупности с python/R скриптами. Например, любые excel можно легко загнать в KNIME (аналитическая платформа для работы с данными) - сделать необходимые преобразования, трансформации и передать далее в Python/R/Jupiter notebook, получить результат и сразу залить в любую бд, или выгрузить в excel - все бесплатно и open source.
в Python сейчас набирает популярность библиотека mito - с ее помощью можно в интерактивном режиме работать с таблицей, при этом генерируется pandas код, который потом можно выполнить в питоне или в KNIME. Получается как запись макроса в экселе, но для питона. В такой связке VBA вообще не нужен. (Я раньше очень много писал на VBA но теперь им совсем не пользуюсь - переделываю чужие макросы на нормальные etl)
etl процесс проще документировать, проще разрабатывать и проще поддерживать. P.S: Если нужно машинное обучение - в KNIME есть много инструментов для работы с текстом, изображениями,есть интеграция с Keras и H2O(automl в том числе), excel можно использовать для хранения настроечных таблиц.