Что нового

Не работает _Excel_BookOpen(...)

xlgrgrc

Знающий
Сообщения
91
Репутация
7
Нашел две темы на форуме.
http://autoit-script.ru/index.php?topic=17224.0
http://autoit-script.ru/index.php/topic,16942.0.html

Код:
#include <Excel.au3>

$oEx = 0
$sFilePathExcelPP1 = @ScriptDir & "\PP1.xlsx"
_Excel_BookOpen($oEx, $sFilePathExcelPP1)


Раньше все работало. Файл лежит рядом с скриптом.
Версия AutoIt'а v3.3.14.2 с офф сайта.

Я так понял что в новой версии немного поменялись функции работы с экселем.

Пожалуйста подскажите что не так. Думаю многие уже столкнулись и решили проблему. Очень нужно открыть эксель.
или если у кого то остался старый AutoIt то свяжитесь со мной я напишу с скачаю старую версию где все работало. У меня к сожалению не осталось.

или скиньте пример рабочего кода по новой версии. Разберусь.

Спасибо!!!
 
Автор
X

xlgrgrc

Знающий
Сообщения
91
Репутация
7
Благодарю )))
Сейчас найдем двух годовалую версию и зажем опять)))
 
Автор
X

xlgrgrc

Знающий
Сообщения
91
Репутация
7
Тоесть выглядеть должно было так ?

Код:
#include <Excel.au3>

$oEx = _Excel_Open()
$sFilePathExcelPP1 = @ScriptDir & "\PP1.xlsx"
_Excel_BookOpen($oEx, $sFilePathExcelPP1)


Сейчас уже установил старый автоит, но как работу сделаю (через пару дней) обязательно попробую )))
 

Stalevar

Новичок
Сообщения
31
Репутация
0
Здравствуйте. Понять не могу почему книга открывается только для чтения.
Код:
Local $oExcel = _Excel_Open()
Local $oWorkbook = _Excel_BookOpen($oExcel,@WorkingDir &"\Книга1.xlsb",1,False,"12345")
 

Stalevar

Новичок
Сообщения
31
Репутация
0
Вроде все правильно :(
True="только для чтения", False="без ограничений"
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Stalevar
Вроде все правильно
Хорошо. Давайте считать параметры:
первый - $oExcel (Excel application object where you want to open the workbook)
второй - @WorkingDir &"\Книга1.xlsb" (Path and filename of the file to be opened)
третий - 1 ([optional] True opens the workbook as read-only (default = False))

Единица - это истина.
 

Stalevar

Новичок
Сообщения
31
Репутация
0
Спасибо, получилось.
Теперь другая проблема. Пока скрипт не скомпилирован, се нормально работает, а после компиляции ошибку выдает: error variable must be of type object


Добавлено:
Сообщение автоматически объединено:

line 2623


Добавлено:
Сообщение автоматически объединено:

Посмотрите пожалуйста во вложении
 

Вложения

  • 11.rar
    13.8 КБ · Просмотры: 7

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Stalevar
Теперь другая проблема
Это проблема версии AutoIt 3.3.14.2.
Варианты:
- откатиться на версию 3.3.12.0 (https://www.autoitscript.com/autoit3/files/archive/autoit/)
- использовать "исправленную" функцию (https://www.autoitscript.com/forum/topic/177513-_excel_bookopen-issue/?do=findComment&comment=1292595).
 

Stalevar

Новичок
Сообщения
31
Репутация
0
InnI
А можете пояснить как исправить в новой версии.
"- использовать "исправленную" функцию (https://www.autoitscript.com/forum/topic/177513-_excel_bookopen-issue/?do=findComment&comment=1292595)."
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Stalevar
Копируете её себе в скрипт и вызываете вместо _Excel_BookOpen().
 

Stalevar

Новичок
Сообщения
31
Репутация
0
Теперь при запуске скрипта ошибка
error: _Excel_BookOpenEX() called by a previous line with 0 arg(s). Min = 2. First previous line calling this Func is 68.

Скопировал вот это в свой скрипт и заменил функцию _Excel_BookOpen() на _Excel_BookOpenEX
Код:
Func _Excel_BookOpenEX($oExcel, $sFilePath, $bReadOnly = Default, $bVisible = Default, $sPassword = Default, $sWritePassword = Default, $bUpdateLinks = Default)
    ; Error handler, automatic cleanup at end of function
    Local $oError = ObjEvent("AutoIt.Error", "__Excel_COMErrFunc")
    #forceref $oError
    If Not IsObj($oExcel) Or ObjName($oExcel, 1) <> "_Application" Then Return SetError(1, @error, 0)
    If Not FileExists($sFilePath) Then Return SetError(2, 0, 0)
    If $bReadOnly = Default Then $bReadOnly = False
    If $bVisible = Default Then $bVisible = True
    Local $oWorkbook = $oExcel.Workbooks.Open($sFilePath, $bUpdateLinks, $bReadOnly, Default, $sPassword, $sWritePassword)
    If @error Then Return SetError(3, @error, 0)
    Local $oWindow = $oExcel.Windows($oWorkbook.Name) ; <== Modified
    If IsObj($oWindow) Then $oWindow.Visible = $bVisible ; <== Modified
    ; If a read-write workbook was opened read-only then set @extended = 1
    If $bReadOnly = False And $oWorkbook.Readonly = True Then Return SetError(0, 1, $oWorkbook)
    Return $oWorkbook
EndFunc   ;==>_Excel_BookOpen
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Ошибка говорит о том, что вы вызываете функцию без аргументов, в то время, как ей требуется минимум два.
 

Stalevar

Новичок
Сообщения
31
Репутация
0
InnI
Большое спасибо.
не туда скопировал функцию, нужно было прям в Excel.au3, а я в свой скрипт.
СПАСИБО
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Stalevar
нужно было прям в Excel.au3, а я в свой скрипт
Нужно как раз в скрипт - в самый конец. А если вы решили править оригинальные UDF, то лучше уж вносить изменения непосредственно в "штатные" функции, а не добавлять новые. Там всего-то одна строчка изменена и одна добавлена (помечены как "<== Modified").
 
Верх