|
@@ -3,6 +3,8 @@
|
|
|
*/
|
|
|
var JV = require('../rpt_component/Jpc_ValueDefine');
|
|
|
var fs = require('fs');
|
|
|
+var jpcCmnHelper = require('../rpt_component/helper/Jpc_Helper_Common');
|
|
|
+var DPI = jpcCmnHelper.getScreenDPI()[0];
|
|
|
const dftHeadXml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
|
|
|
|
|
|
function writeContentTypes(sheets) {
|
|
@@ -134,55 +136,135 @@ function writeSheets(pageData){
|
|
|
//
|
|
|
}
|
|
|
}
|
|
|
-function writeSheet(sheetData, sharedStrList){
|
|
|
- var rst = [], x = [0], y = [0], headerStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
|
+function writeSheet(sheetData, sharedStrList, styleList){
|
|
|
+ var rst = [], xPos = [0], yPos = [0], headerStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
|
private_pre_analyze_pos = function(){
|
|
|
var cell, pos;
|
|
|
+ sheetData.cells.sort(function(cell1, cell2) {
|
|
|
+ var rst = 0;
|
|
|
+ if (cell1[JV.PROP_AREA][JV.PROP_TOP] > cell2[JV.PROP_AREA][JV.PROP_TOP]) {
|
|
|
+ rst = 1;
|
|
|
+ } else if (cell1[JV.PROP_AREA][JV.PROP_TOP] < cell2[JV.PROP_AREA][JV.PROP_TOP]) {
|
|
|
+ rst = -1;
|
|
|
+ } else {
|
|
|
+ if (cell1[JV.PROP_AREA][JV.PROP_LEFT] > cell2[JV.PROP_AREA][JV.PROP_LEFT]) {
|
|
|
+ rst = 1;
|
|
|
+ } else if (cell1[JV.PROP_AREA][JV.PROP_LEFT] < cell2[JV.PROP_AREA][JV.PROP_LEFT]) {
|
|
|
+ rst = -1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
for (var i = 0; i < sheetData.cells.length; i++) {
|
|
|
cell = sheetData.cells[i];
|
|
|
pos = cell[JV.PROP_AREA][JV.PROP_LEFT];
|
|
|
- if (x.indexOf(pos) < 0) x.push(pos);
|
|
|
+ if (xPos.indexOf(pos) < 0) xPos.push(pos);
|
|
|
pos = cell[JV.PROP_AREA][JV.PROP_RIGHT];
|
|
|
- if (x.indexOf(pos) < 0) x.push(pos);
|
|
|
+ if (xPos.indexOf(pos) < 0) xPos.push(pos);
|
|
|
pos = cell[JV.PROP_AREA][JV.PROP_TOP];
|
|
|
- if (y.indexOf(pos) < 0) y.push(pos);
|
|
|
+ if (yPos.indexOf(pos) < 0) yPos.push(pos);
|
|
|
pos = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
|
|
|
- if (y.indexOf(pos) < 0) y.push(pos);
|
|
|
+ if (yPos.indexOf(pos) < 0) yPos.push(pos);
|
|
|
}
|
|
|
- x.sort();
|
|
|
- y.sort();
|
|
|
+ xPos.sort();
|
|
|
+ yPos.sort();
|
|
|
};
|
|
|
private_getCellIdxStr = function(idx){
|
|
|
- var rst = 'A', prefix = '', tmpIdx = idx;
|
|
|
- if (tmpIdx > 26) {
|
|
|
- var ti = Math.floor(tmpIdx / 26), tj = tmpIdx % 26;
|
|
|
- if (ti < 26) {
|
|
|
- //
|
|
|
- } else {
|
|
|
- prefix = ''
|
|
|
- }
|
|
|
- } else {
|
|
|
- //
|
|
|
+ var rst = 'A';
|
|
|
+ if (idx < 26) {
|
|
|
+ rst = headerStr[idx];
|
|
|
+ } else if (idx < 26*26+26) {
|
|
|
+ var ti = Math.floor(idx / 26), tj = idx % 26;
|
|
|
+ rst = headerStr[ti - 1] + headerStr[tj];
|
|
|
+ } else if (idx < 26*26*26+26) {
|
|
|
+ var ti = Math.floor(idx / (26*26)), tj = Math.floor((idx - ti * 26*26) / 26), tk = idx % 26;
|
|
|
+ rst = headerStr[ti - 1] + headerStr[tj-1] + headerStr[tk];
|
|
|
}
|
|
|
- //if (idx < )
|
|
|
+ return rst;
|
|
|
};
|
|
|
- private_getStrIdx = function(val) {
|
|
|
+ private_getSharedStrIdx = function(val) {
|
|
|
+ var rst = sharedStrList.indexOf(val);
|
|
|
+ if (rst < 0) {
|
|
|
+ sharedStrList.push(val);
|
|
|
+ rst = sharedStrList.length - 1;
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+ };
|
|
|
+ private_getStyleIdx = function(cell) {
|
|
|
+ var rst = 1;
|
|
|
//
|
|
|
+ return rst;
|
|
|
+ };
|
|
|
+ private_setCols = function(){
|
|
|
+ rst.push('<cols>');
|
|
|
+ var w = 0;
|
|
|
+ for (var i = 1; i < xPos.length; i++) {
|
|
|
+ w = 1.0 * (xPos[i] - xPos[i - 1]) / DPI;
|
|
|
+ w = Math.round(w * 1000) / 1000;
|
|
|
+ rst.push('<col min="1" max="1" width="' + w + '" customWidth="1"/>');
|
|
|
+ }
|
|
|
+ rst.push('</cols>');
|
|
|
+ };
|
|
|
+ private_setMergedCells = function() {
|
|
|
+ var cell, idxR, idxL, idxT, idxB, cnt = 0;
|
|
|
+ rst.push('<mergeCells count="?">');
|
|
|
+ var startIdx = rst.length - 1;
|
|
|
+ for (var i = 0; i < sheetData.cells.length; i++) {
|
|
|
+ cell = sheetData.cells[i];
|
|
|
+ idxR = xPos.indexOf(cell[JV.PROP_AREA][JV.PROP_RIGHT]);
|
|
|
+ idxL = xPos.indexOf(cell[JV.PROP_AREA][JV.PROP_LEFT]);
|
|
|
+ idxB = yPos.indexOf(cell[JV.PROP_AREA][JV.PROP_BOTTOM]);
|
|
|
+ idxT = yPos.indexOf(cell[JV.PROP_AREA][JV.PROP_TOP]);
|
|
|
+ if (idxR - idxL > 1 || idxB - idxT > 1) {
|
|
|
+ rst.push('<mergeCell ref="' + private_getCellIdxStr(idxL - 1) + idxT + ':' + private_getCellIdxStr(idxR - 2) + (idxB - 1) + '"/>');
|
|
|
+ cnt++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ rst[startIdx] = '<mergeCells count="' + cnt + '">';
|
|
|
+ rst.push('</mergeCells>');
|
|
|
+ };
|
|
|
+ private_setSheetData = function(){
|
|
|
+ rst.push('<sheetData>');
|
|
|
+ var spanX = xPos.length - 1, cellIdx = 0, h = 0, hasMoreCols = true;
|
|
|
+ for (var i = 0; i < yPos.length - 1; i++) {
|
|
|
+ if (i === 0) {
|
|
|
+ h = 1.0 * (yPos[i]) / DPI;
|
|
|
+ } else {
|
|
|
+ h = 1.0 * (yPos[i] - yPos[i - 1]) / DPI;
|
|
|
+ }
|
|
|
+ h = Math.round(h * 1000) / 1000;
|
|
|
+ rst.push('<row r="' + (i+1) + '" spans="1:' + spanX + '" ht="' + h + '" customHeight="1">');
|
|
|
+ //then put the cells of this row
|
|
|
+ var colIdxStr = '';
|
|
|
+ for (var j = 0; j < xPos.length; j++) {
|
|
|
+ colIdxStr = private_getCellIdxStr(j);
|
|
|
+ if (hasMoreCols) {
|
|
|
+ //
|
|
|
+ } else {
|
|
|
+ rst.push('<c r="' + colIdxStr + (i+1) + '" s="1"/>');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ rst.push('</row');
|
|
|
+ }
|
|
|
+ //sheetData.cells.length
|
|
|
+ rst.push('</sheetData>');
|
|
|
};
|
|
|
private_pre_analyze_pos();
|
|
|
rst.push(dftHeadXml + '\r\n');
|
|
|
rst.push('<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">');
|
|
|
- rst.push('<dimension ref="A1:U4332"/>');
|
|
|
- rst.push('');
|
|
|
- rst.push('');
|
|
|
- rst.push('');
|
|
|
- rst.push('');
|
|
|
- rst.push('');
|
|
|
- rst.push('');
|
|
|
- rst.push('');
|
|
|
- rst.push('');
|
|
|
- rst.push('');
|
|
|
- rst.push('');
|
|
|
+ var colStr = private_getCellIdxStr(xPos.length - 2);
|
|
|
+ rst.push('<dimension ref="A1:' + colStr + '' + yPos.length + '"/>');
|
|
|
+ rst.push('<sheetViews><sheetView tabSelected="1" workbookViewId="0">');
|
|
|
+ rst.push('<selection sqref="A1:' + colStr + '1"/>');
|
|
|
+ rst.push('</sheetView></sheetViews>');
|
|
|
+ rst.push('<sheetFormatPr defaultRowHeight="13.5"/>');
|
|
|
+ private_setCols
|
|
|
+ private_setSheetData();
|
|
|
+ private_setMergedCells();
|
|
|
+ rst.push('<phoneticPr fontId="1" type="noConversion"/>');
|
|
|
+ rst.push('<pageMargins left="0.315" right="0.215" top="0.315" bottom="0.315" header="0" footer="0"/>');
|
|
|
+ //rst.push('<pageSetup paperSize="9" fitToWidth="0" fitToHeight="0" orientation="landscape" horizontalDpi="300" verticalDpi="300"/>');
|
|
|
+ rst.push('<headerFooter alignWithMargins="0"/>');
|
|
|
+ rst.push('</worksheet>');
|
|
|
//rst.push('');
|
|
|
return rst;
|
|
|
}
|