当前位置:首页 > 技能相关 > PowerBuilder > 正文内容

PB11:DW数据窗口导出xlsx文件

admin2年前 (2023-06-14)PowerBuilder5750 修订时间:2023-06-17 14:18:30

本文章导出依据外部DLL文件,经测试导出满足实际需求,特做知识点留存,具体内容如下:

一、采用的Dw2Excel.dll文件见下述内容

Dw2Excel dll for pb9.zip

Dw2Excel dll for pb10.zip

以上是对应版本的DLL文件,PB10代表10以上的版本;

官方demo:

Dw2Excel Demo.zip

二、具体实例内容如下:

2.1实现支出凭单的打印,该DLL融入OutCSV程序中

2023-06-17_141723.jpg

引入代码如下:

//dw原样导出到Excel
Function Long DW2Excel(powerobject apos[], String sheetNames[], String filename) System Library "Dw2Excel.dll" Alias For "DW2Excel"
//复合报表导出到不同Sheet
Function Long Report2Excel(DataWindow dw, String filename) System Library "Dw2Excel.dll" Alias For "Report2Excel"
//设置提示条语言
Function Long SetLanguage(string lang) System Library "Dw2Excel.dll" Alias For "SetLanguage"
//设置公司名,既进度条标题
Function Long SetCompanyName(string company) System Library "Dw2Excel.dll" Alias For "SetCompanyName"
//设置导出后是否打开Excel
Function Long SetOpenExcelFile(boolean flag) System Library "Dw2Excel.dll" Alias For "SetOpenExcelFile"
//设置是否显示网格线
Function Long SetShowGridLines(boolean flag) System Library "Dw2Excel.dll" Alias For "SetShowGridLines"
//设置是否冻结标题栏
Function Long SetFreezeTitles(boolean flag) System Library "Dw2Excel.dll" Alias For "SetFreezeTitles"
//设置是否输出背景色
Function Long SetWriteBkColor(boolean flag) System Library "Dw2Excel.dll" Alias For "SetWriteBkColor"
//设置是否忽略文件已存在
Function Long SetIgnoreExists(boolean flag) System Library "Dw2Excel.dll" Alias For "SetIgnoreExists"
//设置是否显示进度窗口
Function Long SetShowProgress(boolean flag) System Library "Dw2Excel.dll" Alias For "SetShowProgress"
//设置起始列为B列
Function Long SetStartColB(boolean flag) System Library "Dw2Excel.dll" Alias For "SetStartColB"

2.2 具体软件操作界面

2023-06-17_141807.jpg

2.3 导出XLSX(A5横版)功能代码

//创建导出对象实例
smart_dw2xl lnv_excel
//设置相关信息
lnv_excel.SetCompanyName("支出凭单到处EXCL文件")
lnv_excel.SetOpenExcelFile(True)
lnv_excel.SetWriteBkColor(True)
lnv_excel.SetStartColB(True)
//统计CPU时间
Long ll_cpu
ll_cpu = CPU()
//导出文件
Int li_Result
li_Result = lnv_excel.dw2excel(dw_1, "支出凭单(A5横版).xlsx")
//判断是否导出成功
If li_Result = 1 Then
	MessageBox("提示","数据导出成功! 用时 "+String(CPU() - ll_cpu)+" 毫秒")
Else
	MessageBox("提示","数据导出失败!",StopSign!)
End If

2.4 导出XLSX(A4竖版)功能代码

//创建导出对象实例
smart_dw2xl lnv_excel
long ll_i
//设置相关信息
lnv_excel.SetCompanyName("支出凭单到处EXCL文件")
lnv_excel.SetOpenExcelFile(True)
lnv_excel.SetWriteBkColor(True)
lnv_excel.SetStartColB(True)
//创建动态数据窗口Datastore
Datastore lds[]
//判断循环次数,这里以dw_1总数除2向上取整
long ll_count_i
ll_count_i = Ceiling(dw_1.rowcount()/2)
//循环生成xlsx的sheet页内容,每页2张单据
for ll_i = 1 to ll_count_i
          //将Datastore实例化
	 lds[ll_i] = Create Datastore
	 //为datastore分配数据窗口对象
	 lds[ll_i].DataObject = "dw_bxdj_a4xslx"
	 //第一次取1-2数据
	 if ll_i = 1 then
		 dw_1.rowscopy(ll_i,ll_i+1,primary!,lds[ll_i],1, primary!)
	 end if
	 //第2次起取ll_i*2-1到ll_i*2数据
	 if ll_i <> 1 then
		 dw_1.rowscopy(ll_i*2 - 1,ll_i * 2,primary!,lds[ll_i],1, primary!)
	 end if
	 //设置数据窗口缩放比例,这里影响打印结果 
	 lds[ll_i].modify("datawindow.zoom = 76")	
next
//统计CPU时间
Long ll_cpu
ll_cpu = CPU()
//导出文件
Int li_Result
li_Result = lnv_excel.DW2Excel(lds, "支出凭单(A4竖版).xlsx")
//判断是否导出成功
If li_Result = 1 Then
	MessageBox("提示","数据导出成功! ")
Else
	MessageBox("提示","数据导出失败!",StopSign!)
End If

2.5 上述代码使用的导出函数含义如下:

对象实例.方法(数据窗口数组,文件名),该方法将导出多个sheet标签页;

lnv_excel.dw2excel(lds, "支出凭单(A4竖版).xlsx")

因A4需要一页打印多个单据,一起输出又会牵扯跨页布局混乱,特按每页指定个数输出,打印时选择工作簿打印即可;

对象实例.方法(数据窗口,文件名),该方法将导出一个sheet标签页;

lnv_excel.dw2excel(dw_1, "支出凭单(A5横版).xlsx")

上述适合一页仅打印一个单据,建议选择A5横版;

 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/index.php?id=310

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。