使用一個excel模板,為單位中每個人生成一個EXCEL檔案,并將人員資訊填到該新生成的檔案中。檔案以每個職工的編號命名。
在回圈中不定(看似隨機,人越多出現的幾率越大)的出現錯誤,代碼行陳述句為ole_object.workbooks.open(ls_new_docname) //打開目標檔案,錯誤提示為name not found accessing external object property workbooks
具體示例代碼如下:
//先生產所有檔案
integer value
string docname,named, ls_pathname
String ls_new_docname, ls_new_named
value = GetFileSaveName("選擇檔案名稱",docname, named, "xls","EXCEL 檔案 (*.XLS),*.XLS") //要保存的檔案名及路徑
if value <> 1 then return
ls_pathname = left(docname,pos(docname,named)-1)
ll_rowcount = dw_7.RowCount()
For ll_i = 1 to ll_rowcount
ls_pnumber = dw_7.getitemstring(ll_i,'aa_u_personal_p_number')
ls_new_named = ls_pnumber+'個人審批表.XLS'
ls_new_docname = ls_pathname+ls_new_named
i = CopyFileA( gs_current_path + "\xls\個人審批表樣表.xls",ls_new_named,0)
//把模板檔案拷貝為要保存的檔案
if i <> 1 then
MessageBox('提示資訊','另存錯誤,請檢查!'+gs_current_path + "\xls\個人審批表樣表.xls")
return
end if
Next
//再次回圈,分別打開每個檔案,填寫內容。最早兩個回圈是合在一起的,出錯誤后才分開的,但沒解決實際問題
OLEObject ole_object
For ll_i = 1 to ll_rowcount
ls_pnumber = dw_7.getitemstring(ll_i,'aa_u_personal_p_number')
ls_new_named = ls_pnumber+'個人審批表.XLS'
ls_new_docname = ls_pathname+ls_new_named
//這一段是在出現錯誤后,我又加的,使用PB打開該檔案測驗一下
do while TRUE
if FileExists(ls_new_docname) then
li_FileNum = FileOpen(ls_new_docname, StreamMode!, Read!, LockRead!)
if li_FileNum <> -1 then //打開成功
if FileClose(li_FileNum) = 1 then st_5.text = '關閉成功'
exit
else
st_5.text = '打開不成功'
end if
end if
loop
//通過以上這段能判斷檔案存在,并且能打開,但使用ole打開時仍隨機出現錯誤
SetFileAttributes(ls_new_docname, 32) //把保存的檔案設為可寫
ole_object = CREATE OLEObject
int li_ret
li_ret = ole_object.ConnectToObject("","Excel.Application")
if li_ret <> 0 then
li_ret = ole_object.ConnectToNewObject("Excel.Application")
if li_ret <> 0 then
ole_object.DisconnectObject() //斷開連接
Destroy ole_object //銷毀EXCEL服務物件
MessageBox('OLE錯誤','OLE無法連接!錯誤號:' + string(li_ret))
return
end if
ole_object.Application.Visible = false
end if
ole_object.workbooks.open(ls_new_docname) //打開目標檔案,這一句隨機出現錯誤,當回圈大時,出現的幾率大
ole_object.workbooks(ls_new_named).activate()
ls_pname = dw_7.getitemstring(ll_i,'aa_u_personal_p_name')
ole_object.worksheets(1).cells(3,2).value = ls_pname
ole_object.Application.Quit()
ole_object.DisconnectObject() //斷開連接
Destroy ole_object //銷毀EXCEL服務物件
// yield()
Next
請高手指點一下啊,我試了一下午了,包括將硬碟的寫入快取關掉等。。急呀,謝謝!
uj5u.com熱心網友回復:
在不同OS下試著除錯了一下,XP下出錯概率較小,VISTA和WIN7下概率大。跟系統的什么地方有關呢?怎么才能預判出是否要出錯誤,然后解決呢?現在暫時加了個變數記載回圈的進度,當出現錯誤后,再次從出錯的地方繼續執行。這方法太弱了。。。
ole_object.workbooks.open(ls_new_docname)直接就出系統級錯誤,相內部掩飾一下都不行呀。。。
怎麼辦?
以后類似這樣的需求怎么實作?
各位大俠來接個分呀
uj5u.com熱心網友回復:
不用判斷檔案是否存在與能否打開, 通過if not ole_object.workbooks.open(ls_new_docname) then
//無法打開
end if
uj5u.com熱心網友回復:
Tryole_object.workbooks.open(ls_new_docname)
...
Catch(runtimeerror runx)
//if error
End Try
uj5u.com熱心網友回復:
lzcc123:問題解決了嗎?怎么解決的啊。uj5u.com熱心網友回復:
當 lole_xlsFile.Workbooks.Open("c:\abc.xls") 不能用就使用 lole_xlsFile.Application.Workbooks.Open("c:\abc.xls")
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/81548.html
標籤:腳本語言
