Что нового

EXEL не открывается файл (вроде)

Shinoby

Новичок
Сообщения
81
Репутация
2
не пойму в чем проблема. скрипт вроде открывает файл - хендл вроде получается, в процессах exel - появляется, но окно не отображается и затем начинается ругань на страницу.
Код:
$sFilePath = @ScriptDir & "\base.xls"
Local $oExcel = _ExcelBookAttach($sFilePath) ;;проверяем не открыта ли таблица
If $oExcel = 0 Then 
   $oExcel = _ExcelBookOpen($sFilePath, 1) ;;если не открыта, то открываем
EndIf
MsgBox(0, "результат открытия", @error)

Sleep(1500)
Opt("WinTitleMatchMode", 2)
WinWait("Excel")
_ExcelSheetActivate($oExcel, "b")
$aArray = _ExcelReadSheetToArray($oExcel, 2, 1, 0, 5)


если сам открываю файл - все ОК. пытался открыть любой другой файл - таже петрушка.
нужна помощь, не пойму где собака порылась...

ошибка выпадает такая:
C:\Program Files\AutoIt3\Include\Excel.au3 (787) : ==> Variable must be of type "Object".:
Local $sLastCell = $oExcel.Application.Selection.SpecialCells($xlCellTypeLastCell).Address(True, True, $xlR1C1)
Local $sLastCell = $oExcel.Application.Selection^ ERROR


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

омг :stars:

на зарубежном сайте нашел такую конструкцию:
Код:
$oExcel = ObjCreate("Excel.Application")
$oExcel.Visible = 0
$oExcel.WorkBooks.Open($sFilePath)

$oExcel.Sheets("base" ).Select()


с ней все работает. окна excel не появляется - ну оно и к лучшему.

но объясните плиз, в чем прикол?
и оффтоп: где можно посмотреть как формировать конструкции типа
Код:
$oExcel.WorkBooks.Open
в хелпе только стандартные функции.... :(
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Shinoby [?]
с ней все работает. окна excel не появляется - ну оно и к лучшему.но объясните плиз, в чем прикол?
Код:
$oExcel.Visible = 0 ;0 - Скрыто, 1 - Не скрыто


и оффтоп: где можно посмотреть как формировать конструкции типа
Если не ошибаюсь, то встроенная справка имеет некоторую информацию, Также множество примеров на msdn.
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
Shinoby
Имеется в виду встроенная справка Excel VBA. Макросы т.е.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Похоже все дело в _ExcelBookAttach - она сама создает объект, хотя должна лишь его находить. При том объект получается неработоспособным.
Мой совет - избавьтесь от этой функции в своем скрипте:
Код:
#include <Array.au3>
#include <Excel.au3>

$sFilePath = @ScriptDir & "\1.xls"
$oExcel = _ExcelBookOpen($sFilePath, 1)
_ExcelSheetActivate($oExcel, "b")
$aArray = _ExcelReadSheetToArray($oExcel, 1, 1, 0, 2)
_ArrayDisplay($aArray)


Почти все ключевые методы для Excel можно посмотреть внутри Excel.au3, который идет в комплекте с AutoIt. Но для начала изучите функции _Excel..
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Redline [?]
Похоже все дело в _ExcelBookAttach - она сама создает объект, хотя должна лишь его находить.
Вы не правы, _ExcelBookAttach() получает объект через ObjGet(), посмотрите в Excel.au3.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
madmasles [?]
Redline [?]Цитата
Похоже все дело в _ExcelBookAttach - она сама создает объект, хотя должна лишь его находить.
Вы не правы, _ExcelBookAttach() получает объект через ObjGet(), посмотрите в Excel.au3.

То-то и оно что у меня он создал объект Excel. Вот можете сами проверить - открыть диспетчер задач -> процессы, а после запуска:
Код:
#include <Excel.au3>

$sFilePath = @ScriptDir & '\1.xls' ;файл 1.xls должен присутствовать!
$oExcel = _ExcelBookAttach($sFilePath)

Sleep(15000)

и пока висит sleep - появляется EXCEL.EXE
Или я чего-то непонимаю.

Кстати так тоже работает:
Код:
$sFilePath = @ScriptDir & '\1.xls';файл 1.xls должен присутствовать!
$o_Result = ObjGet($sFilePath)
If Not @error And IsObj($o_Result) Then
    ConsoleWrite('Объект найден!' & @CRLF)
	$o_Result.Windows(1).Visible = 1
	$o_Result.Application.Visible = 1
    ;Return $o_Result
EndIf
Sleep(15000)



//Win 7 Excel 2007
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Redline,
Начал проверять (у меня Excel 2003), действительно какая-то ерунда получается с _ExcelBookAttach(), а с _ExcelBookOpen() проблем нет. Для себя сделал вывод: никогда не использовать _ExcelBookAttach(), Вы были правы.
 
Автор
S

Shinoby

Новичок
Сообщения
81
Репутация
2
Проблема с закрытием excel действительно была, и на определенном этапе заново открыть файл становилось не возможно. Закрытие - не помогало. Спасался тем, что убивал процесс.
 

dreo

Новичок
Сообщения
2
Репутация
0
excel успешно закрывается и пропадает из процессов, если прописать FileClose($sFilePath)
 
Верх