将PB数据窗口中的数据导出到EXCEL文件

PB】将PB数据窗口中的数据导出到EXCEL文件
我设计中只用过两种方法。

第一种:
导出到默认的路径(代码中固定好的)。

核心代码是:
long dwcontrol.SaveAsAscii(string filename,[string separatorcharacter(可选项,以该种格式来分隔数据,如果省略则默认为tab,)],)
实例如下:
if dw_1.saveasascii("C:\缺陷查询结果.xls"," ","")=1 then
messagebox("提示信息","数据导出成功!! 文件路径为C:\缺陷查询结果.xls!")
else
messagebox("提示信息","数据导出失败!")
end if
第二种:这种方法要事先在指定路径建立起要导出的EXCEL文件。

下面代码是打开该文件并保存进去。

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
//创建OLE对象
ret=xlApp.ConnectToNewObject("Excel.Sheet")
if ret<0 then
messagebox("连接Excel程序失败!",string(ret))
return
end if
//连接Excel,并检验返回值
xlApp.Application.Workbooks.Open("C:\缺陷查询结果.xls") //打开一个特定的Excel文件
xlApp.Application.Visible=true
//使该Excel文件可视
xlsub=xlApp.Application.ActiveWorkbook.Worksheets[1]
//确定第一个工作薄
for c=1 to numcols
for r=1 to numrows
xlsub.cells[r,c]=dw_1.object.data[r,c]
next
next
//循环发送数据
xlApp.DisConnectObject()
Destroy xlApp。

合集下载

从Powerbuilder数据窗口到Excel报表转换通用函数的实现

从Powerbuilder数据窗口到Excel报表转换通用函数的实现

从Powerbuilder数据窗口到Excel报表转换通用函数的实现
从Powerbuilder数据窗口到Excel报表转换通用函数的
实现
邹运兰
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2003(000)011
【摘要】确良本文介绍了在PowerBuilder中利用OLE自动化技术调用Excel 对象将数据窗口内容转到Excel中的一个通用函数的实现过程,它将PB强大的数据检索、处理功能和Excel优良的制作复杂报表功能结合起来,在PB应用程序中直接控制Excel的对象及其属性,从而有利于复杂报表的处理.文章最后结合一个复杂报表实例给出了这个通用函数的应用及测试方法.
【总页数】4页(30-33)
【关键词】PowerBuilder;Excel;OLE;报表
【作者】邹运兰
【作者单位】无
【正文语种】中文
【中图分类】TP31
【相关文献】
1.PowerBuilder中调用Excel制作复杂报表的方法 [J], 邹运兰; 张怡芳
2.用PowerBuilder汇总Excel报表 [J], 孟文; 罗云瑞
3.用Excel打印输出PowerBuilder报表 [J], 刘杰
4.用Excel打印输出PowerBuilder报表 [J], 刘杰
5.PowerBuilder中通过OLE实现复杂Excel报表 [J], 潘峰; 刘景浩。

PB导出EXCEL

PB导出EXCEL

1.OLEObject ole_object , ole_workbooksole_object = CREATE OLEObjectIF ole_object.ConnectToNewObject("Excel.Application") <> 0 THEN MessageBox('OLE错误','OLE无法连接!')returnEND IFole_object.workbooks.addole_object.Visible = Trueole_workbooks = ole_object.Worksheets(1)ole_workbooks.cells(1,1).value="id" //数据窗口的标题就是表头ole_workbooks.cells(1,2).value="用户名"ole_workbooks.cells(1,3).value="密码"// ole_workbooks.cells(1,4).value="机器号"// ole_workbooks.cells(1,5).value="开始时间"// ole_workbooks.cells(1,6).value="结束时间"long l_rowfor l_row = 1 to dw_1.rowcount()ole_workbooks.cells(l_row+1,1).value=dw_1.getitemnumber(l_row ,1)ole_workbooks.cells(l_row+1,2).value=dw_1.getitemstring(l_row ,2)ole_workbooks.cells(l_row+1,3).value=dw_1.getitemstring(l_row ,3)// ole_workbooks.cells(l_row,4).value=dw_1.getitemnumber(l_row,4)// ole_workbooks.cells(l_row,5).value=dw_1.getitemtime(l_row,5)// ole_workbooks.cells(l_row,6).value=dw_1.getitemtime(l_row,6)nextole_workbooks.SaveAs ("d:\data.xlsx")ole_object.quit()Ole_Object.DisConnectObject()Destroy Ole_Objectdestroy ole_workbooks2PB数据窗口导出到EXCEL函数function f_oletoexcel(adw datawindow,title string,as_file string)Oleobject ole_objectString s_english="ABCDEFGHIJKLMNOPQRSTUVWXYZ"String ls_obj,ls_objs[],ls_objtag[],ls_width[],ls_value,column_name,ls_coltype,ls_range Integer li_ret,i,li_grouprow,li_newgrouprow,j,row,groupflag,detailflag,sumflagLong ll_row,ll_num,ll_column,ll_groupnum,ll_sumrowInt li_rtn=-9dec ld_widthPointer oldpointergroupflag=0detailflag=1sumflag=1/*-------打开EXCELL文档-------*/ole_object = CREATE OLEObjectli_ret = ole_object.ConnectToObject("","Excel.Application")IF li_ret <> 0 THEN/*--如果Excel还没有打开则新建--*/li_ret = ole_object.ConnectToNewObject("Excel.Application")if li_ret <> 0 thenMessageBox('OLE错误','OLE无法连接!错误号:' + string(li_ret))li_rtn = -1goto totheendend ifole_object.Visible = False //一般自动保存时设为不可视END IF/*-------打开文档完毕-------*/oldpointer = SetPointer(HourGlass!)ole_object.Workbooks.Addll_row = 1ll_column =long(adw.Object.DataWindow.Column.Count)ll_num = 1//"#1"可以指向第一列,#2则指向datawindow的第二列FOR i = 1 TO ll_columnIF adw.Describe("#"+String(i)+".Visible")="1" and adw.Describe("#"+String(i)+".Band")="detail" THENyield()ls_obj = adw.Describe("#"+String(i)+".name")ls_objs[ll_num] = ls_objls_objtag[ll_num]=adw.Describe(ls_obj+"_t.text") //字段名称的显示值// messagebox(ls_obj,adw.Describe(ls_obj+"_t.text"))ls_width[ll_num]= adw.Describe(ls_obj + '.width') //每列的宽度ll_num++END IFNEXT//messagebox("",ll_column)ll_column = upperbound(ls_objs)if ll_column <= 26 thenls_range = Char(64+ll_column)elsels_range = char(64+integer((ll_column - 1)/26))+char(64+integer(mod((ll_column - 1),26)+1))end ifIF trim(title)<>"" THENll_row = 2/*-------生成标题-------*/ole_object.Cells(1,1).Value =titleole_object.Range('A1').Selectole_object.Selection.Font.Size =24ole_object.selection.HorizontalAlignment =3ole_object.Range('A1:'+ls_range+'1').Selectole_object.Range('A1:'+ls_range+'1').MergeEND IF/*-------设置标题栏-------*/for i = 1 to ll_columnyield()ls_value = ls_objtag[i]ole_object.cells(ll_row,i).value = ls_value //1if isnull(ls_width[i]) thenld_width=12elseld_width=dec(ls_width[i])/35end ifole_object.Columns(i).ColumnWidth=ld_widthole_object.Columns(i).HorizontalAlignment =3ole_object.Columns(i).Borders.LineStyle= 1ole_object.Columns(i).Font.Bold =TruenextIF groupflag = 1 and detailflag = 0 THENll_row ++END IFli_grouprow = 0ll_groupnum = 0IF groupflag = 1 THENFOR i = 1 to adw.rowcount()li_newgrouprow = adw.findgroupchange(i,1)IF li_newgrouprow = i THENIF li_grouprow > 0 THENrow = i*detailflag + ll_row + ll_groupnumfor j = 1 to ll_columnyield()column_name = ls_objs[j]+"_c"ls_value = adw.Describe("Evaluate('" + adw.Describe(column_name + '.expression') + "',"+string(li_grouprow)+")")ls_coltype=adw.Describe(column_name+'.coltype')IF isnull(ls_value) or ls_value="!" or ls_value = "?" THENls_value = ""END IFif pos(upper(ls_coltype),"CHAR")>0 then //对字符型数据处理ole_object.cells(row,j).NumberFormat ="@"end ifole_object.cells(row,j).Font.Bold =trueole_object.cells(row,j).value = ls_valuenextll_groupnum++li_grouprow = li_newgrouprowELSEli_grouprow = li_newgrouprowEND IFIF detailflag = 1 THENrow = i + ll_row + ll_groupnumfor j = 1 to ll_columnyield()column_name = ls_objs[j]if adw.Describe(column_name + '.type') = 'column' thenls_value = adw.Describe("Evaluate('LookupDisplay("+column_name+")',"+string(i)+")") end ifif adw.Describe(column_name + '.type') = 'compute' thenls_value = adw.Describe("Evaluate('" + adw.Describe(column_name + '.expression') + "',"+string(i)+")")end ifIF isnull(ls_value) or ls_value="!" or ls_value = "?" THENls_value = ""END IFls_coltype=adw.Describe(column_name+'.coltype')if pos(upper(ls_coltype),"CHAR")>0 then //对字符型数据处理ole_object.cells(row,j).NumberFormat ="@"end ifole_object.cells(row,j).Font.Bold =falseole_object.cells(row,j).value = ls_valuenextEND IFELSEIF detailflag = 1 THENrow = i + ll_row + ll_groupnumfor j = 1 to ll_columnyield()column_name = ls_objs[j]if adw.Describe(column_name + '.type') = 'column' thenls_value = adw.Describe("Evaluate('LookupDisplay("+column_name+")',"+string(i)+")")end ifif adw.Describe(column_name + '.type') = 'compute' thenls_value = adw.Describe("Evaluate('" + adw.Describe(column_name + '.expression') + "',"+string(i)+")")end ifIF isnull(ls_value) or ls_value="!" or ls_value = "?" THENls_value = ""END IFls_coltype=adw.Describe(column_name+'.coltype')if pos(upper(ls_coltype),"CHAR")>0 then //对字符型数据处理ole_object.cells(row,j).NumberFormat ="@"end ifole_object.cells(row,j).Font.Bold =falseole_object.cells(row,j).value = ls_valuenextEND IFEND IFNEXTll_sumrow = i*detailflag + ll_row + ll_groupnumIF groupflag = 1 THENrow = i*detailflag + ll_row + ll_groupnumll_sumrow++for j = 1 to ll_columnyield()column_name = ls_objs[j]+"_c"ls_value = adw.Describe("Evaluate('" + adw.Describe(column_name + '.expression') + "',"+string(li_grouprow)+")")ls_coltype=adw.Describe(column_name+'.coltype')IF isnull(ls_value) or ls_value="!" or ls_value = "?" THENls_value = ""END IFif pos(upper(ls_coltype),"CHAR")>0 then //对字符型数据处理ole_object.cells(row,j).NumberFormat ="@"end ifole_object.cells(row,j).Font.Bold =trueole_object.cells(row,j).value = ls_valuenextEND IFELSEFOR i = 1 TO adw.rowcount()for j = 1 to ll_columnyield()column_name = ls_objs[j]if adw.Describe(column_name + '.type') = 'column' thenls_value = adw.Describe("Evaluate('LookupDisplay("+column_name+")',"+string(i)+")") //得到所见字段数据end ifif adw.Describe(column_name + '.type') = 'compute' thenls_value = adw.Describe("Evaluate('" + adw.Describe(column_name + '.expression') + "',"+string(i)+")")//得到所见计算字段数据end ifIF isnull(ls_value) or ls_value="!" or ls_value = "?" THENls_value = ""END IFls_coltype=adw.Describe(column_name+'.coltype')if pos(upper(ls_coltype),"CHAR")>0 then //对字符型数据处理ole_object.cells(ll_row+i,j).NumberFormat ="@"end ifole_object.cells(ll_row+i,j).Font.Bold =falseole_object.cells(ll_row+i,j).value = ls_valuenextNEXTll_sumrow = ll_row + iEND IFdebugbreak()IF sumflag = 1 THENfor j = 1 to ll_columnyield()column_name = ls_objs[j]+"_sum"if adw.Describe(column_name+".Name") <>"!" thenls_value = adw.Describe("Evaluate('" + adw.Describe(column_name + '.expression') + "',"+string(1)+")")ls_coltype=adw.Describe(column_name+'.coltype')IF isnull(ls_value) or ls_value="!" or ls_value = "?" THENls_value = ""END IFif pos(upper(ls_coltype),"CHAR")>0 then //对字符型数据处理ole_object.cells(ll_sumrow,j).NumberFormat ="@"end ifole_object.cells(ll_sumrow,j).Font.Bold =trueole_object.cells(ll_sumrow,j).value = ls_valueend ifnextEND IFif FileExists ( as_file ) thenif messagebox("Microsoft Excel","在当前位置发现已经存在名为"+as_file+" 的文件。

pb与excel之间导入导出处理

pb与excel之间导入导出处理

pb与excel之间导入导出处理gf_save_excel_to_txt(as_excel_filename string,as_text_filename string)//把文件名为as_excel_filename的Excel文件另存为文件名为as_text_filename 的Text文件//返回:另存是否成功//删除Text文件If DeleteFile(as_text_filename) Then//删除存在的Text文件成功OLEObject l_olel_ole = Create OLEObject;If l_ole.ConnectToNewObject("Excel.Application") = 0 Then//连接到Excell_ole.Application.DisplayAlerts = False //关闭警告消息对话框,防止退出Excel时提示l_ole.Application.Workbooks.Open(as_excel_filename) //打开Excel文件l_ole.Application.ActiveWorkbook.SaveAs(as_text_filename,-4158) //把打开的Excel文件另存为Text文件,第二参数表示数据以制表符TAB分隔l_ole.Application.Quit() //退出ExcelElseMessagebox(\'错误\',\'无法建立与Excel的连接!\',StopSign!)Destroy l_oleReturn FalseEnd IfDestroy l_oleReturn TrueElse//无法删除Text文件Return FalseEnd If保存excel文件:要想选择目录可以这样string ls_docname, ls_named //文件路径,文件名integer li_rtli_rt = GetFileSaveName("选择保存路径并输入保存文件名" + string(jj),ls_docname, ls_named, &"Excel", &"Excel Files (*.XLS),*.XLS," + &" TXT Files (*.TXT),*.TXT")if li_rt = 1 then//转存dw_x.saveasascii(ls_docname,"~t","") end if。

PowerBI导出数据到Excel的方法及相关限制

PowerBI导出数据到Excel的方法及相关限制

PowerBI导出数据到Excel的方法及相关限制
前些天,有朋友留言说:Power BI里导出数据只能30000行,导出的数据不完整,怎么办……
我其实很少直接在Power BI里导出如此大量的数据,所以,我原来并没有注意到这个限制。

现在刚好有人问,于是专门查了一下微软的说明,大概如下:
1、导出csv文件,只能导3万行;
2、导出Excel文件,可以导出15万行。

但是,我们在Power BI Desktop里,好像只能导出csv文件?比如说,单击图表(视觉对象)的“导出数据”按钮:
这时,会提示数据超出限制:
结果“候选人只有1个”嘛……
对的。

显然,如果要在Power BI Desktop里导出数据的话,只能导出csv文件,也就是说,导出的结果最多也只有3万行。

那么,如果要导出更多的数据,就要导成Excel文件,怎么办呢?只能发布到云端了。

发布后,在“我的工作区”-“报表”里单击相应
的报表,如下图所示:
进入报表后,导出报表的操作是一样的:
接下来的就跟Desktop里不一样,如下所示:
默认是导出汇总数据(即图表中的结果数据:该求和的求和,该平均的平均),也可以选择导出“基础数据”,这样将会导出生成该图表的明细数据,默认格式即为Excel文件,单击“导出”按钮,即可以导出最多15万行的数据。

在PB中导出Excel表

在PB中导出Excel表

在PB中导出Excel表关于在PB中导出Excel表的问题应该是个老问题了,大家讨论了不知道有多少年了,今天我也遇到了这个问题,上网找了半天大家说什么的都有。

总结了一下,把我看到的都贴出来,呵呵。

一.// ... Init docname// ... GetFileOpenName or any other methodif dw_1.SaveAs(docname, HTMLTable!, True) = -1 thenMessageBox("Warning", "Unable to export data. Error writing to file!", Exclamation!)returnend if// Convert HTML file to Excel native formatOLEObject excelexcel = CREATE OLEObjectif excel.ConnectToObject(docname) = 0 thenexcel.application.DisplayAlerts = FALSEexcel.application.workbooks(1).Parent.Windows(excel.application.workb ooks(1).Name).Visible = Trueexcel.application.workbooks(1).saveas(docname, 39)excel.application.workbooks(1).close()end ifDESTROY excel// done二.支持导出分组带、合计带,并且支持多层嵌套报表导出,基本是所见及所得。

///////////////////////////////////////////////////////////////////// ////////// Parameters : ad_dw : datawindow// as_file : file name// Returns : true/false : boolean// Description : Save the datawindow as a excel file./////////////////////////////////////////////////////////////////////// //////// author : purplekite// date : 2003-01-23///////////////////////////////////////////////////////////////////////////SetPointer(HourGlass!)//declare the local variableslong i, j, li_posstring ls_objects, ls_obj, ls_text, ls_err, ls_sqldatastore lds_saveas //导出数据窗datastore lds_sort //获得根据 object.x 排序的 (band = detail and visible = 1) 的 column/computeboolean lb_return //返回值string ls_pbver //pb 版本信息environment env //环境变量getenvironment(env)ls_pbver = string(env.pbmajorrevision)//创建排序列 datastorelds_sort = create datastorels_sql = 'column=(type=char(1) name = ztext dbname="ztext" )' + '~r~n' + &'column=(type=char(1) name = zcol dbname="zcol" )' + '~r~n' + &'column=(type=long name = zx dbname="zx" )' + '~r~n'ls_sql = 'release ' + ls_pbver + ';~r~ntable(' + ls_sql + ')'lds_sort.create(ls_sql, ls_err)if len(ls_err) > 0 thenlb_return = falsegoto lab1end if//准备数据====================================================//all controlsls_objects = ad_dw.Describe("datawindow.objects")//按~t位置作判断开始循环do while (pos(ls_objects,"~t") > 0)li_pos = pos(ls_objects,"~t")ls_obj = left(ls_objects,li_pos - 1)ls_objects = right(ls_objects,len(ls_objects) - li_pos)//(column or compute ) at detail and visibleIF (ad_dw.Describe(ls_obj+".type") = "column" or &ad_dw.Describe(ls_obj+".type") = "compute" ) AND &(ad_dw.Describe(ls_obj+".band") = "detail" ) AND &(ad_dw.Describe(ls_obj+".visible") = "1" ) THENls_text = ad_dw.describe(ls_obj + '_t.text')if ls_text <> '!' and ls_text <> '?' thenlds_sort.insertrow(0)lds_sort.setitem(lds_sort.rowcount(), 'ztext', ls_text)lds_sort.setitem(lds_sort.rowcount(), 'zcol', ls_obj)lds_sort.setitem(lds_sort.rowcount(), 'zx', long(ad_dw.describe(ls_obj + '.x')))end ifEND IFloop//the last controlls_obj = ls_objectsIF (ad_dw.Describe(ls_obj+".type") = "column" or &ad_dw.Describe(ls_obj+".type") = "compute" ) AND &(ad_dw.Describe(ls_obj+".band") = "detail" ) AND &(ad_dw.Describe(ls_obj+".visible") = "1" ) THENls_text = ad_dw.describe(ls_obj + '_t.text')if ls_text <> '!' and ls_text <> '?' thenlds_sort.insertrow(0)lds_sort.setitem(lds_sort.rowcount(), 'ztext', ls_text)lds_sort.setitem(lds_sort.rowcount(), 'zcol', ls_obj)lds_sort.setitem(lds_sort.rowcount(), 'zx', long(ad_dw.describe(ls_obj + '.x')))end ifEND IF//如果没有列则跳出if lds_sort.rowcount() < 1 then goto lab1//根据 object.x 排序lds_sort.setsort('zx A')lds_sort.sort()//创建导出 datastorelds_saveas = create datastorels_sql = ''for i = 1 to lds_sort.rowcount()ls_obj = lds_sort.getitemstring(i, 'zcol')ls_sql += 'column=(type=char(1) dbname="' + ls_obj + '" )' + '~r~n' nextls_sql = 'release ' + ls_pbver + ';~r~ntable(' + ls_sql + ')'lds_saveas.create(ls_sql, ls_err)if len(ls_err) > 0 thenlb_return = falsegoto lab1//向 lds_saveas 中写数据for i = 1 to ad_dw.rowcount()yield()//释放消息队列, 如果数据量较大, 可以使用这个函数lds_saveas.insertrow(0)for j = 1 to lds_sort.rowcount()ls_obj = lds_sort.getitemstring(j, 'zcol')if ad_dw.describe(ls_obj + '.type') = 'column' thenls_text = ad_dw.describe('evaluate(~'LookUpDisplay(' + ls_obj + ')~', ' + string(i) + ')')elsels_text = ad_dw.describe('evaluate(~'' + ls_obj + '~',' + string(i) + ')') end iflds_saveas.setitem(i, j, ls_text)nextnextlds_saveas.insertrow(1)for i = 1 to lds_sort.rowcount()lds_saveas.setitem(1, i, lds_sort.getitemstring(i, 'ztext'))next//准备数据完毕====================================================//saveas datawindowlb_return = (lds_saveas.saveas(as_file, excel!, false) = 1)lab1:destroy lds_sortdestroy lds_saveasSetPointer(Arrow!)return lb_return支持导出分组带、合计带,并且支持多层嵌套报表导出,基本是所见及所得。

PB数据窗口技巧大全

PB数据窗口技巧大全

PB数据窗口技巧大全PB数据窗口是PowerBuilder语言中的一种常用控件,用于显示和操作数据。

在实际项目开发中,掌握一些PB数据窗口的技巧能够提高开发效率和用户体验。

下面是一些常用的PB数据窗口技巧的详细介绍,包括动态数据源、处理数据更新、格式化数据、控制数据窗口行为等方面。

1. 动态数据源:PB数据窗口支持通过修改SQL语句和参数实现动态查询。

可以通过修改dw_1.sqlsyntax和dw_1.settransobject等属性实现动态数据源切换或过滤。

2. 处理数据更新:PB数据窗口提供了一些方法来处理数据的插入、更新和删除。

可以使用dw_1.insertrow、dw_1.updaterow和dw_1.deleterow等方法来实现数据的增删改操作。

3. 格式化数据:PB数据窗口提供了一些格式化数据的方法,可以通过修改数据窗口列的format属性来实现对数据的格式化。

例如,可以使用dw_1.modify表示列的format属性来自定义数据的显示格式。

4. 排序和过滤数据:PB数据窗口提供了排序和过滤数据的功能。

可以通过修改dw_1.setsort和dw_1.setfilter等方法实现对数据的排序和过滤。

5. 控制数据窗口行为:PB数据窗口提供了一些属性和方法来控制数据窗口的显示效果。

例如,可以使用dw_1.retrieve来重新检索数据,使用dw_1.setitemstatus来设置数据窗口的状态等。

6.多表连接查询:PB数据窗口支持多表连接查询,可以通过在SQL 语句中使用连接符号和条件来实现多表连接查询的功能。

7.数据窗口插入计算列:PB数据窗口支持插入计算列,可以通过在SQL语句中使用函数和表达式来插入计算列实现对数据的计算和处理。

8.数据窗口多级分组:PB数据窗口支持多级分组,可以通过在数据窗口中设置分组列和聚合函数来实现数据的分组和统计。

9.数据窗口嵌套:PB数据窗口支持嵌套,可以在一个数据窗口中插入另一个数据窗口,实现数据的嵌套显示和处理。

将PB数据窗口中的数据导出到EXCEL文件

PB】将PB数据窗口中的数据导出到EXCEL文件我设计中只用过两种方法。

第一种:导出到默认的路径(代码中固定好的)。

核心代码是:long dwcontrol.SaveAsAscii(string filename,[string separatorcharacter(可选项,以该种格式来分隔数据,如果省略则默认为tab,)],)实例如下:if dw_1.saveasascii("C:\缺陷查询结果.xls"," ","")=1 thenmessagebox("提示信息","数据导出成功!! 文件路径为C:\缺陷查询结果.xls!")elsemessagebox("提示信息","数据导出失败!")end if第二种:这种方法要事先在指定路径建立起要导出的EXCEL文件。

下面代码是打开该文件并保存进去。

long numcols,numrows,c,rOLEObject xlapp,xlsubint ret//定义变量numcols=long(dw_1.Object.DataWindow.Column.Count)//设置行号和列号numrows=dw_1.RowCount()//获得行数xlApp=Create OLEObject//创建OLE对象ret=xlApp.ConnectToNewObject("Excel.Sheet")if ret<0 thenmessagebox("连接Excel程序失败!",string(ret))returnend if//连接Excel,并检验返回值xlApp.Application.Workbooks.Open("C:\缺陷查询结果.xls") //打开一个特定的Excel文件xlApp.Application.Visible=true//使该Excel文件可视xlsub=xlApp.Application.ActiveWorkbook.Worksheets[1]//确定第一个工作薄for c=1 to numcolsfor r=1 to numrowsxlsub.cells[r,c]=dw_1.object.data[r,c]nextnext//循环发送数据xlApp.DisConnectObject()Destroy xlApp。

pb,word,表格

竭诚为您提供优质文档/双击可除pb,word,表格篇一:pb数据窗口导出word、excel文档dw2word,dw2xlspb数据窗口数据导出到word,excel,excel可以自定义修改excel文档的列宽对齐方式,字体样式等//dwsave2word调用oleglobaltypegf_exportdata2wordfromfunction_object endtypeforwardprototypesglobalsubroutinegf_exportdata2word(datawindowad_dat awindow)endprototypesglobalsubroutinegf_exportdata2word(datawindowad_dat awindow);stringls_filepathls_filepath=gf_getfilesavename()oleobjectoleobjectwordoleobjectword=createoleobject//连接wordifoleobjectword.connecttonewobject("word.applicatio n")0thenmessagebox("提示","ole连接错误!") returnendifoleobjectword.visible=false//word文档在操作数据过程中是否可见longcol_colnum,col_rownumconstantlongwdtablebehavior=1constantlongwdautoFitFixed=0constantlongwdcell=12stringstr_value//得到数据窗口数据的列数和行数(行数应该是数据行数+1)col_colnum=long(ad_datawindow.object.datawindow.col umn.count)col_rownum=ad_datawindow.rowcount()+1 //先在word文档中画好表格setpointer(hourglass!)oleobjectword.documents.addoleobjectword.activedocument.tables.add(oleobjectwo rd.selection.Range,#+string(i)+".name")+"_t"str_val ue=ad_datawindow.describe(ls_colname+".text") oleobjectword.selection.typetext(str_value)oleobjectword.selection.moveRight(wdcell)nextad_datawindow.setRedraw(false)oleobjectword.selection.moveleft(wdcell)setpointer(hourglass!)fori=2tocol_rownumforj=1tocol_colnumad_datawindow.scrolltorow(i-1)ad_datawindow.setcolumn(j)str_value=ad_datawindow.getitemstring(i-1,j)ifisnull(str_value)thenstr_value=endifoleobjectword.selection.moveRight(wdcell)oleobjectword.selection.typetext(str_value)nextnextad_datawindow.setredraw(true)constantlongwdFormatdocument=0//保存新建的文档oleobjectword.activedocument.saveas(ls_filepath,0,f alse,"",true,"",false,false,false,false,false) booleanlb_existlb_exist=Fileexists(ls_filepath)iflb_existthenmessagebox("提示","数据已经保存到"+ls_filepath) endif//断开ole连接oleobjectword.disconnectobject()destroyoleobjectwordendsubroutine//dwsave2xls调用oleglobaltypegf_dwsavetoexcelfromfunction_objectendtypeforwardprototypesglobalfunctionintegergf_dwsavetoexcel(datawindowadw) endprototypesglobalfunctionintegergf_dwsavetoexcel(datawindowadw );stringxlsname,namedintegervaluestringcol_del,first_delvalue=getFilesavename("另存",xlsname,named,"xls","xlsFiles(*.xls),*.xls")ifval ue=1thenadw.saveas(xlsname,excel!,tRue)elsereturn2endifconstantintegerpplayoutblank=12oleobjectole_objectole_object=cReateoleobjectintegerli_retli_ret=ole_object.connecttoobject("","excel.applica tion")iFli_ret0thenli_ret=ole_object.connecttonewobject("excel.applica tion")iFli_ret0thenmessagebox("ole错误","ole无法连接!~r~n错号:"+string(li_ret))Return0endiFole_object.visible=FalseendiFpointeroldpointeroldpointer=setpointer(hourglass!)ole_object.workbooks.open(xlsname)ole_object.worksheets[1].activatelongcolumncount,rowscountcolumncount=long(adw.object.datawindow.column.count )rowscount=adw.rowcount()+1stringls_colname[],ls_valueintegeri,jlonghandle为误handle=openchannel("excel",xlsname)//将列名转化为中文名称,即标题头名称forj=1tocolumncountls_colname[j]=adw.describe("#"+string(j)+".name")ls_value=adw.describe(ls_colname[j]+"_t"+".text")//ole_object.activesheet.cells[1,j].value=ls_value 开始的方法setRemote("R1c"+stRing(j),ls_value,handle)nextdatawindowchildldw_childlongll_foundForj=1tocolumncount//col_del标识将要删除不可见的列ifadw.describe("#"+string(j)+".visible")="0"then iFinteger(j) //当列小于26时,excel中用a-z表示列号first_del=char(integer(j)+64)else//大于26,小于等于52列时,aa-az,大于52列时可能性不大未做考虑first_del="a"+char(integer(j)+38) endifcol_del=col_del+first_del+":"+first_del+","continueendif//当列可见且为下拉数据窗口时,数据值转化为显示值ifadw.describe("#"+string(j)+".edit.style")=dddwthe nadw.getchild(ls_colname[j],ldw_child)fori=1torowscount-1//"dm","dmyy"是我通常用下拉数据子窗口的值以及显示值//更通用的方法是用dddw.datacolumn,dddw.displaycolumn得到ll_found=ldw_child.Find("dm"+"="+adw.getitemstring( i,j)+"",1,ldw_child.Rowcount())ifll_found>0thensetRemote("R"+stRing(i+1)+"c"+stRing(j),ldw_child.g etitemstring(ll_found,"dmyy"),handle)endif//另外一种方法,数据量大时比现用方法速度慢//setRemote("R"+stRing(i+1)+"c"+stRing(j),adw.descr ibe("evaluate(lookupdisplay(#"+string(j)+"),"+string(i)+")"),handle)nextendifnextclosechannel(handle)ifcol_delthencol_del=leFt(col_del,len(col_del)-2)//删除不可见列ole_object.activesheet.range(col_del).delete endifsetpointer(oldpointer)ole_object.activeworkbook.save()ole_object.application.quit()ole_object.disconnectobject()destroyole_objectReturn1endfunctionstringls_assize,namedintli_value,li_rt,li_rc,li_rt1//li_value=gf_dwsavetoexcel(dw_detail)//ifdw_detail.rowcount()setpointer(hourglass!)li_value=getfilesavename("saveFile",ls_assize,named ,"excel","excelfiles(*.xls),*.xls,"+stringls_filepa thls_filepath=gf_getfilesavename()oleobjectoleobjectwordoleobjectword=createoleobject//连接wordifoleobjectword.connecttonewobject("word.applicatio n")0thenmessagebox("提示","ole连接错误!")returnendifoleobjectword.visible=false//word文档在操作数据过程中是否可见longcol_colnum,col_rownumconstantlongwdtablebehavior=1constantlongwdautoFitFixed=0constantlongwdcell=12stringstr_value//得到数据窗口数据的列数和行数(行数应该是数据行数+1)col_colnum=long(ad_datawindow.object.datawindow.column.count)col_rownum=ad_datawindow.rowcount()+1//先在word文档中画好表格setpointer(hourglass!)oleobjectword.documents.addoleobjectword.activedocument.tables.add(oleobjectword.selection.Range,#+string(i)+".name")+"_t"strvalue=ad_datawindow.describe(ls_colname+".text") oleobjectword.selection.typetext(str_value)oleobjectword.selection.moveRight(wdcell)nextad_datawindow.setRedraw(false)oleobjectword.selection.moveleft(wdcell)setpointer(hourglass!)fori=2tocol_rownumforj=1tocol_colnumad_datawindow.scrolltorow(i-1)ad_datawindow.setcolumn(j)1121。

PB操作Excel详解

run("notpad.exe") ////pb 运行记事本run("calc.exe") ////pb运行计算器记住:当我们用PB导出数据到EXCEL时,不管是用Saveas 还是clipboard 它输出的数据是定义了字段类型的列的数据,也就是说,不管列是可见还是不可见,只要该列定义了列属性,在查询时主缓冲区中该列有数据,则就会导出出来~用方法得到列名或其他属性也是一样的~及时隐藏了也可以得到当中间的某列给隐藏时,下次打开后它会显示在末尾的位置,但是用Saveas输出数据时,不管它是否隐藏,是否改变了位置,它仍可输出数据而且位置还是不变的~也就是说没有改变数据窗口对象的源,数据窗口对象上显示的列位置只会影响我们在程序界面上看到的位置,而不会影响它在后台存储的实际位置。

但是这样会改变界面显示的位置,记住,没有改变源如何用PB程序在excel画表格边框线,如何改变文字大小1.创建Excel对象eole=CREATEOBJECT(′Excel.application′)2.添加新工作簿eole.Workbooks.add3.设置第3个工作表为激活工作表eole.Worksheets(″sheet3″).Activate4.打开指定工作簿eole.Workbooks.Open(″c:\temp\ll.xls″)5.显示Excel窗口eole.visible=.t.6.更改Excel标题栏eole.Caption=″VFP应用程序调用Microsoft Excel″7.给单元格赋值eole.cells(1,4).value=XM(XM为数据库字段名)8.设置指定列的宽度(单位:字符个数)eole.ActiveSheet.Columns(1).ColumnWidth=59.设置指定行的高度(单位:磅)eole.ActiveSheet.Rows(1).RowHeight=1/0.035(设定行高为1厘米,1磅=0.035厘米)10.在第18行之前插入分页符eole.Worksheets(″Sheet1″).Rows(18).PageBreak=111.在第4列之前删除分页符eole.ActiveSheet.Columns(4).PageBreak=012.指定边框线宽度(Borders参数如下)ole.ActiveSheet.Range(″b3:d3″).Borders(2).Weight=313.设置四个边框线条的类型eole.ActiveSheet.Range(″b3:d3″).Borders(2).LineStyle=1(其中Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/;LineStyle值:1与7-细实、2-细虚、4-点虚、9-双细实线)14.设置页眉eole.ActiveSheet.PageSetup.CenterHeader=″报表1″15.设置页脚eole.ActiveSheet.PageSetup.CenterFooter=″第&P页″16.设置页眉到顶端边距为2厘米eole.ActiveSheet.PageSetup.HeaderMargin=2/0.03517.设置页脚到底边距为3厘米eole.ActiveSheet.PageSetup.FooterMargin=3/0.03518.设置顶边距为2厘米eole.ActiveSheet.PageSetup.TopMargin=2/0.03519.设置底边距为4厘米eole.ActiveSheet.PageSetup.BottomMargin=4/0.03520.设置左边距为2厘米veole.ActiveSheet.PageSetup.LeftMargin=2/0.03521.设置右边距为2厘米eole.ActiveSheet.PageSetup.RightMargin=2/0.03522.设置页面水平居中eole.ActiveSheet.PageSetup.CenterHorizontally=.t.23.设置页面垂直居中eole.ActiveSheet.PageSetup.CenterVertically=.t.24.设置页面纸张大小(1-窄行8511 39-宽行1411) eole.ActiveSheet.PageSetup.PaperSize=125.打印单元格网线eole.ActiveSheet.PageSetup.PrintGridlines=.t.26.拷贝整个工作表edRange.Copy27.拷贝指定区域eole.ActiveSheet.Range(″A1:E2″).Copy28.粘贴eole.WorkSheet(″Sheet2″).Range(″A1″).PasteSpecial 29.在第2行之前插入一行eole.ActiveSheet.Rows(2).Insert30.在第2列之前插入一列eole.ActiveSheet.Columns(2).Insert31.设置字体eole.ActiveSheet.Cells(2,1)=″黑体″32.设置字体大小eole.ActiveSheet.Cells(1,1).Font.Size=2533.设置字体为斜体eole.ActiveSheet.Cells(1,1).Font.Italic=.t.34.设置整列字体为粗体eole.ActiveSheet.Columns(1).Font.Bold=.t.35.清除单元格公式eole.ActiveSheet.Cells(1,4).ClearContents36.打印预览工作表eole.ActiveSheet.PrintPreview37.打印输出工作表eole.ActiveSheet.PrintOut38.工作表另为eole.ActiveWorkbook.SaveAs(″c:\temp\22.xls″)39.放弃存盘eole.ActiveWorkbook.saved=.t.40.关闭工作簿eole.Workbooks.close41.退出Exceleole.quit先把标题放到剪贴板上,再PASTE()到EXCEL中,代码如下:::clipboard(ls_value)ao_object.range(ls_col+string(1)+":"+ls_col+string(1)).select()ao_object.activesheet.Paste()/*************************************************************下面的函数f_excel_hb,可以实现“将工作簿filename_s中的工作表sheetname_s以新的工作表名称sheetname_t,复制到工作簿filename_t的最后”1.public function boolean f_excel_hb (string filename_s, string filename_t, string sheetname_s, string sheetname_t);2.//==========================================================3.// 合并两个工作簿中的某个工作表4.//==========================================================5.// 作者:yyoinge 2011-10-12 18:006.//==========================================================7.// 将工作簿filename_s中的工作表sheetname_s以新的8.// 工作表名称sheetname_t,复制到工作簿filename_t的最后9.//==========================================================10.if not fileexists(filename_s) then11. messagebox('','工作簿【' + filename_s + '】(源)不存在')12.return false13.end if14.if not fileexists(filename_t) then15. messagebox('','工作簿【' + filename_t + '】(目标)不存在')16.return false17.end if18.long ll_val19.//声明ole对象20.oleobject ole_object_s21.//创建ole对象22.ole_object_s=create oleobject23.//连接到excel24.ll_val = ole_object_s.connecttonewobject("excel.application")25.if ll_val <> 0 then26. messagebox('','ole无法连接Excel!')27.goto error28.end if29.//打开源和目标工作簿30.ole_object_s.workbooks.open(filename_s)31.ole_object_s.workbooks.open(filename_t)32.string ls_t33.ls_t = filename_t34.filename_s = of_splitpath(filename_s, 2)35.filename_t = of_splitpath(filename_t, 2)36.//隐藏excel37.ole_object_s.visible = false38.ole_object_s.displayalerts = false39.int n,t40.int li41.boolean isexists=false42.oleobject lworksheet43.//判断源工作簿中的工作表是否存在44.try45. lworksheet = ole_object_s.Workbooks(filename_s).sheets(sheetname_s)46. isexists = true47.catch( oleruntimeerror er)48. isexists = false49.end try50.if isexists=false then51. messagebox('','工作簿【' + filename_s + '】中工作表不存在工作表[' + sheetname_s + ']')52.goto error53.end if54.//当目标工作簿中存在sheet名为sheetname_t的工作表时,为sheetname_t增加后缀(1),然后再重复进行判断,直到表名不存在55.isexists = true56.do while isexists57.try58. lworksheet = ole_object_s.Workbooks(filename_t).sheets(sheetname_t)59. isexists = true60. sheetname_t += '(1)'61.catch( oleruntimeerror er1)62. isexists = false63. end try64.loop65.//进行工作表合并(移到目标工作簿的最后)66.//int li67.setnull(li)68.ole_object_s.workbooks(filename_s).Sheets(sheetname_s).copy(li, ole_object_s.workbooks(filename_t).Sheets(long(ole_object_s.workbooks(filename_t).Sheets.count)))69.//重命名工作表70.ole_object_s.workbooks(filename_t).sheets(long(ole_object_s.workbooks(filename_t).Sheets.count)).name = sheetname_t71.//保存目标工作簿72.isexists = true73.//ole_object_s.visible = true74.//ole_object_s.displayalerts = true75.//messagebox('', '')76.try77. ole_object_s.workbooks(filename_t).save()78.catch( oleruntimeerror er2)79. messagebox('提示', '无法保存工作簿【' + filename_t + '】')80. isexists = false81.end try82.if not isexists then goto error83.//关闭工作簿84.ole_object_s.workbooks(filename_s).close85.ole_object_s.workbooks(filename_t).close86.//退出excel87.ole_object_s.workbooks.close88.ole_object_s.Application.quit();89.//断开连接90.ole_object_s.disconnectobject();91.//注销ole对象92.destroy ole_object_s;93.return true94.error:95.ole_object_s.workbooks(filename_s).close96.ole_object_s.workbooks(filename_t).close97.ole_object_s.workbooks.close98.ole_object_s.Application.quit();99.ole_object_s.disconnectobject();100.destroy ole_object_s;101.return false102.103.104.end function/**********************************************************//*函数名称:uf_dwsaveas_excel功能:将数据窗口数据导出EXCEL文件,并将EXCEL文件默认英文标题替换成中文。

将PB数据窗口数据导出到EXCEL模版

将PB数据窗品导出到EXCEL模版一、建立通信OLEObject ExcelServerInteger li_excelOK,li_rcString ls_path, ls_file,ls_modelExcelServer = CREATE OLEObjectli_ExcelOK = ExcelServer.ConnectToNewObject( "excel.application" )二、输入新文件名li_rc = GetFileSaveName ( "输入新的文件名", &ls_path, ls_file, "XLS", &"XLS Files (*.XLS),*.XLS" , "C:\My Documents", &32770)三、判断文件是否存在If FileExists (ls_path ) ThenFileDelete(ls_path)END IF四、检查给定的文件路径是否可以写入li_rc=FileOpen(ls_path,StreamMode!,Write!,LockWrite!,Replace!)FileClose(li_rc)filedelete(ls_path)五、获到模版文件if FileExists (ls_model ) thenli_rc = FileCopy (ls_model , ls_path, true)if li_rc = 1 thenExcelServer.Workbooks.Open(ls_path)elseExcelServer.workbooks.addExcelServer.Workbooks(1).SaveAs(ls_path)ExcelServer.Workbooks.Open(ls_path)end ifend if六、写入数据窗品数据ExcelServer.application.Sheets(“sheet1”).SelectExcelServer.ActiveSheet.Cells(2,1).value = '制单编号'七、保存EXCEL数据//关闭警告消息对话框,防止退出Excel 时提示ExcelServer.Application.DisplayAlerts = False//保存数据ExcelServer.Application.SaveWorkspace()if f_messagebox('','已成功导出到EXCEL,是否要打开该文件:',2) = 1 then ExcelServer.Application.Visible = trueelseExcelServer.Application.Visible = falseExcelServer.quit()end ifExcelServer.disconnectobject()destroy excelserver。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档