Блог им. Tinych
Чтобы не свихнуться от захлестнувшего мир сумасшествия. Решил освоить модный нонче Пайтон.
До этого был небольшой опыт программирования на языке R. Столкнулся с одной проблемой. Пайтон прекрасно читает данные из таблиц Эксель. Например, копирую таблицу текущих параметров Квика. Сохраняю в Эксель, все читается, можно обрабатывать данные. Вывожу эту же таблицу по DDE в Эксель, данные выводятся. Если не сохранять эту таблицу, то Пайтон ничего не видит. Если же ее сохранить, то видит только последние сохраненные данные. Причина, скорее всего, не в Пайтоне, а Экселе. Собственно вопрос: как прочитать Пайтоном таблицу Эксель, с данными, получаемыми по DDE от Квика?
Ну а потом этот файл читать из питона.
Рекомендую в конце файла ставить какой нибудь индикатор конца файла, а то квик еще не записал файл до конца, а питон уже начал читать и закончил, хотя данные еще не записались.
Вот это вообще не понял:
скрин таблицы квика, которую пытаетесь влить в excel прикрепите. Если котировки, то для интрадей DDE при большой частоте тиков отвратителен.
Что вы вкладываете в понятие «копировать таблицу в excel» и «сохранить в excel»? У вас питон-скрипт к чему обращается к текущим данным в книге «на лету» или к сохраненному файлу excel на диске?
В Пайтоне достаточно просто решается обработка полученных данных, представление их в удобном для восприятия виде и тп.
Вот таблица получаема по DDE:
Данные в таблице меняются, по мере поступления. Но Пайтон именно изменения не видит, при периодическом чтении таблицы выводит одни и те же данные, у меня ячейку B2? таблицы.
В таблице Эксель данные меняются, Пайтон читает только сохраненные данные.
«копировать таблицу в excel» -копирование из Квик в Эксель через буфер обмена. «сохранить в excel» нажатие иконки сохранения.
Два варианта автосохранения файла Excel используя VBA.
Вариант 1:
Модуль ЭтаКнига:Private Sub Workbook_Open() Call save20 End Sub Модуль Модуле1:Sub save20() thisWorkbook.Save Application.OnTime Now + TimeValue(«00:00:20»), «save20» End Sub
Вариант 2:
Module1 :Public TimerFlag As BooleanPublic MyEarliestTime As Variant Sub Timer_Tick() If TimerFlag Then ThisWorkbook.Save MyEarliestTime = Now + TimeValue(«00:00:20») Application.OnTime EarliestTime:=MyEarliestTime, Procedure:=«Timer_Tick» End IfEnd Sub Модуль ЭтаКнига:Private Sub Workbook_Open() TimerFlag = True Call Timer_TickEnd Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) TimerFlag = False Application.OnTime EarliestTime:=MyEarliestTime, Procedure:=«Timer_Tick», Schedule:=False ThisWorkbook.SaveEnd Sub
Сам пробовал вариант 2, он немного глючит при закрытии Excel. Вариант 1, не пробовал.
www.planetaexcel.ru/forum/?FID=8&PAGE_NAME=read&TID=8004
После удалось соединить с питоном