瀏覽代碼

导出excel加分页符

TonyKang 4 年之前
父節點
當前提交
bfcd4c0548
共有 1 個文件被更改,包括 53 次插入4 次删除
  1. 53 4
      modules/reports/util/rpt_excel_util.js

+ 53 - 4
modules/reports/util/rpt_excel_util.js

@@ -310,6 +310,23 @@ function writeSharedString(sharedStrList){
     }
     return rst;
 }
+function _setupPgBrks(pageData) {
+    pageData.pageBreaks = [];
+    let pgBrkIdx = 0;
+    const pgBrk = [];
+    for (const page of pageData.items) {
+        const maxBottomArr = [];
+        for (const cell of page.cells) {
+            if (maxBottomArr.indexOf(cell[JV.PROP_AREA][JV.PROP_BOTTOM]) < 0) {
+                maxBottomArr.push(cell[JV.PROP_AREA][JV.PROP_BOTTOM]);
+            }
+        }
+        pgBrkIdx += maxBottomArr.length;
+        pgBrk.push(pgBrkIdx);
+    }
+    pageData.pageBreaks.push(pgBrk);
+}
+
 function writeSheets(pageData, paperSize, sharedStrList, stylesObj, isSinglePage, custSheetMergeBands){
     let rst = [];
     let private_pushDftFont = function(){
@@ -352,19 +369,19 @@ function writeSheets(pageData, paperSize, sharedStrList, stylesObj, isSinglePage
     private_pushDftFont();
     private_buildFirstDftStyle();
     if (isSinglePage) {
-        rst.push(writeSheet(pageData, null, paperSize, sharedStrList, stylesObj, null, true));
+        rst.push(writeSheet(pageData, null, paperSize, sharedStrList, stylesObj, null, true, -1));
     } else {
         for (let i = 0; i < pageData.items.length; i++) {
             let appointedMergeBand = null;
             if (custSheetMergeBands && custSheetMergeBands.length > i) {
                 appointedMergeBand = custSheetMergeBands[i];
             }
-            rst.push(writeSheet(pageData, pageData.items[i], paperSize, sharedStrList, stylesObj, appointedMergeBand, i === 0));
+            rst.push(writeSheet(pageData, pageData.items[i], paperSize, sharedStrList, stylesObj, appointedMergeBand, i === 0, i));
         }
     }
     return rst;
 }
-function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, appointedMergeBand, isFirstSheet){
+function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, appointedMergeBand, isFirstSheet, pgBrkIdx){
     let rst = [], xPos = [], yPos = [], yMultiPos = [], currentMergeBorder = null,
         headerStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
     let currentPageMergePos = null; //在 JV.PAGING_OPTION_INFINITY 场合应用
@@ -834,6 +851,23 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
     }
     rst.push('<pageSetup ' + pStr + ' fitToWidth="0" fitToHeight="0" orientation="' + orientationStr + '" />');
     rst.push('<headerFooter alignWithMargins="0"/>');
+    //插入分页符---------------------------
+    if (pageData.pageBreaks) {
+        let pgBrks = [];
+        if (sheetData !== null) {
+            pgBrks = pageData.pageBreaks[pgBrkIdx];
+        } else {
+            pgBrks = pageData.pageBreaks[0];
+        }
+        if (pgBrks.length > 1) {
+            rst.push('<rowBreaks count="' + pgBrks.length + '" manualBreakCount="' + pgBrks.length + '" >');
+            for (let pbi = 0; pbi < pgBrks.length; pbi++) {
+                rst.push('<brk id="' + pgBrks[pbi] + '" max="16383" man="1" />');
+            }
+            rst.push('</rowBreaks>');
+        }
+    }
+    //插入分页符结束---------------------------
     rst.push('</worksheet>');
     return rst;
 }
@@ -862,6 +896,9 @@ module.exports = {
         let isSinglePage = rptOptions.singlePage;
         let sheets = [];
         if (isSinglePage) {
+            //加分页符(分页符要在外部处理好)-------------------
+            _setupPgBrks(pageData);
+            //加分页符结束-------------------
             sheets.push({sheetName: '全部页'});
         } else {
             if (custSheetNames && custSheetNames.length === pageData.items.length) {
@@ -981,6 +1018,10 @@ module.exports = {
                 mergeBand[JV.PROP_RIGHT].push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND][JV.PROP_RIGHT]);
                 sheetNames.push(pageDataArray[i][JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
 
+                //加分页符(分页符要在外部处理好)-------------------
+                _setupPgBrks(pageDataArray[i]);
+                //加分页符结束-------------------
+
                 for (let j = 0; j < pageDataArray[i].items.length; j++) {
                     let maxY = 0, minY = 100000;
                     if (pageDataArray[i].items[j][JV.PAGE_SPECIAL_MERGE_POS]) {
@@ -1014,8 +1055,9 @@ module.exports = {
                     }
                 }
             }
-            //2. newPageData的items属性
+            //2. newPageData的items属性及相关分页符
             newPageData.items = [];
+            newPageData.pageBreaks = [];
             for (let i = 0; i < pageDataArray.length; i++) {
                 let pageItem = {};
                 pageItem[JV.PROP_PAGE_SEQ] = i + 1;
@@ -1028,6 +1070,13 @@ module.exports = {
                 newPagePos[i][JV.NODE_PAGE_SIZE] = pageDataArray[i][JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE];
                 pageItem[JV.PAGE_SPECIAL_MERGE_POS] = newPagePos[i];
                 newPageData.items.push(pageItem);
+                //重新分配分页符()------------------
+                if (pageDataArray[i].pageBreaks.length === 1) {
+                    newPageData.pageBreaks.push(pageDataArray[i].pageBreaks[0]);
+                } else {
+                    newPageData.pageBreaks.push([]);
+                }
+                //重新分配分页符结束------------------
             }
             //3. everything is ok, then call me
             me.exportExcel(newPageData, paperSize, fName, 'false', sheetNames, custMergeBands, callback);