|
@@ -229,6 +229,7 @@ function writeSheets(pageData, sharedStrList, stylesObj){
|
|
|
}
|
|
|
function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
|
|
|
var rst = [], xPos = [], yPos = [], headerStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
|
+ var cacheBorderCell = {};
|
|
|
xPos.push(0);
|
|
|
yPos.push(0);
|
|
|
private_pre_analyze_pos = function(){
|
|
@@ -474,61 +475,45 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
|
|
|
rst[startIdx] = '<mergeCells count="' + cnt + '">';
|
|
|
rst.push('</mergeCells>');
|
|
|
};
|
|
|
- private_getMergeBandBorderIdxs = function(leftColIdxStr, rightColIdxStr) {
|
|
|
- var rst = [];
|
|
|
- rst.push(leftColIdxStr);
|
|
|
- rst.push(rightColIdxStr);
|
|
|
- rst.push('' + yPos.indexOf(parseInt(pageData[JV.BAND_PROP_MERGE_BAND][JV.PROP_TOP])));
|
|
|
- rst.push('' + yPos.indexOf(parseInt(pageData[JV.BAND_PROP_MERGE_BAND][JV.PROP_BOTTOM])));
|
|
|
+ private_chkIfNeedCacheCell = function(cell){
|
|
|
+ var rst = false;
|
|
|
+ if (cell[JV.PROP_AREA][JV.PROP_LEFT] == pageData[JV.BAND_PROP_MERGE_BAND][JV.PROP_LEFT] ||
|
|
|
+ cell[JV.PROP_AREA][JV.PROP_RIGHT] == pageData[JV.BAND_PROP_MERGE_BAND][JV.PROP_RIGHT] ||
|
|
|
+ cell[JV.PROP_AREA][JV.PROP_TOP] == pageData[JV.BAND_PROP_MERGE_BAND][JV.PROP_TOP] ||
|
|
|
+ cell[JV.PROP_AREA][JV.PROP_BOTTOM] == pageData[JV.BAND_PROP_MERGE_BAND][JV.PROP_BOTTOM]){
|
|
|
+ if (cell[JV.PROP_AREA][JV.PROP_LEFT] >= pageData[JV.BAND_PROP_MERGE_BAND][JV.PROP_LEFT] &&
|
|
|
+ cell[JV.PROP_AREA][JV.PROP_RIGHT] <= pageData[JV.BAND_PROP_MERGE_BAND][JV.PROP_RIGHT] &&
|
|
|
+ cell[JV.PROP_AREA][JV.PROP_TOP] >= pageData[JV.BAND_PROP_MERGE_BAND][JV.PROP_TOP] &&
|
|
|
+ cell[JV.PROP_AREA][JV.PROP_BOTTOM] <= pageData[JV.BAND_PROP_MERGE_BAND][JV.PROP_BOTTOM]) {
|
|
|
+ rst = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
return rst;
|
|
|
};
|
|
|
- private_chkBorderStyle = function(preStyleId, mergedBorder, yIdx, colIdxStr){
|
|
|
- var rst = preStyleId, preStyle = stylesObj.cellXfs[preStyleId], hasStyle = false, chkBorders = [],
|
|
|
- mergeBorder = pageData[JV.BAND_PROP_MERGE_BAND],
|
|
|
- destStyle = pageData[JV.NODE_STYLE_COLLECTION][mergeBorder[JV.PROP_STYLE][JV.PROP_ID]];
|
|
|
- if (yIdx == mergedBorder[2]) {
|
|
|
- chkBorders.push(JV.PROP_TOP);
|
|
|
- } else if (yIdx == mergedBorder[3]) {
|
|
|
- chkBorders.push(JV.PROP_BOTTOM);
|
|
|
- }
|
|
|
- if (colIdxStr == mergedBorder[0]) {
|
|
|
- chkBorders.push(JV.PROP_LEFT);
|
|
|
- } else if (colIdxStr == mergedBorder[0]) {
|
|
|
- chkBorders.push(JV.PROP_RIGHT);
|
|
|
- }
|
|
|
- if (chkBorders.length > 0) {
|
|
|
- for (var i = 0; i < stylesObj.cellXfs.length; i++) {
|
|
|
- var border = stylesObj.borders[stylesObj.cellXfs[i].borderId];
|
|
|
- var isMatch = true;
|
|
|
- for (var j = 0; j < chkBorders.length; j++) {
|
|
|
- if (border[chkBorders[j]][JV.PROP_LINE_WEIGHT] != destStyle[chkBorders[j]][JV.PROP_LINE_WEIGHT]) {
|
|
|
- isMatch = false;
|
|
|
- break;
|
|
|
+ private_cacheMergeBandBorderIdxs = function() {
|
|
|
+ var cell, idxR, idxL, idxT, idxB;
|
|
|
+ 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) {
|
|
|
+ if (private_chkIfNeedCacheCell(cell)) {
|
|
|
+ for (var xi = idxL; xi < idxR; xi++) {
|
|
|
+ for (var yj = idxT; yj < idxB; yj++) {
|
|
|
+ cacheBorderCell[private_getCellIdxStr(xi - 1) + yj] = cell;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- if (isMatch) {
|
|
|
- hasStyle = true;
|
|
|
- rst = i;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (!hasStyle) {
|
|
|
- var sheetControl = {};
|
|
|
- sheetControl.fontId = preStyle.fontId;
|
|
|
- var border = private_getIniBorder();
|
|
|
- for (var j = 0; j < chkBorders.length; j++) {
|
|
|
- border[chkBorders[j]][JV.PROP_LINE_WEIGHT] = destStyle[chkBorders[j]][JV.PROP_LINE_WEIGHT];
|
|
|
- }
|
|
|
- stylesObj.borders.push(border);
|
|
|
- sheetControl.borderId = stylesObj.borders.length - 1;
|
|
|
-
|
|
|
- for (var i = 0; i < JV.CONTROL_PROPS.length; i++) {
|
|
|
- sheetControl[JV.CONTROL_PROPS[i]] = preStyle[JV.CONTROL_PROPS[i]];
|
|
|
- }
|
|
|
- stylesObj.cellXfs.push(sheetControl);
|
|
|
- rst = stylesObj.cellXfs.length - 1;
|
|
|
}
|
|
|
}
|
|
|
+ };
|
|
|
+ private_getMergedCellStyleId = function(preStyleId, colIdxStr) {
|
|
|
+ var rst = preStyleId;
|
|
|
+ if (cacheBorderCell[colIdxStr]) {
|
|
|
+ rst = private_getStyleId(cacheBorderCell[colIdxStr]);
|
|
|
+ }
|
|
|
return rst;
|
|
|
};
|
|
|
private_setSheetData = function(){
|
|
@@ -536,9 +521,9 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
|
|
|
rst.push('<sheetData>');
|
|
|
var spanX = xPos.length - 2, cellIdx = 0, h = 0,
|
|
|
hasMoreCols = true, nextColIdx = -1,
|
|
|
- nextRowIdx = yPos.indexOf(sheetData.cells[cellIdx][JV.PROP_AREA][JV.PROP_TOP]),
|
|
|
- mergedBorder = private_getMergeBandBorderIdxs('A', private_getCellIdxStr(spanX))
|
|
|
+ nextRowIdx = yPos.indexOf(sheetData.cells[cellIdx][JV.PROP_AREA][JV.PROP_TOP])
|
|
|
;
|
|
|
+ private_cacheMergeBandBorderIdxs();
|
|
|
for (var i = 1; i < yPos.length - 1; i++) {
|
|
|
h = 1.0 * (yPos[i+1] - yPos[i]) / DPI * 25.4 / 0.3612;
|
|
|
h = Math.round(h * 1000) / 1000;
|
|
@@ -591,11 +576,11 @@ function writeSheet(pageData, sheetData, sharedStrList, stylesObj){
|
|
|
hasMoreCols = false;
|
|
|
} else {
|
|
|
//rst.push('<c r="' + colIdxStr + i + '" s="' + preStyleIdx + '"/>');
|
|
|
- rst.push('<c r="' + colIdxStr + i + '" s="' + private_chkBorderStyle(preStyleIdx, mergedBorder, i, colIdxStr) + '"/>');
|
|
|
+ rst.push('<c r="' + colIdxStr + i + '" s="' + private_getMergedCellStyleId(preStyleIdx, colIdxStr + i) + '"/>');
|
|
|
}
|
|
|
} else {
|
|
|
//rst.push('<c r="' + colIdxStr + i + '" s="' + preStyleIdx + '"/>');
|
|
|
- rst.push('<c r="' + colIdxStr + i + '" s="' + private_chkBorderStyle(preStyleIdx, mergedBorder, i, colIdxStr) + '"/>');
|
|
|
+ rst.push('<c r="' + colIdxStr + i + '" s="' + private_getMergedCellStyleId(preStyleIdx, colIdxStr + i) + '"/>');
|
|
|
}
|
|
|
}
|
|
|
rst.push('</row>');
|