Ver código fonte

excel export unit test 02

TonyKang 8 anos atrás
pai
commit
b4b7caf87b
1 arquivos alterados com 120 adições e 7 exclusões
  1. 120 7
      modules/reports/util/rpt_excel_util.js

+ 120 - 7
modules/reports/util/rpt_excel_util.js

@@ -46,7 +46,7 @@ function writeApp(sheets) {
     rst.push('<ScaleCrop>false</ScaleCrop>');
     rst.push('<HeadingPairs>');
     rst.push('<vt:vector size="2" baseType="variant">');
-    rst.push('<vt:variant><vt:lpstr>工作�</vt:lpstr></vt:variant>');
+    rst.push('<vt:variant><vt:lpstr>工作�?</vt:lpstr></vt:variant>');
     rst.push('<vt:variant><vt:i4>' + sheets.length + '</vt:i4></vt:variant>');
     rst.push('</vt:vector>');
     rst.push('</HeadingPairs>');
@@ -125,7 +125,7 @@ function writeTheme(){
     var rst = fs.readFileSync(__dirname + '/excel_base_files/theme1.xml', 'utf8', 'r');
     return rst;
 }
-function writeStyles(styleList){
+function writeStyles(stylesObj){
     //
 }
 function writeSharedString(sharedStrList){
@@ -140,14 +140,14 @@ function writeSharedString(sharedStrList){
     }
     return rst;
 }
-function writeSheets(pageData, sharedStrList, styleList){
+function writeSheets(pageData, sharedStrList, stylesObj){
     var rst = [];
     for (var i = 0; i < pageData.items.length; i++) {
-        rst.push(writeSheet(pageData.items[i], sharedStrList, styleList));
+        rst.push(writeSheet(pageData.items[i], sharedStrList, stylesObj));
     }
     return rst;
 }
-function writeSheet(sheetData, sharedStrList, styleList){
+function writeSheet(sheetData, sharedStrList, stylesObj){
     var rst = [], xPos = [], yPos = [], headerStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
     xPos.push(0);
     yPos.push(0);
@@ -209,9 +209,122 @@ function writeSheet(sheetData, sharedStrList, styleList){
         }
         return rst;
     };
+    private_getFontId = function(cell) {
+        var rst = 0, hasFont = false;
+        if (!(stylesObj.fonts)) {
+            stylesObj.fonts = [];
+            //for (var i = 0; i < sheetData.font_collection)
+        }
+        var sheetFont = sheetData.font_collection[cell.font];
+        for (var i = 0; i < stylesObj.fonts.length; i++) {
+            var font = stylesObj.fonts[i];
+            if (sheetFont) {
+                if (font[JV.FONT_PROPS[0]] === sheetFont[JV.FONT_PROPS[0]] && font.size === Math.round(sheetFont[JV.FONT_PROPS[1]] * 3 / 4)) {
+                    hasFont = true;
+                    rst = i;
+                    break;
+                }
+            } else {
+                break;
+            }
+        }
+        if (!hasFont) {
+            var font = {};
+            font[JV.FONT_PROPS[0]] = sheetFont[JV.FONT_PROPS[0]];
+            font.size = Math.round(sheetFont[JV.FONT_PROPS[1]] * 3 / 4);
+            font.charset = 134;
+            font.scheme = "minor";
+            stylesObj.fonts.push(font);
+            rst = stylesObj.fonts.length - 1;
+        }
+        return rst;
+    };
+    private_checkBorder = function(border, sheetBorder) {
+        var rst = true, borderLineWidths = [], sheetBorderLineWidths = [];
+        borderLineWidths.push(border[JV.PROP_LEFT][JV.PROP_LINE_WEIGHT]);
+        borderLineWidths.push(border[JV.PROP_RIGHT][JV.PROP_LINE_WEIGHT]);
+        borderLineWidths.push(border[JV.PROP_TOP][JV.PROP_LINE_WEIGHT]);
+        borderLineWidths.push(border[JV.PROP_BOTTOM][JV.PROP_LINE_WEIGHT]);
+        if (sheetBorder[JV.PROP_LEFT] && sheetBorder[JV.PROP_LEFT][JV.PROP_LINE_WEIGHT]) {
+            sheetBorderLineWidths.push(parseInt(border[JV.PROP_LEFT][JV.PROP_LINE_WEIGHT]));
+        } else {
+            sheetBorderLineWidths.push(0);
+        }
+        if (sheetBorder[JV.PROP_RIGHT] && sheetBorder[JV.PROP_RIGHT][JV.PROP_LINE_WEIGHT]) {
+            sheetBorderLineWidths.push(parseInt(border[JV.PROP_RIGHT][JV.PROP_LINE_WEIGHT]));
+        } else {
+            sheetBorderLineWidths.push(0);
+        }
+        if (sheetBorder[JV.PROP_TOP] && sheetBorder[JV.PROP_TOP][JV.PROP_LINE_WEIGHT]) {
+            sheetBorderLineWidths.push(parseInt(border[JV.PROP_TOP][JV.PROP_LINE_WEIGHT]));
+        } else {
+            sheetBorderLineWidths.push(0);
+        }
+        if (sheetBorder[JV.PROP_BOTTOM] && sheetBorder[JV.PROP_BOTTOM][JV.PROP_LINE_WEIGHT]) {
+            sheetBorderLineWidths.push(parseInt(border[JV.PROP_BOTTOM][JV.PROP_LINE_WEIGHT]));
+        } else {
+            sheetBorderLineWidths.push(0);
+        }
+        for (var i = 0; i < 4; i++) {
+            if (borderLineWidths[i] != sheetBorderLineWidths[i]) {
+                rst = false;
+                break;
+            }
+        }
+        return rst;
+    };
+    private_getBorderId = function(cell) {
+        var rst = 0, hasBorder = false;
+        if (!(stylesObj.borders)) {
+            stylesObj.borders = [];
+        }
+        var sheetBorder = sheetData.style_collection[cell.style];
+        for (var i = 0; i < stylesObj.borders.length; i++) {
+            var border = stylesObj.borders[i];
+            if (private_checkBorder(border, sheetBorder)) {
+                hasBorder = true;
+                rst = i;
+                break;
+            }
+        }
+        if (!hasBorder) {
+            var border = {};
+            border[JV.PROP_LEFT] = {};
+            border[JV.PROP_LEFT][JV.PROP_LINE_WEIGHT] = 0;
+            border[JV.PROP_RIGHT] = {};
+            border[JV.PROP_RIGHT][JV.PROP_LINE_WEIGHT] = 0;
+            border[JV.PROP_TOP] = {};
+            border[JV.PROP_TOP][JV.PROP_LINE_WEIGHT] = 0;
+            border[JV.PROP_BOTTOM] = {};
+            border[JV.PROP_BOTTOM][JV.PROP_LINE_WEIGHT] = 0;
+            if (sheetBorder && sheetBorder[JV.PROP_LEFT]) {
+                border[JV.PROP_LEFT][JV.PROP_LINE_WEIGHT] = parseInt(sheetBorder[JV.PROP_LEFT][JV.PROP_LINE_WEIGHT]);
+            }
+            if (sheetBorder && sheetBorder[JV.PROP_RIGHT]) {
+                border[JV.PROP_RIGHT][JV.PROP_LINE_WEIGHT] = parseInt(sheetBorder[JV.PROP_RIGHT][JV.PROP_LINE_WEIGHT]);
+            }
+            if (sheetBorder && sheetBorder[JV.PROP_TOP]) {
+                border[JV.PROP_TOP][JV.PROP_LINE_WEIGHT] = parseInt(sheetBorder[JV.PROP_TOP][JV.PROP_LINE_WEIGHT]);
+            }
+            if (sheetBorder && sheetBorder[JV.PROP_BOTTOM]) {
+                border[JV.PROP_BOTTOM][JV.PROP_LINE_WEIGHT] = parseInt(sheetBorder[JV.PROP_BOTTOM][JV.PROP_LINE_WEIGHT]);
+            }
+            stylesObj.borders.push(border);
+            rst = stylesObj.borders.length - 1;
+        }
+        return rst;
+    };
     private_getStyleIdx = function(cell) {
-        var rst = 1;
-        //
+        var rst = 1, hasStyle = false;
+        if (!(stylesObj.cellXfs)) stylesObj.cellXfs = [];
+        for (var i = 0; i < stylesObj.cellXfs.length; i++) {
+            //check font and border
+            var fontId = private_getFontId(cell);
+            var cellStyle = stylesObj.cellXfs[i];
+        }
+        if (!hasStyle) {
+            //add new style
+        }
         return rst;
     };
     private_setCols = function(){