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 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横版;