1、PB与EXCELPB与EXCEL方法一:OLEObject ExcelServerinteger ExcelOKExcelServer = CREATE OLEObjectExcelOK = ExcelServer.ConnectToNewObject( excel.application )ExcelServer.Workbooks.Open(c:book.xls)ExcelServer.ActiveWorkBook.Sheets(Sheet2).SelectExcelServer.ActiveSheet.Cells(1,1).value = 书名ExcelServer.Applicatio
2、n.Visible = TRUE 方法二:先启动excel文件long handle_1 handle_1 = OpenChannel(Excel, c:book.xls)/建立与EXCEL的通道 setremote(r1c1,书号,excel, c:book.xls) setremote(r1c2,书名,excel, c:book.xls) /更改某一行或某一列的值,同时关闭通道 closechannel(handle_1,handle(parent) - 问题内容:将EXCEL文件导入DW数据窗口的方法 原讨论链接: 所属论坛:DataWindow 审核组:PowerBuilder 提问者
3、:yjd2001 解决者:Capricor 感谢:fibbery、lzheng2001、sun1976、mittee、guoleilele、amekoxiao、workhand 关键字: 答案: - 导入的电子表格请符合下面的三种情况 1. 是从本系统导出的模板 2. 在excel另存为csv(逗号分隔)类型的文件; 3. 在excel另存为文本文件(制表符分隔)类型的文件 /最后都用到数据窗口的importfile() /还有一种方法就是对excel文件一个一个单元格进行读取, /问题是无法知道excel文件行数和列数 - 把DW导出的代码为: constant string ls_file
4、name = d:file.xls long numcols , numrows , c, r OLEObject xlapp , xlsub int ret numcols = long(dw_1.Object.DataWindow.Column.Count) numrows = dw_1.RowCount() xlApp = Create OLEObject ret = xlApp.ConnectToNewObject( Excel.Sheet ) if ret 0 then MessageBox(Connect to Excel Failed !,string(ret) return e
5、nd if try xlsub = xlApp.Application.Workbooks.Add() xlsub = xlapp.Application.ActiveWorkbook.Worksheets1 xlApp.Application.Visible = true string ls_name for c=1 to numcols /写标题 ls_name = dw_1.describe( # + string(c) + .name ) xlsub.cells1,c = ls_name next for r = 1 to numrows/写行 for c = 1 to numcols
6、 xlsub.cellsr+1,c = dw_1.object.datar,c next next xlsub.saveas(ls_filename) xlApp.Application.Workbooks.close() catch ( runtimeerror re ) MessageBox ( string(re.number), re.getmessage() end try xlApp.DisConnectObject() Destroy xlapp * 用ole把excel读进来,然后一个cell一个cell的取数,放到dw里,然后可以操作或者update都可以,一下代码: /将E
7、XCEL的数据导入到临时表中 uo_file_function uo_1 uo_1 = create uo_file_function if uo_1.closeexcel() 0 then DESTROY uo_1 Return end if Destroy uo_1 luo_excel = create oleobject IF wf_inputbom() = False Then SetCurrentDirectoryA(is_syspath)/将路径重新设置 Destroy Luo_excel Return End IF SetCurrentDirectoryA(is_syspath)
8、/将路径重新设置 Destroy Luo_excel 其中wf_inputbom(): Long value,Ll_col,Ll_01,Ll_row String Ls_path,Ls_filename,Ls_cx Is_syspath=space(255) GetCurrentDirectoryA(255,Is_syspath) value=GetFileopenname(请选择要导入BOM的EXECL类型文件!,ls_path,ls_filename,xls,EXECL 文件(*.xls),*.xls) is_filename = mid(ls_filename,1,len(ls_file
9、name) - 4) if value 1 then /没取到、或者取消返回 Return false end if if luo_excel.connecttoobject(,Excel.Application) 0 then if luo_excel.ConnectToNewObject(Excel.Application) 0 then messagebox(error,连接excel失败请稍后再试!) return false end if end if SetPointer(HourGlass!) luo_excel.workbooks.open(ls_path) luo_sub =
10、 luo_excel.application.workbooks(ls_filename).worksheets(1) / 取出数据区域 ll_col=2 do while 1=1 luo_sub.cells(ll_col,1).copy() tab_1.tabpage_1.sle_2.paste() ls_cx=trim(tab_1.tabpage_1.sle_2.text) if trim(tab_1.tabpage_1.sle_2.text)= or isnull(tab_1.tabpage_1.sle_2.text) then exit end if tab_1.tabpage_1.s
11、le_2.text= ll_col+ loop /Ll_col 记录总的行数 if ll_col2 then goto out/空的Excel, /删除PIM_BOM表中原有数据 delete from inv_usedquota2; tab_1.tabpage_1.dw_8.reset() tab_1.tabpage_1.dw_8.retrieve() /取数 ll_01=2 /从第三行开始取数 do while ll_01= ll_col - 1 ll_row=tab_1.tabpage_1.dw_8.insertrow(0) tab_1.tabpage_1.sle_2.text= luo
12、_sub.cells(ll_01,1).copy() tab_1.tabpage_1.sle_2.paste() ls_cx=trim(tab_1.tabpage_1.sle_2.text) if left(ls_cx,1)= then ls_cx=right(ls_cx,len(ls_cx) - 1) end if tab_1.tabpage_1.sle_2.text= tab_1.tabpage_1.dw_8.setitem(ll_row,wlh,ls_cx) luo_sub.cells(ll_01,2).copy() tab_1.tabpage_1.sle_2.paste() ls_cx
13、=trim(tab_1.tabpage_1.sle_2.text) tab_1.tabpage_1.sle_2.text= tab_1.tabpage_1.dw_8.setitem(ll_row,zwlh,ls_cx) luo_sub.cells(ll_01,5).copy() tab_1.tabpage_1.sle_2.paste() ls_cx=trim(tab_1.tabpage_1.sle_2.text) if left(ls_cx,1)= then ls_cx=right(ls_cx,len(ls_cx) - 1) end if tab_1.tabpage_1.sle_2.text=
14、 tab_1.tabpage_1.dw_8.setitem(ll_row,de,dec(ls_cx) luo_sub.cells(ll_01,9).copy() tab_1.tabpage_1.sle_2.paste() ls_cx=trim(tab_1.tabpage_1.sle_2.text) if left(ls_cx,1)=T or left(ls_cx,1)=t then ls_cx=1 * f_excel_to_dw 專業 2008-11-07 08:41:52 阅读9 评论0 字号:大中小/*-*/* 函 數: f_excel_to_dw */* 參 數: as_dw(dataw
15、indow) */* 返回值: integer */* 描 述: 將數據從Excel導入到Datawindow中 */* 撰 寫: Hushuiqiu 2008/10/30 */*-*/string str_savename,named,s_grxhint excelok,li_netlong li_count,iOleobject ExcelserverExcelserver=create Oleobject Excelok=excelserver.Connecttonewobject(excel.application)/check return value make sure succe
16、ss to connect to ExcelIF Excelok 0 THEN Messagebox(,Faild connect to Excel ,please make sure you have setup the excel) RETURN -1END IF li_net = GetFileOpenName(Choose files, str_savename,named,xls,Excel file(*.xls),*.xls) IF li_net 0 THEN IF str_savename = THEN RETURN -1 as_dw.settransobject(sqlca)
17、as_dw.reset() Excelserver.workbooks.open(str_savename) Excelserver.activesheet.cells.copy li_count = as_dw.importclipboard(2) /import data Clipboard() Excelserver.quit() Excelserver.disconnectobject() Destroy excelserver Return 1Else Return -1 END IF * 回复于:2003-07-24 10:42:36/先启动excel文件 long handle_
18、1 handle_1 = OpenChannel( Excel , c:myexlel.xls ) /开始读取数据! string ls_name integer li_rtn li_rtn = getremote( r1c1 ,ls_name,handle_1)/r1表示行1,c1表示列1 /将行1列1的值赋给变量ls_name if li_rtn = 1 then/判断操作是否成功 messagebox( ,ls_name)/成功 else messagebox(ls_name,string(li_rtn) end if dw_1.SetItem(行,列,ls_name)/把内容写到数据窗
19、口 /-数据读取结束(这段内容可连续重复也可用循环语句读出数据到数组!) CloseChannel(handle_1) /关闭excel 这里给出从DATAWINDOW到EXECL导出数据的方法,如果是从EXECL到DATAWINDOW则反过来,加以修改就可以啦。 string ls_initfile,ls_name,is_server,ls_string string ls_path integer li_file,li_ret,li_Block string ls_1name,ls_2name string ls_mc,ls_zch long ll_bl,i,ll_count dec 2
20、dec_bl OLEObject lo_xlapp , lo_xlsub uo_statusbar.of_settext(0,0, 正在导出报表文件,请稍候. ) ls_path=g_app.Localpath+ xlsaa.xls uo_statusbar.of_settext(0,0, 正在打开Excel文件. ) lo_xlapp = Create OLEObject li_ret = lo_xlapp.ConnectToNewObject( Excel.Sheet ) lo_xlapp.Application.Workbooks.Open( c:powerxlsaa.xls ) str
21、ing ls_MonthNow,ls_DateNow,ls_cbsj ls_MonthNow=String(today(), yyyymm ) ls_DateNow=String(today(), yyyymmdd ) lo_xlapp.Application.Visible = false lo_xlsub = lo_xlapp.Application.ActiveWorkbook.Worksheets1 li_block=0 dec 2 dec_da1,dec_da2,dec_cbl,dec_shdl,dec_shl dec 2 dec_total1,dec_total2,dec_tota
22、l3,dec_max1,dec_min1,dec_num1 string str_cbsj,str_ly lo_xlsub.cells3,7=Left(ls_DateNow,4)+ . +mid(ls_DateNow,5,2)+ . +Right(ls_DateNow,2) ll_count=dw_view.rowcount() for i=1 to ll_count str_cbsj=dw_view.object.cbsji lo_xlsub.cellsi+4,1=str_cbsj dec_da1=dw_view.object.data1i lo_xlsub.cellsi+4,2=dec_d
23、a1 dec_da2=dw_view.object.data2i lo_xlsub.cellsi+4,3=dec_da2 dec_shdl=dw_view.object.shdli lo_xlsub.cellsi+4,4=dec_shdl dec_shl=dw_view.object.shli lo_xlsub.cellsi+4,5=dec_shl str_ly=dw_view.object.lyi lo_xlsub.cellsi+4,6=str_ly dec_cbl=dw_view.object.cbli lo_xlsub.cellsi+4,7=dec_cbl end for /总表电量,最
24、大值,最小值,次数最多值,合计 dec_total1=dw_view.object.Primary.Current.total1 lo_xlsub.cellsll_count+2,2=dec_total1 dec_total2=dw_view.object.Primary.Current.total2 lo_xlsub.cellsll_count+2,3=dec_total2 dec_total3=dw_view.object.Primary.Current.total3 lo_xlsub.cellsll_count+2,6=dec_total3 lo_xlapp.Application.Ac
25、tiveWorkbook.Save() lo_xlapp.Application.quit() lo_xlApp.DisConnectObject() Destroy lo_xlapp uo_statusbar.of_settext(0,0, 导出完成。 ) * EXCEL文件导入DATAWINDOW PowerBuilder 2008-01-21 21:12:29 阅读1 评论0 字号:大中小 / 函数名称: GF_EXCEL_TO_DATAWINDOW / 函数功能: EXCEL文件导入DATAWINDOW / 参数类型: DATAWINDOW / 参数名称: dw / RETURN :
26、1 SUCCEED -1 ERROR / DATE : 2004 3.1 /string str_savename,named,s_grxh;int excelok,li_net;long li_count; oleobject excelserver;excelserver=create oleobject;excelok=excelserver.connecttonewobject(excel.application);if excelok0 then messagebox(信息提示,连接EXCEL失败,请检查计算机中EXCEL是否工作正常); return -1;end ifli_net
27、=GetFileOpenName(选择文件,str_savename,named,xls,Excel文件(*.xls),*.xls);if li_net0 then if str_savename= then return -1 end if dw.reset() excelserver.workbooks.open(str_savename); excelserver.activesheet.cells.copy li_count=dw.importclipboard(1); clipboard(); excelserver.quit(); excelserver.disconnectobject(); destroy excelserver; return 1;else messagebox(信息提示,没有指定导入文件!); excelserver.disconnectobject
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2