|
@@ -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);
|