Excel对象SaveAs,当现有文件打开时发生错误

时间:2012-03-06 07:39:02

标签: excel ms-office ole powerbuilder

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
在saveas之后/期间发生

错误。 尝试抓住抛出“错误调用外部对象..在点击......线..保存..”

- 我想向用户说明excel文件是打开的,因此无法正确覆盖。我使用了try catch并抛出了正确的消息但是在catch事件的消息框发生之前,发生了PB执行错误R0035。任何解决方案或正确的方法来了解excel文件是否已打开。

5 个答案:

答案 0 :(得分:0)

您可以先检查文件是否打开,看看这个答案:

how to check if file is opened in excel using OLE (leaves excel process open)

答案 1 :(得分:0)

我尝试使用LockReadWrite进行PowerScript FileOpen ()调用!参数,以查看是否可以打开,如果成功则立即跟FileClose ()。 (我认为这是与Colin相关联的DXL解决方案的特定于PowerScript的变体。)

祝你好运,

特里

答案 2 :(得分:0)

您是否尝试过类似的方法?

使用Win32 API: http://www.rgagnon.com/pbdetails/pb-0030.html

使用PB函数fileopen()和(默认)独占权限集: http://www.tek-tips.com/viewthread.cfm?qid=1610670

换句话说,看看在连接到Excel或制作CSV之前是否可以独占打开文件?

答案 3 :(得分:0)

您必须关闭该选项才能进入该异常的调试器,以查看IDE中的异常处理工作。有关详细信息,请查找帮助主题“异常设置对话框”。一旦你看到它工作,我建议你重新设置它以进入调试器,因为你通常想看看是什么引起了错误。

答案 4 :(得分:0)

当用户打开文档(即使您设置锁定写入)而不是应用程序时,您不能使用ole。 我的方法,到目前为止我已经使用过很多次了:

  1. 检查excel是否已打开,使用可以在互联网上使用 api wsh 脚本来检查已打开的应用。如果打开则不运行另存为并告诉用户关闭excel而不是暂时运行它。
  2. 如果您的用户运行excel并且您的程序仍在运行活动工作簿,则工作表应用程序将切换到用户打开的excel(想象它写错了数据)。
  3. 更改您的代码如下

    如果Excel_Obj.ConnectToNewObject(' excel.application')<> 0然后 messagebox("警告","可以连接到excel",停止!) 返回
    如果

  4. 结束
  5. 仅仅是为了知识,另一种技术是DDE调用,但今天不常见且最复杂。

  6. 快乐编码来自pb开发人员。