我刚才用过的代码,你看看,试试:
oleobject xlapp,xlsub
xlapp = CREATE OLEObject
integer li_ret
string ls_name,cldm1,clmc1,ggcs1,dw1,xh
double qgj1,bsj1,bdj1,ysj1
integer i,j
string docname, named
integer value
value = GetFileOpenName("选择文件",docname,named, "xls","EXCEL文件(*.XLS),*.XLS,")
IF value=1 THEN
li_ret = xlapp.ConnectToNewObject("Excel.Application")
if li_ret <> 0 then
MessageBox("错误!","无法启动excel程序!")
return 0
end if
else
MessageBox("错误!","无法打开文件!")
return
end if
openwithparm(w_message,"正在导入...")
xlapp.application.workbooks.open(docname)
xlsub=xlapp.application.activeworkbook.worksheets[5]
delete from clsx;
commit;
for i=2 to 1785
cldm1=trim(xlsub.cells[i,1].value)
clmc1=trim(xlsub.cells[i,2].value)
ggcs1=trim(xlsub.cells[i,3].value)
dw1=trim(xlsub.cells[i,4].value)
qgj1=double(xlsub.cells[i,5].value)
bsj1=double(xlsub.cells[i,6].value)
bdj1=double(xlsub.cells[i,7].value)
ysj1=double(xlsub.cells[i,8].value)
xh=string(i - 1)
//这里是直接插入表中,如果你要插入到dw,就直接把取得的数据setitem到数据窗口的column即可。还有,这里的提示加入你没有w_message的话,你改一改就可以了。
insert into clsx values(:xh,:cldm1,:clmc1,:ggcs1,:dw1,0,0,:qgj1,:bsj1,:bdj1,:ysj1,0,' ',' ');
commit using sqlca;
w_message.st_1.text="已经完成:"+string(i - 1)+"/"+string(1785)
end for
xlapp.application.workbooks.close("g:\bzclk.xls")
DESTROY xlapp;
w_message.st_1.text="正在提取数据!请稍候..."
dw_1.settransobject(sqlca)
dw_1.retrieve()
close(w_message)
//检查返回值,以确保已成功地连接到了Excel
IF excelok <> 0 THEN
//这是我自定义的messagebox,替换成PB自己的就可以
inv_msg.of_msgbox("信息提示","连接EXCEL失败,请检查计算机中是否安装了EXCEL!")
RETURN -1
END IF
li_net = GetFileOpenName("选择文件", str_savename,named,"xls","Excel文件(*.xls),*.xls")
IF li_net > 0 THEN
IF str_savename = "" THEN RETURN -1
ad_dw.SetTransObject(sqlca)
ad_dw.Reset()
excelserver.workbooks.Open(str_savename)
excelserver.activesheet.cells.Copy
li_count = ad_dw.ImportClipboard(2) //导入数据
Clipboard("")
excelserver.quit()
excelserver.DisconnectObject()
DESTROY excelserver
RETURN 1
ELSE
inv_msg.of_msgbox('信息提示','没有指定导入文件!')
RETURN -1
END IF