Excel Object SaveAs, ошибка возникает при открытии существующего файла - PullRequest
0 голосов
/ 06 марта 2012
Excel_Obj = CREATE OleObject

Excel_Obj.ConnectToNewObject( 'excel.application' )
Excel_Obj.Workbooks.Add
Excel_Obj.Application.ActiveWorkbook.WorkSheets.Add

Excel_Sheet = Excel_Obj.Application.ActiveWorkbook.WorkSheets[1]

//EXAMPLE

Excel_Sheet.Cells[1,1] =  45

Excel_Obj.Application.ActiveWorkbook.SaveAs(ls_file,56)  //csv

//where ls_file = the Opened File

ошибка произошла после / во время сохранения.try catch throw "ошибка при вызове внешнего объекта .. in click..line .. saveas .."

- я хочу сообщить пользователю, что файл excel открыт, поэтому не может быть перезаписан должным образом.Я использовал попытку catch и выдал правильное сообщение, но перед тем, как появится окно сообщения для события catch, возникает ошибка выполнения PB R0035.любые решения или правильный способ узнать, открыт ли файл Excel.

Ответы [ 5 ]

0 голосов
/ 10 июня 2015

Вы не можете использовать ole, когда документ открыт (даже если вы установили блокировку записи) пользователем, а не по заявке.мой подход, я использовал много раз до сих пор:

  1. Проверьте, открыт ли Excel или нет, используйте использовать можно использовать сценарий api или wsh вИнтернет, чтобы проверить приложение открылось.Если открыто, не запускайте сохранение как и говорите пользователю закрыть Excel и не запускайте его некоторое время.
  2. если вы запускаете Excel и ваша программа все еще работает с активной книгой и приложение для рабочего листа будет переключено в открывшееся приложение Excelпользователем (представьте, что это неправильные записанные данные).
  3. Измените ваш код, как показано ниже

    , если Excel_Obj.ConnectToNewObject ('excel.application') <> 0, затем messagebox ("warning", "может подключиться к Excel", Стопсигн!) ВОЗВРАЩАЕТСЯ
    конец, если

  4. просто для знания другой метод - вызов DDE, но сегодня он не распространен и наиболее сложен.

Удачное кодирование От разработчика pb.

0 голосов
/ 09 апреля 2014

Вам нужно будет отключить опцию, чтобы перейти в отладчик для этого исключения, чтобы увидеть работу по обработке исключений в IDE. Подробности см. В разделе справки «Диалоговое окно« Настройки исключений »». Как только вы увидите, что он работает, я рекомендую вам установить его обратно, чтобы он работал в отладчике, поскольку вы обычно хотели бы увидеть, что вызвало ошибку.

0 голосов
/ 04 апреля 2012

Я бы попробовал вызов PowerScript FileOpen () с LockReadWrite!параметр, чтобы увидеть, можно ли его открыть, после чего сразу следует FileClose (), если он был успешным.(Я думаю, что это специфический для PowerScript вариант решения DXL, с которым связан Колин.)

Удачи,

Терри

0 голосов
/ 06 апреля 2012

Вы пробовали подходы, подобные этим?

Использование Win32 API: http://www.rgagnon.com/pbdetails/pb-0030.html

Использование функции PB fileopen () с установленными (по умолчанию) эксклюзивными правами: http://www.tek -tips.com / viewthread.cfm? QID = 1610670

Другими словами, посмотрите, можно ли открыть файл исключительно перед подключением к Excel или созданием CSV?

0 голосов
/ 06 марта 2012

Вы можете проверить, открыт ли файл первым, посмотрите на этот ответ:

как проверить, открывается ли файл в Excel с помощью OLE (оставляет процесс Excel открытым)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...