Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] обработка файлов при помощи модуля Excel.au3 (http://forum.oszone.net/showthread.php?t=129576)

SvetlanaK 23-01-2009 10:23 1016624

обработка файлов при помощи модуля Excel.au3
 
задача такая. автоит запускает некую внешнюю программу, которая последдовательно выгружает 9 экселевских файлов, каждый из которых нужно сохранить в определенное место с определенным именем. первоначально это сохранение делалось при помощи Send.
WinActivate("Microsoft Excel")
Send("{Alt}{ф}{с}")
Send($path & "имяфайла.xls")
Send("{Enter}")
WinClose("Microsoft")
теперь кажется более логичным (и быстрым!) сделать следующее

$oExcel2 = ObjGet("", "Excel.Application") ;
_ExcelBookSaveAs($oExcel, $path_d & "имяфайла", "xls")
_ExcelBookClose($oExcel,1, 0)

Но происходит следующее. Первый выгружаемый файл сохраняется и закрывается без проблем. Остальные - не сохраняются и не закрываются!
Автоит якобы сохраняет что-то - если посмотреть переменную $s=_ExcelBookSaveAs($oExcel, $path_d & "имяфайла", "xls"), и эта перемення 1! а не ноль. Хэндлы окон эксель тоже определяет безошибочно! в первый эксель-файл он даже может записать что угодно и прочесть любую ячейку с него, а вот начиная со второго - мертвый номер, что я только не делала - не "видит"он последующих выгружаемых файлов и все. и ничего не помогает. Подскажите, где копать? буду благодарна за любую подсказку.

Creat0R 23-01-2009 14:29 1016890

Во-первых, коды нужно обрамлять соот-ющими тегами ([code]).

По поводу задачи. Не ясно как выгружаются остальные файлы, выложите работающий пример, где происходит сохранение и выгрузка.

SvetlanaK 09-02-2009 11:41 1033424

Добрый день!
после долгих раздумий и проб задача была решена. Выкладываю, может быть кому-то пригодится.
Команда $oExcel = ObjGet("", "Excel.Application") оказыватся с "длительным" действием, и что бы потом не открывалось в экселе - первая открытая книга всегда будет подразумеваться в последующих действиях.
Верятно, что-то "застревает" в пямяти. Решение - после обработки первого эксель-файла поставить строку - $oExcel="". И все работает Все остальные книги обрабатываются должным образом. Так что это? обнуление переменных? (получатеся очистка объектов). Наверное это логично - очищать память от использованного.

WinWaitActive("Microsoft Excel - Книга1","", 0);жду окна
WinActivate("Microsoft Excel - Книга1","")
If WinExists("Microsoft Excel - Книга1") Then
WinActivate("Microsoft Excel - Книга1","")
$oExcel = ObjGet("", "Excel.Application")
_ExcelBookSaveAs($oExcel, "C:\папка\наим1", "xls",0,1)
_ExcelBookClose($oExcel,1, 0)
EndIf
$oExcel="" ; вот она, эта волшебная строка:)


Время: 22:39.

Время: 22:39.
© OSzone.net 2001-