Excel导入错误

我正在尝试将大约1500个Excel文件导入到我的系统中。 代码工作在一个循环中,我可以打开并导入大约600个Excel文件。 之后,我得到一个错误消息,如:错误调用外部对象函数在55行打开…..

我真的坚持这个问题,如果有人能帮助,将不胜感激。


代码发表回复评论:

For ll_LoopCnt = 1 To Dw_1.rowcount( ) Ls_File_Name = Dw_1.getitemstring( ll_LoopCnt, "file_name") Ls_Path =Dw_1.getitemstring( ll_LoopCnt, "file_path") ll_Sr_No= Dw_1.getitemNumber( ll_LoopCnt, "sr_no") ldt_File_Date= Dw_1.getitemDateTime( ll_LoopCnt, "file_date") Excel.Application.DisplayAlerts = "False" Excel.WorkBooks.Open( Ls_Path ) Excel.Application.Visible = False Excel.windowstate = 2 // 1 : Normal, 2 : Minimize, 3 : Maximize Excel.Application.CutCopyMode = False Lb_sheet_rtn = excel.worksheets(7).Activate Ls_ClipBoard = clipboard() Excel.Application.ActiveWorkbook.Save() Excel.Worksheets(7).UsedRange.Copy ll_cnt = ds_1.importclipboard() IF ll_cnt <= 1 THEN Messagebox("Error", "Could not find.") Else Dw_1.Scrolltorow( ll_LoopCnt ) Dw_1.SetItem( ll_LoopCnt, "status", 'Success') For ll_Inner_LoopCnt = 1 To Ds_1.RowCount( ) Ds_1.Object.file_path[ll_Inner_LoopCnt] = Ls_Path Ds_1.Object.file_name[ll_Inner_LoopCnt] = Ls_File_Name Ds_1.Object.file_sr_no[ll_Inner_LoopCnt] = ll_Sr_No Ds_1.Object.file_date[ll_Inner_LoopCnt] = ldt_File_Date Next END IF Clipboard(ls_ClipBoard) Ds_1.Reset( ) //Reset the data store Excel.Application.ActiveWorkbook.Save() Excel.Application.ActiveWorkbook.Close(False); Excel.Application.Quit Excel.Application.CutCopyMode = False IF ll_LoopCnt = ll_Excel_Cnt Then //--->> After 100 files reset the memmory ll_Excel_Cnt = ll_LoopCnt + 100 Excel.DisConnectObject() DESTROY excel DESTROY TEst_Excel GarbageCollect ( ) Excel = Create OLEObject Test_Excel = Create OLEObject Li_rtn = excel.ConnectToNewObject("excel.application") IF li_rtn <> 0 THEN MessageBox('Excel error','can not run Excel Program') DESTROY Excel RETURN 0 END IF End IF Next Excel.displayalerts = False Excel.Application.Quit Excel.displayalerts = True Excel.DisConnectObject() DESTROY Excel DESTROY Test_Excel /* This is the code i written i dont think the OLE is crashing i think the connnectto the OLE is getting lost after some time, but stile its going fine for almost 600 records.. */ 

看到这行代码会有所帮助,但是这个错误消息通常(在OLE的情况下,我猜是这里的情况)来自PowerBuilder进行OLE主机拒绝的OLE调用。 从提供的信息来看,无法判断OLE主机是否已经崩溃并且不再响应,或者是否已经将OLE主机置于这些function不再适用的状态,或者如果OLE对象已经变得无效,或者是什么。

如果是我,并一直发生,我会在debugging器中运行应用程序,以达到错误即将发生的状态(您可以设置断点中的高级属性,使其每次都不会激活断点通过)并尝试询问OLE对象。 我希望你也必须抛出一些testing代码,因为我不确定你想要testing的所有东西都可以被debugging器使用。


新的2月21日

我还会更改正在处理的文件集,以便我可以确定崩溃的关键字是特定文件还是处理的文件数量。 例如,如果你摆脱了前100个文件,它仍然崩溃在第600个文件(相同数量)或第500个文件(相同的文件)?

一种可能性是你的内存不足。 OLE引用(属性访问,方法调用)中的每个“点”在内存中创build一个对象,直到垃圾收集才会被销毁。 您发布的代码片段将永远不会进入GarbageCollect()被调用的块(ll_Excel_Cnt永远不会被初始化),因此您可能需要确保该部分正在工作。 我也摆脱了不必要的电话。 例如,当只需要调用一次的时候,你有几个调用可以保持循环中的Excel状态(例如Excel.Application.Visible)。 我也不清楚从代码片段为什么你需要调用Save(),无论是时间; 这也可能是可消耗的。 这个清理也应该让你的代码运行得更快。


祝你好运,

特里

大约30号线你有

 Excel.Application.ActiveWorkbook.Save() Excel.Application.ActiveWorkbook.Close(False); Excel.Application.Quit 

你不应该打电话给Excel.Application.Quit那里。 此外,我总是build议把所有使用OLE内部Try..Catch块,并捕获OleRuntimeError和RuntimeError。