Excel Object SaveAs, ошибка возникает, когда существующий файл открыт

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

ошибка произошла после/во время сохранения. попробуйте поймать бросок "ошибка при вызове внешнего объекта..в клике..строке..сохранить как.."

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


person Sid    schedule 06.03.2012    source источник


Ответы (5)


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

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

person Colin Pickard    schedule 06.03.2012
comment
я мог бы сделать это с помощью try catch в Powerbuilder. настоящая проблема связана с ошибкой выполнения PB, когда известно, что файл открыт. не раньше, чем. Я также вставил его внутрь try, но ошибка все равно выскочила. я не думаю, что мои пользователи проигнорируют это, лол - person Sid; 07.03.2012
comment
мне все еще нужна помощь в этом. Я не понял этого. мои пользователи хотят идеальную систему извлечения Excel. Спасибо за ответы...! - person Sid; 08.03.2012

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

Удачи,

Терри

person Terry    schedule 04.04.2012

Пробовали ли вы подобные подходы?

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

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

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

person rskar    schedule 05.04.2012

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

person Hugh Brackett    schedule 09.04.2014

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

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

    if Excel_Obj.ConnectToNewObject('excel.application') ‹> 0 then messagebox("предупреждение", "может подключиться к excel", стоп-сигнал!) RETURN
    end if

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

Удачного кодирования от разработчика pb.

person Masa sih    schedule 10.06.2015