Что нового

Откртыть книгу Excel в фоне для доступа других книг

roman82101

Новичок
Сообщения
16
Репутация
0
Приветствую всех, не раз меня выручали здесь и вот появилась необходимость опять обратиться к опытным форумчанам.
Нужно открыть книгу через AutoIt так чтоб она была доступна для чтения из других документов Excel. Это как если открыть документ как обычно и свернуть, но желательно чтоб её не было видно и слышно.
Пример в файлах:
"main.xlsx" - просто список, должен находится на С:\ диске потому что этот путь прописан в "second.xlsx"
"second.xlsx" - может находится где угодно и в нём в первой ячейке выпадающий список, прописанный в Данные-Проверка данных, он работает только когда "main.xlsx" открыт
Как нужно открыть "main.xlsx" в AutoIt чтоб "second.xlsx" мог в любое время обратиться к "main.xlsx"
И процесс скрипта тоже должен был в диспетчере задач

Книга всё время в фоне находится не будет, а будет загружаться при появления процесса Excel
Код:
#NoTrayIcon
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) ;Показать иконку, для видимости работы скрипта
        $iPID = ProcessExists('EXCEL.EXE')
        _RunObj()
        ;Проверка окна на открытие файла $sFilePath, в нём таблица скрыта
        WinWait('Excel', '', 5)
        If WinGetState('[ACTIVE]', '') = '45' Then $oExcelDoc.Windows(1).Visible = 1 ;Отображение окна в $sFilePath
        ProcessWaitClose($iPID)
        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
Из минусов то что каждый раз при закрытии Excel будет запрос на сохранение файла $sFilePath, AutoIt не видит эти окна
И если быстро запускать и закрывать разные документы Excel, то скрипт не успевает отработать до конца, но это для моей ситуации не очень критично
 

Вложения

  • example.zip
    13.1 КБ · Просмотры: 1
Последнее редактирование:

damien2008

Осваивающий
Сообщения
190
Репутация
34
Код:
#include <Excel.au3>
$FilePth = 'C:\main.xlsx'

$oExcel = _Excel_Open(False)
$oWorkbook = _Excel_BookOpen($oExcel, $FilePth, False, False)
$oWorkSheets = _Excel_SheetList($oWorkbook)
If @error Then Exit
ProcessWaitClose('EXCEL.EXE')
 
Автор
roman82101

roman82101

Новичок
Сообщения
16
Репутация
0
Код:
#include <Excel.au3>
$FilePth = 'C:\main.xlsx'

$oExcel = _Excel_Open(False)
$oWorkbook = _Excel_BookOpen($oExcel, $FilePth, False, False)
$oWorkSheets = _Excel_SheetList($oWorkbook)
If @error Then Exit
ProcessWaitClose('EXCEL.EXE')
не сработало на MS Office 2021 и Windows 10 x64
 
Последнее редактирование:
Верх