|
@@ -9,6 +9,7 @@ let jpcCmnHelper = require('../rpt_component/helper/jpc_helper_common');
|
|
let DPI = jpcCmnHelper.getScreenDPI()[0];
|
|
let DPI = jpcCmnHelper.getScreenDPI()[0];
|
|
let fsUtil = require('../../../public/fsUtil');
|
|
let fsUtil = require('../../../public/fsUtil');
|
|
const dftHeadXml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
|
|
const dftHeadXml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
|
|
|
|
+const uuidV1 = require('uuid/v1');
|
|
|
|
|
|
function writeContentTypes(sheets, isSinglePage) {
|
|
function writeContentTypes(sheets, isSinglePage) {
|
|
let rst = [];
|
|
let rst = [];
|
|
@@ -157,6 +158,9 @@ function writeStyles(stylesObj){
|
|
if (strUtil.convertStrToBoolean(font[JV.FONT_PROPS[3]])) {
|
|
if (strUtil.convertStrToBoolean(font[JV.FONT_PROPS[3]])) {
|
|
rst.push('<b/>');
|
|
rst.push('<b/>');
|
|
}
|
|
}
|
|
|
|
+ if (strUtil.convertStrToBoolean(font[JV.FONT_PROPS[4]])) {
|
|
|
|
+ rst.push('<i/>');
|
|
|
|
+ }
|
|
if (strUtil.convertStrToBoolean(font[JV.FONT_PROPS[5]])) {
|
|
if (strUtil.convertStrToBoolean(font[JV.FONT_PROPS[5]])) {
|
|
rst.push('<u/>');
|
|
rst.push('<u/>');
|
|
}
|
|
}
|
|
@@ -342,7 +346,8 @@ function writeSheets(pageData, paperSize, sharedStrList, stylesObj, isSinglePage
|
|
return rst;
|
|
return rst;
|
|
}
|
|
}
|
|
function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, appointedMergeBand){
|
|
function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, appointedMergeBand){
|
|
- let rst = [], xPos = [], yPos = [], yMultiPos = [], headerStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
|
|
|
|
+ let rst = [], xPos = [], yPos = [], yMultiPos = [], currentMergeBorder = null,
|
|
|
|
+ headerStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
let currentPageMergePos = null; //在 JV.PAGING_OPTION_INFINITY 场合应用
|
|
let currentPageMergePos = null; //在 JV.PAGING_OPTION_INFINITY 场合应用
|
|
let private_pre_analyze_pos = function(){
|
|
let private_pre_analyze_pos = function(){
|
|
let cell, pos;
|
|
let cell, pos;
|
|
@@ -443,7 +448,8 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
|
|
if (sheetFont) {
|
|
if (sheetFont) {
|
|
// if (font[JV.FONT_PROPS[0]] === sheetFont[JV.FONT_PROPS[0]] && font.size === Math.round(sheetFont[JV.FONT_PROPS[1]] * 3 / 4)
|
|
// if (font[JV.FONT_PROPS[0]] === sheetFont[JV.FONT_PROPS[0]] && font.size === Math.round(sheetFont[JV.FONT_PROPS[1]] * 3 / 4)
|
|
if (font[JV.FONT_PROPS[0]] === sheetFont[JV.FONT_PROPS[0]] && font.size === Math.floor(sheetFont[JV.FONT_PROPS[1]] * 3 / 4)
|
|
if (font[JV.FONT_PROPS[0]] === sheetFont[JV.FONT_PROPS[0]] && font.size === Math.floor(sheetFont[JV.FONT_PROPS[1]] * 3 / 4)
|
|
- && font[JV.FONT_PROPS[3]] === sheetFont[JV.FONT_PROPS[3]] && font[JV.FONT_PROPS[5]] === sheetFont[JV.FONT_PROPS[5]]) {
|
|
|
|
|
|
+ && font[JV.FONT_PROPS[3]] === sheetFont[JV.FONT_PROPS[3]] && font[JV.FONT_PROPS[4]] === sheetFont[JV.FONT_PROPS[4]]
|
|
|
|
+ && font[JV.FONT_PROPS[5]] === sheetFont[JV.FONT_PROPS[5]] ) {
|
|
hasFont = true;
|
|
hasFont = true;
|
|
rst = i;
|
|
rst = i;
|
|
break;
|
|
break;
|
|
@@ -460,6 +466,7 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
|
|
font.charset = 134;
|
|
font.charset = 134;
|
|
font.colorIdx = "8";
|
|
font.colorIdx = "8";
|
|
font[JV.FONT_PROPS[3]] = sheetFont[JV.FONT_PROPS[3]]; //font bold
|
|
font[JV.FONT_PROPS[3]] = sheetFont[JV.FONT_PROPS[3]]; //font bold
|
|
|
|
+ font[JV.FONT_PROPS[4]] = sheetFont[JV.FONT_PROPS[4]]; //font italic
|
|
font[JV.FONT_PROPS[5]] = sheetFont[JV.FONT_PROPS[5]]; //font underline
|
|
font[JV.FONT_PROPS[5]] = sheetFont[JV.FONT_PROPS[5]]; //font underline
|
|
stylesObj.fonts.push(font);
|
|
stylesObj.fonts.push(font);
|
|
rst = stylesObj.fonts.length - 1;
|
|
rst = stylesObj.fonts.length - 1;
|
|
@@ -502,7 +509,8 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
|
|
};
|
|
};
|
|
let private_chkAndGetMergeLine = function(cell, sheetBorder, borderStr, needFurtherChk) {
|
|
let private_chkAndGetMergeLine = function(cell, sheetBorder, borderStr, needFurtherChk) {
|
|
let rst = 0,
|
|
let rst = 0,
|
|
- mergeBorder = (sheetData)?sheetData[JV.PROP_PAGE_MERGE_BORDER]:pageData[JV.BAND_PROP_MERGE_BAND],
|
|
|
|
|
|
+ // mergeBorder = (sheetData)?sheetData[JV.PROP_PAGE_MERGE_BORDER]:pageData[JV.BAND_PROP_MERGE_BAND],
|
|
|
|
+ mergeBorder = currentMergeBorder,
|
|
mergeBand = pageData[JV.BAND_PROP_MERGE_BAND]
|
|
mergeBand = pageData[JV.BAND_PROP_MERGE_BAND]
|
|
;
|
|
;
|
|
if (appointedMergeBand !== null) {
|
|
if (appointedMergeBand !== null) {
|
|
@@ -752,6 +760,7 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
|
|
if (sheetData) {
|
|
if (sheetData) {
|
|
//current sheet data
|
|
//current sheet data
|
|
currentPageMergePos = sheetData[JV.PAGE_SPECIAL_MERGE_POS];
|
|
currentPageMergePos = sheetData[JV.PAGE_SPECIAL_MERGE_POS];
|
|
|
|
+ currentMergeBorder = sheetData[JV.PROP_PAGE_MERGE_BORDER];
|
|
self_setDataEx(sheetData, yPos, 0);
|
|
self_setDataEx(sheetData, yPos, 0);
|
|
} else {
|
|
} else {
|
|
//total data in one sheet
|
|
//total data in one sheet
|
|
@@ -759,6 +768,7 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
|
|
for (let i = 0; i < pageData.items.length; i++) {
|
|
for (let i = 0; i < pageData.items.length; i++) {
|
|
let shtItemData = pageData.items[i];
|
|
let shtItemData = pageData.items[i];
|
|
currentPageMergePos = shtItemData[JV.PAGE_SPECIAL_MERGE_POS];
|
|
currentPageMergePos = shtItemData[JV.PAGE_SPECIAL_MERGE_POS];
|
|
|
|
+ currentMergeBorder = shtItemData[JV.PROP_PAGE_MERGE_BORDER];
|
|
let tmpPos = yMultiPos[i];
|
|
let tmpPos = yMultiPos[i];
|
|
cellIdx = 0;
|
|
cellIdx = 0;
|
|
self_setDataEx(shtItemData, tmpPos, cnt);
|
|
self_setDataEx(shtItemData, tmpPos, cnt);
|
|
@@ -818,7 +828,7 @@ function mergeProperties(orgObj, newObj) {
|
|
module.exports = {
|
|
module.exports = {
|
|
exportExcel: function (pageData, paperSize, fName, options, custSheetNames, custSheetMergeBands, callback) {
|
|
exportExcel: function (pageData, paperSize, fName, options, custSheetNames, custSheetMergeBands, callback) {
|
|
let rptOptions = ({singlePage: false, fileName: 'report'});
|
|
let rptOptions = ({singlePage: false, fileName: 'report'});
|
|
- if (options === 'true') {
|
|
|
|
|
|
+ if (options === 'true' || options === true) {
|
|
rptOptions.singlePage = true;
|
|
rptOptions.singlePage = true;
|
|
}
|
|
}
|
|
let isSinglePage = rptOptions.singlePage;
|
|
let isSinglePage = rptOptions.singlePage;
|
|
@@ -891,7 +901,9 @@ module.exports = {
|
|
zip_xl.file(file, data.join(''), {compression: 'DEFLATE'});
|
|
zip_xl.file(file, data.join(''), {compression: 'DEFLATE'});
|
|
|
|
|
|
if (fName) {
|
|
if (fName) {
|
|
- let newName = '' + (new Date()).valueOf();
|
|
|
|
|
|
+ // let newName = '' + (new Date()).valueOf();
|
|
|
|
+ let newName = uuidV1();
|
|
|
|
+
|
|
zip.generateNodeStream({type:'nodebuffer',streamFiles:true})
|
|
zip.generateNodeStream({type:'nodebuffer',streamFiles:true})
|
|
.pipe(fs.createWriteStream(__dirname.slice(0, __dirname.length - 21) + '/tmp/' + newName + '.xlsx'))
|
|
.pipe(fs.createWriteStream(__dirname.slice(0, __dirname.length - 21) + '/tmp/' + newName + '.xlsx'))
|
|
.on('finish', function () {
|
|
.on('finish', function () {
|
|
@@ -931,6 +943,7 @@ module.exports = {
|
|
let offsetY = 0;
|
|
let offsetY = 0;
|
|
let mergeBand = {};
|
|
let mergeBand = {};
|
|
custMergeBands.push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND]);
|
|
custMergeBands.push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND]);
|
|
|
|
+ //备注:不同的报表有可能有不同的边框,如封面表就是无边框的
|
|
mergeBand[JV.PROP_LEFT] = [];
|
|
mergeBand[JV.PROP_LEFT] = [];
|
|
mergeBand[JV.PROP_RIGHT] = [];
|
|
mergeBand[JV.PROP_RIGHT] = [];
|
|
mergeBand[JV.PROP_TOP] = [];
|
|
mergeBand[JV.PROP_TOP] = [];
|
|
@@ -947,6 +960,11 @@ module.exports = {
|
|
mergeBand[JV.PROP_TOP].push(pos);
|
|
mergeBand[JV.PROP_TOP].push(pos);
|
|
pos = pageDataArray[i].items[j][JV.PAGE_SPECIAL_MERGE_POS][JV.PROP_BOTTOM][0] + offsetY;
|
|
pos = pageDataArray[i].items[j][JV.PAGE_SPECIAL_MERGE_POS][JV.PROP_BOTTOM][0] + offsetY;
|
|
mergeBand[JV.PROP_BOTTOM].push(pos);
|
|
mergeBand[JV.PROP_BOTTOM].push(pos);
|
|
|
|
+ } else if (pageDataArray[i].items[j][JV.PROP_PAGE_MERGE_BORDER]) {
|
|
|
|
+ let pos = pageDataArray[i].items[j][JV.PROP_PAGE_MERGE_BORDER][JV.PROP_TOP] + offsetY;
|
|
|
|
+ mergeBand[JV.PROP_TOP].push(pos);
|
|
|
|
+ pos = pageDataArray[i].items[j][JV.PROP_PAGE_MERGE_BORDER][JV.PROP_BOTTOM] + offsetY;
|
|
|
|
+ mergeBand[JV.PROP_BOTTOM].push(pos);
|
|
} else {
|
|
} else {
|
|
mergeBand[JV.PROP_TOP].push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND][JV.PROP_TOP] + offsetY);
|
|
mergeBand[JV.PROP_TOP].push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND][JV.PROP_TOP] + offsetY);
|
|
mergeBand[JV.PROP_BOTTOM].push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND][JV.PROP_BOTTOM] + offsetY);
|
|
mergeBand[JV.PROP_BOTTOM].push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND][JV.PROP_BOTTOM] + offsetY);
|