|
@@ -346,10 +346,10 @@ function _setupPgBrks(pageData) {
|
|
|
}
|
|
|
for (const page of pageData.items) {
|
|
|
const maxBottomArr = [];
|
|
|
- _insertMaxBottom(page.cells, maxBottomArr);
|
|
|
- _insertMaxBottom(page.signature_cells, maxBottomArr);
|
|
|
- _insertMaxBottom(page.signature_date_cells, maxBottomArr);
|
|
|
- _insertMaxBottom(page.signature_audit_cells, maxBottomArr);
|
|
|
+ _insertMaxBottom(page[JV.PROP_CELLS], maxBottomArr);
|
|
|
+ _insertMaxBottom(page[JV.PROP_SIGNATURE_CELLS], maxBottomArr);
|
|
|
+ _insertMaxBottom(page[JV.PROP_SIGNATURE_DATE_CELLS], maxBottomArr);
|
|
|
+ _insertMaxBottom(page[JV.PROP_SIGNATURE_AUDIT_CELLS], maxBottomArr);
|
|
|
pgBrkIdx += maxBottomArr.length;
|
|
|
pgBrk.push(pgBrkIdx);
|
|
|
}
|
|
@@ -814,8 +814,8 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
|
|
|
rst.push('<mergeCells count="?">');
|
|
|
const startIdx = rst.length - 1;
|
|
|
const self_setMergedCells = function(theData, theYPos, offsetY) {
|
|
|
- for (let i = 0; i < theData.cells.length; i++) {
|
|
|
- const cell = theData.cells[i];
|
|
|
+ for (let i = 0; i < theData[JV.PROP_CELLS].length; i++) {
|
|
|
+ const cell = theData[JV.PROP_CELLS][i];
|
|
|
const idxR = xPos.indexOf(cell[JV.PROP_AREA][JV.PROP_RIGHT]);
|
|
|
const idxL = xPos.indexOf(cell[JV.PROP_AREA][JV.PROP_LEFT]);
|
|
|
const idxB = theYPos.indexOf(cell[JV.PROP_AREA][JV.PROP_BOTTOM]);
|
|
@@ -846,6 +846,37 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
|
|
|
const spanX = xPos.length - 2;
|
|
|
let cellIdx = 0;
|
|
|
let h = 0;
|
|
|
+ const self_create_cell = function(cells, rows, theYPos) {
|
|
|
+ let rowIdx1 = 0;
|
|
|
+ let colIdx1 = 0;
|
|
|
+ let rowIdx2 = 0;
|
|
|
+ let colIdx2 = 0;
|
|
|
+ for (let cIdx = 0; cIdx < cells.length; cIdx++) {
|
|
|
+ const styleIdx = private_getStyleId(cells[cIdx]);
|
|
|
+ rowIdx1 = theYPos.indexOf(cells[cIdx][JV.PROP_AREA][JV.PROP_TOP]);
|
|
|
+ colIdx1 = xPos.indexOf(cells[cIdx][JV.PROP_AREA][JV.PROP_LEFT]);
|
|
|
+ let cellObj = rows[rowIdx1 - 1].items[colIdx1 - 1];
|
|
|
+ cellObj.s = styleIdx;
|
|
|
+ cellObj.isBlank = false;
|
|
|
+ if (!(strUtil.isEmptyString(cells[cIdx][JV.PROP_VALUE]))) {
|
|
|
+ const valIdx = private_getSharedStrIdx(cells[cIdx][JV.PROP_VALUE]);
|
|
|
+ cellObj.v = valIdx;
|
|
|
+ }
|
|
|
+
|
|
|
+ rowIdx2 = theYPos.indexOf(cells[cIdx][JV.PROP_AREA][JV.PROP_BOTTOM]);
|
|
|
+ colIdx2 = xPos.indexOf(cells[cIdx][JV.PROP_AREA][JV.PROP_RIGHT]);
|
|
|
+ if ((rowIdx2 - rowIdx1 > 1) || (colIdx2 - colIdx1 > 1)) {
|
|
|
+ for (let i = 0; i < rowIdx2 - rowIdx1; i++) {
|
|
|
+ for (let j = 0; j < colIdx2 - colIdx1; j++) {
|
|
|
+ if (i === 0 && j === 0) continue;
|
|
|
+ cellObj = rows[rowIdx1 - 1 + i].items[colIdx1 - 1 + j];
|
|
|
+ cellObj.s = styleIdx;
|
|
|
+ cellObj.isBlank = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
const self_setDataEx = function(theShtData, theYPos, rowOffset) {
|
|
|
const rows = [];
|
|
|
// 1. build full set of blank rows/cells
|
|
@@ -867,36 +898,10 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
|
|
|
}
|
|
|
}
|
|
|
// 2. then fill up the cell style-ids and values
|
|
|
- let rowIdx1 = 0;
|
|
|
- let colIdx1 = 0;
|
|
|
- let rowIdx2 = 0;
|
|
|
- let colIdx2 = 0;
|
|
|
- // let colIdxStr = '';
|
|
|
- for (let cIdx = 0; cIdx < theShtData.cells.length; cIdx++) {
|
|
|
- const styleIdx = private_getStyleId(theShtData.cells[cIdx]);
|
|
|
- rowIdx1 = theYPos.indexOf(theShtData.cells[cIdx][JV.PROP_AREA][JV.PROP_TOP]);
|
|
|
- colIdx1 = xPos.indexOf(theShtData.cells[cIdx][JV.PROP_AREA][JV.PROP_LEFT]);
|
|
|
- let cellObj = rows[rowIdx1 - 1].items[colIdx1 - 1];
|
|
|
- cellObj.s = styleIdx;
|
|
|
- cellObj.isBlank = false;
|
|
|
- if (!(strUtil.isEmptyString(theShtData.cells[cIdx][JV.PROP_VALUE]))) {
|
|
|
- const valIdx = private_getSharedStrIdx(theShtData.cells[cIdx][JV.PROP_VALUE]);
|
|
|
- cellObj.v = valIdx;
|
|
|
- }
|
|
|
+ self_create_cell(theShtData[JV.PROP_CELLS], rows, theYPos);
|
|
|
+ self_create_cell(theShtData[JV.PROP_SIGNATURE_DATE_CELLS], rows, theYPos);
|
|
|
+ self_create_cell(theShtData[JV.PROP_SIGNATURE_AUDIT_CELLS], rows, theYPos);
|
|
|
|
|
|
- rowIdx2 = theYPos.indexOf(theShtData.cells[cIdx][JV.PROP_AREA][JV.PROP_BOTTOM]);
|
|
|
- colIdx2 = xPos.indexOf(theShtData.cells[cIdx][JV.PROP_AREA][JV.PROP_RIGHT]);
|
|
|
- if ((rowIdx2 - rowIdx1 > 1) || (colIdx2 - colIdx1 > 1)) {
|
|
|
- for (let i = 0; i < rowIdx2 - rowIdx1; i++) {
|
|
|
- for (let j = 0; j < colIdx2 - colIdx1; j++) {
|
|
|
- if (i === 0 && j === 0) continue;
|
|
|
- cellObj = rows[rowIdx1 - 1 + i].items[colIdx1 - 1 + j];
|
|
|
- cellObj.s = styleIdx;
|
|
|
- cellObj.isBlank = true;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
// 3. then fill up rst
|
|
|
for (let i = 0; i < rows.length; i++) {
|
|
|
rst.push('<row r="' + (i + 1 + rowOffset) + '" spans="1:' + spanX + '" ht="' + rows[i].height + '" customHeight="1">');
|
|
@@ -919,6 +924,11 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
|
|
|
// current sheet data
|
|
|
currentPageMergePos = sheetData[JV.PAGE_SPECIAL_MERGE_POS];
|
|
|
currentMergeBorder = sheetData[JV.PROP_PAGE_MERGE_BORDER];
|
|
|
+ if (hasSignature && sheetData[JV.PROP_SIGNATURE_CELLS] && sheetData[JV.PROP_SIGNATURE_CELLS].length > 0) {
|
|
|
+ // 有签名情况下,还是有必要创建一个dummy cell的(画框用)
|
|
|
+ _createDummyCell(sheetData[JV.PROP_SIGNATURE_CELLS], sheetData);
|
|
|
+ }
|
|
|
+
|
|
|
self_setDataEx(sheetData, yPos, 0);
|
|
|
} else {
|
|
|
// total data in one sheet
|
|
@@ -929,6 +939,10 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
|
|
|
currentMergeBorder = shtItemData[JV.PROP_PAGE_MERGE_BORDER];
|
|
|
const tmpPos = yMultiPos[i];
|
|
|
cellIdx = 0;
|
|
|
+ if (hasSignature && shtItemData[JV.PROP_SIGNATURE_CELLS] && shtItemData[JV.PROP_SIGNATURE_CELLS].length > 0) {
|
|
|
+ // 有签名情况下,还是有必要创建一个dummy cell的(画框用)
|
|
|
+ _createDummyCell(shtItemData[JV.PROP_SIGNATURE_CELLS], shtItemData);
|
|
|
+ }
|
|
|
self_setDataEx(shtItemData, tmpPos, rowOffset);
|
|
|
rowOffset += tmpPos.length - 2;
|
|
|
}
|
|
@@ -1241,21 +1255,6 @@ function createDummySignatureCell(pageData) {
|
|
|
const page = pageData.items[pageIdx];
|
|
|
if (page[JV.PROP_SIGNATURE_CELLS] && page[JV.PROP_SIGNATURE_CELLS].length > 0) {
|
|
|
_createDummyCell(page[JV.PROP_SIGNATURE_CELLS], page);
|
|
|
- // for (const signature of page[JV.PROP_SIGNATURE_CELLS]) {
|
|
|
- // const dummyCell = {
|
|
|
- // font: 'Content',
|
|
|
- // control: 'Default',
|
|
|
- // style: 'Default_None',
|
|
|
- // Value: '',
|
|
|
- // area: { Left: 0, Right: 0, Top: 0, Bottom: 0 }
|
|
|
- // };
|
|
|
- // if (signature.style) dummyCell.style = signature.style;
|
|
|
- // dummyCell[JV.PROP_AREA][JV.PROP_LEFT] = signature[JV.PROP_AREA][JV.PROP_LEFT];
|
|
|
- // dummyCell[JV.PROP_AREA][JV.PROP_RIGHT] = signature[JV.PROP_AREA][JV.PROP_RIGHT];
|
|
|
- // dummyCell[JV.PROP_AREA][JV.PROP_TOP] = signature[JV.PROP_AREA][JV.PROP_TOP];
|
|
|
- // dummyCell[JV.PROP_AREA][JV.PROP_BOTTOM] = signature[JV.PROP_AREA][JV.PROP_BOTTOM];
|
|
|
- // page[JV.PROP_CELLS].push(dummyCell);
|
|
|
- // }
|
|
|
}
|
|
|
if (page[JV.PROP_SIGNATURE_DATE_CELLS] && page[JV.PROP_SIGNATURE_DATE_CELLS].length > 0) {
|
|
|
_createDummyCell(page[JV.PROP_SIGNATURE_DATE_CELLS], page);
|
|
@@ -1375,8 +1374,8 @@ module.exports = {
|
|
|
resetDummuySignature(pageData, thisRoleRel); // 把草图转换一下roleRel
|
|
|
// console.log(thisRoleRel);
|
|
|
|
|
|
- const hasSignature = false; // 暂时不支持电子签名、草图导出excel
|
|
|
- // const hasSignature = _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, thisRoleRel, signSheetIdxArr); // 因草图的关系,thisRoleRel是否为null就不是充要的条件
|
|
|
+ // const hasSignature = false; // 暂时不支持电子签名、草图导出excel
|
|
|
+ const hasSignature = _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, thisRoleRel, signSheetIdxArr); // 因草图的关系,thisRoleRel是否为null就不是充要的条件
|
|
|
// console.log('signKeyArr');
|
|
|
// console.log(signKeyArr);
|
|
|
// console.log('signPathArr');
|
|
@@ -1604,8 +1603,8 @@ module.exports = {
|
|
|
mergeBand[JV.PROP_BOTTOM].push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND][JV.PROP_BOTTOM] + offsetY);
|
|
|
}
|
|
|
// 1.2.1 重新设置普通cells的Top Bottom坐标
|
|
|
- for (const cell of pageDataArray[i].items[j].cells) {
|
|
|
- // for (let k = 0; k < pageDataArray[i].items[j].cells.length; k++) {
|
|
|
+ for (const cell of pageDataArray[i].items[j][JV.PROP_CELLS]) {
|
|
|
+ // for (let k = 0; k < pageDataArray[i].items[j][JV.PROP_CELLS].length; k++) {
|
|
|
if (maxY < cell[JV.PROP_AREA][JV.PROP_BOTTOM]) {
|
|
|
maxY = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
|
|
|
}
|
|
@@ -1616,7 +1615,7 @@ module.exports = {
|
|
|
cell[JV.PROP_AREA][JV.PROP_TOP] += offsetY;
|
|
|
}
|
|
|
// 1.2.2 重新设置电子签名cells的Top Bottom坐标
|
|
|
- for (const cell of pageDataArray[i].items[j].signature_cells) {
|
|
|
+ for (const cell of pageDataArray[i].items[j][JV.PROP_SIGNATURE_CELLS]) {
|
|
|
if (maxY < cell[JV.PROP_AREA][JV.PROP_BOTTOM]) {
|
|
|
maxY = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
|
|
|
}
|
|
@@ -1631,7 +1630,7 @@ module.exports = {
|
|
|
// console.log(cell);
|
|
|
}
|
|
|
// 1.2.3 重新设置电子签名日期cells的Top Bottom坐标
|
|
|
- for (const cell of pageDataArray[i].items[j].signature_date_cells) {
|
|
|
+ for (const cell of pageDataArray[i].items[j][JV.PROP_SIGNATURE_DATE_CELLS]) {
|
|
|
if (maxY < cell[JV.PROP_AREA][JV.PROP_BOTTOM]) {
|
|
|
maxY = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
|
|
|
}
|