roman82101
Новичок
- Сообщения
- 18
- Репутация
- 1
Приветствую всех, не раз меня выручали здесь и вот появилась необходимость опять обратиться к опытным форумчанам.
Нужно открыть книгу через AutoIt так чтоб она была доступна для чтения из других документов Excel. Это как если открыть документ как обычно и свернуть, но желательно чтоб её не было видно и слышно.
Пример в файлах:
"main.xlsx" - просто список, должен находится на С:\ диске потому что этот путь прописан в "second.xlsx"
"second.xlsx" - может находится где угодно и в нём в первой ячейке выпадающий список, прописанный в Данные-Проверка данных, он работает только когда "main.xlsx" открыт
Как нужно открыть "main.xlsx" в AutoIt чтоб "second.xlsx" мог в любое время обратиться к "main.xlsx"
И процесс скрипта тоже должен был в диспетчере задач
Из минусов то что если быстро запускать и закрывать разные документы Excel, то скрипт не успевает отработать до конца
Нужно открыть книгу через AutoIt так чтоб она была доступна для чтения из других документов Excel. Это как если открыть документ как обычно и свернуть, но желательно чтоб её не было видно и слышно.
Пример в файлах:
"main.xlsx" - просто список, должен находится на С:\ диске потому что этот путь прописан в "second.xlsx"
"second.xlsx" - может находится где угодно и в нём в первой ячейке выпадающий список, прописанный в Данные-Проверка данных, он работает только когда "main.xlsx" открыт
Как нужно открыть "main.xlsx" в AutoIt чтоб "second.xlsx" мог в любое время обратиться к "main.xlsx"
И процесс скрипта тоже должен был в диспетчере задач
Книга всё время в фоне находится не будет, а будет загружаться при появления процесса Excel
UIAutomate.au3 из темы https://autoit-script.ru/threads/uiautomate-avtomatizacija-nestandartnyx-ehlementov-gui.16780/
Скопировать UIAutomate.au3 в C:\Program Files (x86)\AutoIt3\Include
UIAutomate.au3 из темы https://autoit-script.ru/threads/uiautomate-avtomatizacija-nestandartnyx-ehlementov-gui.16780/
Скопировать UIAutomate.au3 в C:\Program Files (x86)\AutoIt3\Include
Код:
#NoTrayIcon
#include <UIAutomate.au3>
Opt('TrayMenuMode', 1) ;Иконка в трее без стандартного меню
$sFilePath = 'C:\main.xlsx'
If Not FileExists($sFilePath) Then Exit MsgBox(0, 'Ошибка', 'Не найден файл "'&$sFilePath&'"', 10)
If ProcessList(@ScriptName)[0][0]>1 Then
If MsgBox(4 + 32, 'Внимание', 'Программа уже запущена'&@CRLF&'Завершить?') = 6 Then
ProcessClose(@ScriptName)
Exit
Else
Exit
EndIf
EndIf
Global $iErr = 0, $oExcelDoc
;Открытие и закрытие Obj для работы в первом открытом файле Excel после включения компьютера
ToolTip('Не открывайте документы в Excel', @DesktopWidth / 2, @DesktopHeight / 2, 'Подождите', 2, 2)
_RunObj()
$oExcelDoc.Close
ProcessWaitClose('EXCEL.EXE')
ToolTip('')
While True
ProcessWait('EXCEL.EXE')
If Not WinExists('PauseMain') Then ;Пауза чтоб не мешал другим скриптам, там прописать AutoItWinSetTitle('PauseMain')
Opt('TrayIconHide', 0) ;Показать иконку, для видимости работы скрипта
TraySetToolTip('Выполняется main')
$iPID = ProcessExists('EXCEL.EXE')
_RunObj()
;Проверка окна на открытие файла $sFilePath, в нём таблица скрыта
$hWnd = WinWait('Excel', '', 5)
If WinGetState($hWnd) = 39 Then
$oExcelDoc.Windows(1).Visible = 1 ;Отображение окна в $sFilePath
ProcessWaitClose($iPID)
Else
While True
If ProcessExists($iPID) Then
If WinExists('Microsoft Excel', '') = 1 Then
$hWnd = WinWait('Microsoft Excel', '', 5)
$oParent = _UIA_GetElementFromHandle($hWnd)
$oText = _UIA_GetControlTypeElement($oParent, "UIA_TextControlTypeId", "Вы хотите сохранить изменения в файле main.xlsx?")
If IsObj($oText) Then
$oButton = _UIA_GetControlTypeElement($oParent, "UIA_ButtonControlTypeId", "Не сохранять")
_UIA_ElementDoDefaultAction($oButton)
EndIf
Else
Sleep(300)
EndIf
Else
ExitLoop
EndIf
WEnd
EndIf
ToolTip('Не открывайте документы в Excel', @DesktopWidth / 2, @DesktopHeight / 2, 'Подождите', 2, 2)
;Закрытие оставшегося процесса Excel
$oExcelDoc = ObjGet($sFilePath)
$oExcelDoc.Close
ProcessWaitClose('EXCEL.EXE')
Opt('TrayIconHide', 1) ;Снова скрыть иконку
ToolTip('') ;Убрать всплывающее сообщение
Else
Sleep(1000) ;Ждать закрытия скрипта с AutoItWinSetTitle('PauseMain')
EndIf
WEnd
Func _RunObj()
If $iErr < 10 Then
$oExcelDoc = ObjGet($sFilePath)
If @error Then
$iErr = $iErr + 1
Sleep(500)
$oExcelDoc = ObjGet($sFilePath)
If @error Then
$iErr = $iErr + 1
Sleep(500)
_RunObj()
Else
$iErr = 0
EndIf
EndIf
Else
MsgBox(0, 'Ошибка', 'Не удалось открыть "'&$sFilePath&'"')
Exit
EndIf
EndFunc ; ==> _RunObj()
Вложения
Последнее редактирование: