|  | @@ -196,14 +196,60 @@ function writeStyles(stylesObj){
 | 
	
		
			
				|  |  |      for (let i = 0; i < stylesObj.cellXfs.length; i++) {
 | 
	
		
			
				|  |  |          let excelStyle = stylesObj.cellXfs[i];
 | 
	
		
			
				|  |  |          rst.push('<xf numFmtId="0" fontId="' + excelStyle.fontId + '" fillId="0" borderId="' + excelStyle.borderId + '" xfId="0">');
 | 
	
		
			
				|  |  | -        let alignStr = '<alignment horizontal="' + excelStyle[JV.CONTROL_PROPS[2]] + '" vertical="' + excelStyle[JV.CONTROL_PROPS[3]] + '"';
 | 
	
		
			
				|  |  | +        //pageData[JV.NODE_FONT_COLLECTION] excelStyle.fontId
 | 
	
		
			
				|  |  | +        let alignStr = "<alignment";
 | 
	
		
			
				|  |  | +        let textRotation = 0;
 | 
	
		
			
				|  |  | +        let newHorizontal = excelStyle[JV.CONTROL_PROPS[2]];
 | 
	
		
			
				|  |  | +        let newVertical = excelStyle[JV.CONTROL_PROPS[3]];
 | 
	
		
			
				|  |  | +        if (parseInt(excelStyle.fontAngle) !== 0) {
 | 
	
		
			
				|  |  | +            let tmpH = newHorizontal, tmpV = newVertical;
 | 
	
		
			
				|  |  | +            if (excelStyle.fontAngle > 0) {
 | 
	
		
			
				|  |  | +                textRotation = 180;
 | 
	
		
			
				|  |  | +                if (newHorizontal === "left") {
 | 
	
		
			
				|  |  | +                    tmpV = 'top';
 | 
	
		
			
				|  |  | +                } else if (newHorizontal === "right") {
 | 
	
		
			
				|  |  | +                    tmpV = 'bottom';
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    tmpV = 'center';
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if (newVertical === "top") {
 | 
	
		
			
				|  |  | +                    tmpH = 'right';
 | 
	
		
			
				|  |  | +                } else if (newVertical === "bottom") {
 | 
	
		
			
				|  |  | +                    tmpH = 'left';
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    tmpH = 'center';
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                textRotation = 90;
 | 
	
		
			
				|  |  | +                if (newHorizontal === "left") {
 | 
	
		
			
				|  |  | +                    tmpV = 'bottom';
 | 
	
		
			
				|  |  | +                } else if (newHorizontal === "right") {
 | 
	
		
			
				|  |  | +                    tmpV = 'top';
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    tmpV = 'center';
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if (newVertical === "top") {
 | 
	
		
			
				|  |  | +                    tmpH = 'left';
 | 
	
		
			
				|  |  | +                } else if (newVertical === "bottom") {
 | 
	
		
			
				|  |  | +                    tmpH = 'right';
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    tmpH = 'center';
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            newHorizontal = tmpH;
 | 
	
		
			
				|  |  | +            newVertical = tmpV;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        alignStr += ' horizontal="' + newHorizontal + '" vertical="' + newVertical + '"';
 | 
	
		
			
				|  |  |          if (strUtil.convertStrToBoolean(excelStyle[JV.CONTROL_PROPS[1]])) {
 | 
	
		
			
				|  |  | -            alignStr = alignStr + ' shrinkToFit="1"';
 | 
	
		
			
				|  |  | +            alignStr += ' shrinkToFit="1"';
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (strUtil.convertStrToBoolean(excelStyle[JV.CONTROL_PROPS[4]])) {
 | 
	
		
			
				|  |  | -            alignStr = alignStr + ' wrapText="1"';
 | 
	
		
			
				|  |  | +            alignStr += ' wrapText="1"';
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        alignStr = alignStr + '/>';
 | 
	
		
			
				|  |  | +        if (textRotation !== 0) {
 | 
	
		
			
				|  |  | +            alignStr += ' textRotation="' + textRotation + '"';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        alignStr += '/>';
 | 
	
		
			
				|  |  |          rst.push(alignStr);
 | 
	
		
			
				|  |  |          rst.push('</xf>');
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -265,6 +311,7 @@ function writeSheets(pageData, paperSize, sharedStrList, stylesObj, isSinglePage
 | 
	
		
			
				|  |  |          let sheetControl = {};
 | 
	
		
			
				|  |  |          sheetControl.fontId = fontId;
 | 
	
		
			
				|  |  |          sheetControl.borderId = borderId;
 | 
	
		
			
				|  |  | +        sheetControl.fontAngle = 0;
 | 
	
		
			
				|  |  |          for (let i = 0; i < JV.CONTROL_PROPS.length; i++) {
 | 
	
		
			
				|  |  |              sheetControl[JV.CONTROL_PROPS[i]] = cellControl[JV.CONTROL_PROPS[i]];
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -427,7 +474,10 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj){
 | 
	
		
			
				|  |  |          return rst;
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |      let private_chkAndGetMergeLine = function(cell, sheetBorder, borderStr) {
 | 
	
		
			
				|  |  | -        let rst = sheetBorder[borderStr][JV.PROP_LINE_WEIGHT], mergeBorder = pageData[JV.BAND_PROP_MERGE_BAND];
 | 
	
		
			
				|  |  | +        let rst = 0, mergeBorder = pageData[JV.BAND_PROP_MERGE_BAND];
 | 
	
		
			
				|  |  | +        if (sheetBorder[borderStr] && sheetBorder[borderStr][JV.PROP_LINE_WEIGHT] != undefined) {
 | 
	
		
			
				|  |  | +            rst = sheetBorder[borderStr][JV.PROP_LINE_WEIGHT];
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          if (cell[JV.PROP_AREA][borderStr] == mergeBorder[borderStr]) {
 | 
	
		
			
				|  |  |              let destStyle = pageData[JV.NODE_STYLE_COLLECTION][mergeBorder[JV.PROP_STYLE][JV.PROP_ID]];
 | 
	
		
			
				|  |  |              rst = destStyle[borderStr][JV.PROP_LINE_WEIGHT];
 | 
	
	
		
			
				|  | @@ -452,29 +502,21 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj){
 | 
	
		
			
				|  |  |              stylesObj.borders = [];
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          let sheetBorder = pageData[JV.NODE_STYLE_COLLECTION][cell.style];
 | 
	
		
			
				|  |  | +        let mergedBorder = private_getIniBorder();
 | 
	
		
			
				|  |  | +        mergedBorder[JV.PROP_LEFT][JV.PROP_LINE_WEIGHT] = private_chkAndGetMergeLine(cell, sheetBorder, JV.PROP_LEFT);
 | 
	
		
			
				|  |  | +        mergedBorder[JV.PROP_RIGHT][JV.PROP_LINE_WEIGHT] = private_chkAndGetMergeLine(cell, sheetBorder, JV.PROP_RIGHT);
 | 
	
		
			
				|  |  | +        mergedBorder[JV.PROP_TOP][JV.PROP_LINE_WEIGHT] = private_chkAndGetMergeLine(cell, sheetBorder, JV.PROP_TOP);
 | 
	
		
			
				|  |  | +        mergedBorder[JV.PROP_BOTTOM][JV.PROP_LINE_WEIGHT] = private_chkAndGetMergeLine(cell, sheetBorder, JV.PROP_BOTTOM);
 | 
	
		
			
				|  |  |          for (let i = 0; i < stylesObj.borders.length; i++) {
 | 
	
		
			
				|  |  |              let border = stylesObj.borders[i];
 | 
	
		
			
				|  |  | -            if (private_checkBorder(cell, border, sheetBorder)) {
 | 
	
		
			
				|  |  | +            if (private_checkBorder(cell, border, mergedBorder)) {
 | 
	
		
			
				|  |  |                  hasBorder = true;
 | 
	
		
			
				|  |  |                  rst = i;
 | 
	
		
			
				|  |  |                  break;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (!hasBorder) {
 | 
	
		
			
				|  |  | -            let border = private_getIniBorder();
 | 
	
		
			
				|  |  | -            if (sheetBorder && sheetBorder[JV.PROP_LEFT]) {
 | 
	
		
			
				|  |  | -                border[JV.PROP_LEFT][JV.PROP_LINE_WEIGHT] = private_chkAndGetMergeLine(cell, sheetBorder, JV.PROP_LEFT);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (sheetBorder && sheetBorder[JV.PROP_RIGHT]) {
 | 
	
		
			
				|  |  | -                border[JV.PROP_RIGHT][JV.PROP_LINE_WEIGHT] = private_chkAndGetMergeLine(cell, sheetBorder, JV.PROP_RIGHT);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (sheetBorder && sheetBorder[JV.PROP_TOP]) {
 | 
	
		
			
				|  |  | -                border[JV.PROP_TOP][JV.PROP_LINE_WEIGHT] = private_chkAndGetMergeLine(cell, sheetBorder, JV.PROP_TOP);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if (sheetBorder && sheetBorder[JV.PROP_BOTTOM]) {
 | 
	
		
			
				|  |  | -                border[JV.PROP_BOTTOM][JV.PROP_LINE_WEIGHT] = private_chkAndGetMergeLine(cell, sheetBorder, JV.PROP_BOTTOM);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            stylesObj.borders.push(border);
 | 
	
		
			
				|  |  | +            stylesObj.borders.push(mergedBorder);
 | 
	
		
			
				|  |  |              rst = stylesObj.borders.length - 1;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          return rst;
 | 
	
	
		
			
				|  | @@ -493,6 +535,7 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj){
 | 
	
		
			
				|  |  |          let rst = 1, hasStyle = false;
 | 
	
		
			
				|  |  |          if (!(stylesObj.cellXfs)) stylesObj.cellXfs = [];
 | 
	
		
			
				|  |  |          let fontId = private_getFontId(cell);
 | 
	
		
			
				|  |  | +        let fontAngle = parseInt(pageData.font_collection[cell.font].FontAngle);
 | 
	
		
			
				|  |  |          let borderId = private_getBorderId(cell);
 | 
	
		
			
				|  |  |          let cellControl = pageData[JV.NODE_CONTROL_COLLECTION][cell[JV.PROP_CONTROL]];
 | 
	
		
			
				|  |  |          for (let i = 0; i < stylesObj.cellXfs.length; i++) {
 | 
	
	
		
			
				|  | @@ -509,6 +552,7 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj){
 | 
	
		
			
				|  |  |              let sheetControl = {};
 | 
	
		
			
				|  |  |              sheetControl.fontId = fontId;
 | 
	
		
			
				|  |  |              sheetControl.borderId = borderId;
 | 
	
		
			
				|  |  | +            sheetControl.fontAngle = fontAngle;
 | 
	
		
			
				|  |  |              for (let i = 0; i < JV.CONTROL_PROPS.length; i++) {
 | 
	
		
			
				|  |  |                  sheetControl[JV.CONTROL_PROPS[i]] = cellControl[JV.CONTROL_PROPS[i]];
 | 
	
		
			
				|  |  |              }
 |