PB11:DW数据窗口导出xlsx文件
本文章导出依据外部DLL文件,经测试导出满足实际需求,特做知识点留存,具体内容如下:
一、采用的Dw2Excel.dll文件见下述内容
以上是对应版本的DLL文件,PB10代表10以上的版本;
官方demo:
二、具体实例内容如下:
2.1实现支出凭单的打印,该DLL融入OutCSV程序中
引入代码如下:
//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 具体软件操作界面
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 If2.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 If2.5 上述代码使用的导出函数含义如下:
对象实例.方法(数据窗口数组,文件名),该方法将导出多个sheet标签页;
lnv_excel.dw2excel(lds, "支出凭单(A4竖版).xlsx")
因A4需要一页打印多个单据,一起输出又会牵扯跨页布局混乱,特按每页指定个数输出,打印时选择工作簿打印即可;
对象实例.方法(数据窗口,文件名),该方法将导出一个sheet标签页;
lnv_excel.dw2excel(dw_1, "支出凭单(A5横版).xlsx")
上述适合一页仅打印一个单据,建议选择A5横版;


