roman82101
Новичок
- Сообщения
- 15
- Репутация
- 0
Приветствую всех, не раз меня выручали здесь и вот появилась необходимость опять обратиться к опытным форумчанам.
Нужно открыть книгу через AutoIt так чтоб она была доступна для чтения из других документов Excel. Это как если открыть документ как обычно и свернуть, но желательно чтоб её не было видно и слышно.
Пример в файлах:
"main.xlsx" - просто список, должен находится на С:\ диске потому что этот путь прописан в "second.xlsx"
"second.xlsx" - может находится где угодно и в нём в первой ячейке выпадающий список, прописанный в Данные-Проверка данных, он работает только когда "main.xlsx" открыт
Как нужно открыть "main.xlsx" в AutoIt чтоб "second.xlsx" мог в любое время обратиться к "main.xlsx"
И процесс скрипта тоже должен был в диспетчере задач
Из минусов то что каждый раз при закрытии Excel будет запрос на сохранение файла $sFilePath, AutoIt не видит эти окна
И если быстро запускать и закрывать разные документы Excel, то скрипт не успевает отработать до конца, но это для моей ситуации не очень критично
Нужно открыть книгу через AutoIt так чтоб она была доступна для чтения из других документов Excel. Это как если открыть документ как обычно и свернуть, но желательно чтоб её не было видно и слышно.
Пример в файлах:
"main.xlsx" - просто список, должен находится на С:\ диске потому что этот путь прописан в "second.xlsx"
"second.xlsx" - может находится где угодно и в нём в первой ячейке выпадающий список, прописанный в Данные-Проверка данных, он работает только когда "main.xlsx" открыт
Как нужно открыть "main.xlsx" в AutoIt чтоб "second.xlsx" мог в любое время обратиться к "main.xlsx"
И процесс скрипта тоже должен был в диспетчере задач
Книга всё время в фоне находится не будет, а будет загружаться при появления процесса Excel
Код:
If ProcessList(@ScriptName)[0][0]>1 Then Exit MsgBox(0, 'Внимание', 'Программа уже запущена', 5)
$sFilePath = 'C:\main.xlsx'
If Not FileExists($sFilePath) Then Exit MsgBox(0, 'Ошибка', 'Не найден файл "'&$sFilePath&'"', 10)
While True
ProcessWait('EXCEL.EXE')
$iPID = ProcessExists('EXCEL.EXE')
$oExcelDoc = ObjGet($sFilePath)
If @error Then Exit MsgBox(0, 'Ошибка', 'Не удалось открыть "'&$sFilePath&'"', 10)
;Проверка окна на открытие файла $sFilePath, в нём таблица скрыта
WinWait('Excel', '', 5)
$iState = WinGetState('[ACTIVE]', '')
If $iState = '45' Then $oExcelDoc.Windows(1).Visible = 1 ;Отображение окна в $sFilePath
ProcessWaitClose($iPID)
;Закрытие оставшегося процесса Excel
$oExcelDoc = ObjGet($sFilePath)
$oExcelDoc.Close
ProcessWaitClose('EXCEL.EXE')
WEnd
И если быстро запускать и закрывать разные документы Excel, то скрипт не успевает отработать до конца, но это для моей ситуации не очень критично
Вложения
Последнее редактирование: