|
|
|
@ -1175,6 +1175,345 @@ let nullCellRender = function(r, c, start_r, start_c, end_r, end_c,luckysheetTab |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
let cellRender1 = function(r, c, start_r, start_c, end_r, end_c, value, luckysheetTableContent,af_compute, cf_compute,offsetLeft,offsetTop,dynamicArray_compute,cellOverflowMap, dataset_col_st, dataset_col_ed,scrollHeight,scrollWidth,bodrder05,isMerge){ |
|
|
|
|
|
|
|
let cell = Store.flowdata[r][c]; |
|
|
|
let cellWidth = end_c - start_c - 2; |
|
|
|
let cellHeight = end_r - start_r - 2; |
|
|
|
let space_width = 2, space_height = 2; //宽高方向 间隙
|
|
|
|
|
|
|
|
//水平对齐
|
|
|
|
let horizonAlign = menuButton.checkstatus(Store.flowdata, r, c, "ht"); |
|
|
|
//垂直对齐
|
|
|
|
let verticalAlign = menuButton.checkstatus(Store.flowdata, r, c, "vt"); |
|
|
|
|
|
|
|
//交替颜色
|
|
|
|
let checksAF = alternateformat.checksAF(r, c, af_compute); |
|
|
|
//条件格式
|
|
|
|
let checksCF = conditionformat.checksCF(r, c, cf_compute); |
|
|
|
|
|
|
|
//单元格 背景颜色
|
|
|
|
let fillStyle = menuButton.checkstatus(Store.flowdata, r, c, "bg"); |
|
|
|
if(checksAF != null && checksAF[1] != null){ //若单元格有交替颜色 背景颜色
|
|
|
|
fillStyle = checksAF[1]; |
|
|
|
} |
|
|
|
if(checksCF != null && checksCF["cellColor"] != null){ //若单元格有条件格式 背景颜色
|
|
|
|
fillStyle = checksCF["cellColor"]; |
|
|
|
} |
|
|
|
|
|
|
|
if(fillStyle==null){ |
|
|
|
luckysheetTableContent.fillStyle = "#FFFFFF"; |
|
|
|
} |
|
|
|
else{ |
|
|
|
luckysheetTableContent.fillStyle = fillStyle; |
|
|
|
} |
|
|
|
|
|
|
|
let borderfix = menuButton.borderfix(Store.flowdata, r, c); |
|
|
|
// console.log(value, fillStyle,borderfix);
|
|
|
|
let cellsize = [ |
|
|
|
(start_c + offsetLeft + borderfix[0]), |
|
|
|
(start_r + offsetTop + borderfix[1]), |
|
|
|
(end_c - start_c + borderfix[2]-(!!isMerge?1:0)), |
|
|
|
(end_r - start_r + borderfix[3]) |
|
|
|
]; |
|
|
|
luckysheetTableContent.fillRect(cellsize[0], cellsize[1], cellsize[2], cellsize[3]); |
|
|
|
|
|
|
|
//若单元格有批注(单元格右上角红色小三角标示)
|
|
|
|
if(cell.ps != null){ |
|
|
|
let ps_w = 8*Store.zoomRatio, ps_h = 8*Store.zoomRatio; //红色小三角宽高
|
|
|
|
|
|
|
|
luckysheetTableContent.beginPath(); |
|
|
|
luckysheetTableContent.moveTo( |
|
|
|
(end_c + offsetLeft - ps_w), |
|
|
|
(start_r + offsetTop) |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
(end_c + offsetLeft), |
|
|
|
(start_r + offsetTop) |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
(end_c + offsetLeft), |
|
|
|
(start_r + offsetTop + ps_h) |
|
|
|
); |
|
|
|
luckysheetTableContent.fillStyle = "#FC6666"; |
|
|
|
luckysheetTableContent.fill(); |
|
|
|
luckysheetTableContent.closePath(); |
|
|
|
} |
|
|
|
|
|
|
|
//若单元格强制为字符串,则显示绿色小三角
|
|
|
|
if(cell.qp==1 && isRealNum(cell.v)){ |
|
|
|
let ps_w = 6*Store.zoomRatio, ps_h = 6*Store.zoomRatio; //红色小三角宽高
|
|
|
|
|
|
|
|
luckysheetTableContent.beginPath(); |
|
|
|
luckysheetTableContent.moveTo( |
|
|
|
(start_c + offsetLeft + ps_w-1), |
|
|
|
(start_r + offsetTop) |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
(start_c + offsetLeft-1), |
|
|
|
(start_r + offsetTop) |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
(start_c + offsetLeft-1), |
|
|
|
(start_r + offsetTop + ps_h) |
|
|
|
); |
|
|
|
luckysheetTableContent.fillStyle = "#487f1e"; |
|
|
|
luckysheetTableContent.fill(); |
|
|
|
luckysheetTableContent.closePath(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//溢出单元格
|
|
|
|
let cellOverflow_bd_r_render = true; //溢出单元格右边框是否需要绘制
|
|
|
|
let cellOverflow_colInObj = cellOverflow_colIn(cellOverflowMap, r, c, dataset_col_st, dataset_col_ed); |
|
|
|
|
|
|
|
if(cell.tb == '1' && cellOverflow_colInObj.colIn){ |
|
|
|
//此单元格 为 溢出单元格渲染范围最后一列,绘制溢出单元格内容
|
|
|
|
if(cellOverflow_colInObj.colLast){ |
|
|
|
cellTextRender( |
|
|
|
cellOverflow_colInObj.rowIndex, |
|
|
|
cellOverflow_colInObj.colIndex, |
|
|
|
cellOverflow_colInObj.stc, |
|
|
|
cellOverflow_colInObj.edc, |
|
|
|
luckysheetTableContent, |
|
|
|
scrollHeight, |
|
|
|
scrollWidth,offsetLeft,offsetTop,af_compute, cf_compute |
|
|
|
); |
|
|
|
} |
|
|
|
else{ |
|
|
|
cellOverflow_bd_r_render = false; |
|
|
|
} |
|
|
|
} |
|
|
|
else{ |
|
|
|
//若单元格有条件格式数据条
|
|
|
|
if(checksCF != null && checksCF["dataBar"] != null){ |
|
|
|
let x = (start_c + offsetLeft + space_width); |
|
|
|
let y = (start_r + offsetTop + space_height); |
|
|
|
let w = (cellWidth - space_width * 2); |
|
|
|
let h = (cellHeight - space_height * 2); |
|
|
|
|
|
|
|
let valueType = checksCF["dataBar"]["valueType"]; |
|
|
|
let valueLen = checksCF["dataBar"]["valueLen"]; |
|
|
|
let format = checksCF["dataBar"]["format"]; |
|
|
|
|
|
|
|
if(valueType == 'minus'){ |
|
|
|
//负数
|
|
|
|
let minusLen = checksCF["dataBar"]["minusLen"]; |
|
|
|
|
|
|
|
if(format.length > 1){ |
|
|
|
//渐变
|
|
|
|
let my_gradient = luckysheetTableContent.createLinearGradient( |
|
|
|
x + w * minusLen * (1 - valueLen), |
|
|
|
y, |
|
|
|
x + w * minusLen, |
|
|
|
y |
|
|
|
); |
|
|
|
my_gradient.addColorStop(0, "#ffffff"); |
|
|
|
my_gradient.addColorStop(1, "#ff0000"); |
|
|
|
|
|
|
|
luckysheetTableContent.fillStyle = my_gradient; |
|
|
|
} |
|
|
|
else{ |
|
|
|
//单色
|
|
|
|
luckysheetTableContent.fillStyle = "#ff0000"; |
|
|
|
} |
|
|
|
|
|
|
|
luckysheetTableContent.fillRect( |
|
|
|
x + w * minusLen * (1 - valueLen), |
|
|
|
y, |
|
|
|
w * minusLen * valueLen, |
|
|
|
h |
|
|
|
); |
|
|
|
|
|
|
|
luckysheetTableContent.beginPath(); |
|
|
|
luckysheetTableContent.moveTo( |
|
|
|
x + w * minusLen * (1 - valueLen), |
|
|
|
y |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
x + w * minusLen * (1 - valueLen), |
|
|
|
y + h |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
x + w * minusLen, |
|
|
|
y + h |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
x + w * minusLen, |
|
|
|
y |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
x + w * minusLen * (1 - valueLen), |
|
|
|
y |
|
|
|
); |
|
|
|
luckysheetTableContent.lineWidth = 1; |
|
|
|
luckysheetTableContent.strokeStyle = "#ff0000"; |
|
|
|
luckysheetTableContent.stroke(); |
|
|
|
luckysheetTableContent.closePath(); |
|
|
|
} |
|
|
|
else if(valueType == 'plus'){ |
|
|
|
//正数
|
|
|
|
let plusLen = checksCF["dataBar"]["plusLen"]; |
|
|
|
|
|
|
|
if(plusLen == 1){ |
|
|
|
if(format.length > 1){ |
|
|
|
//渐变
|
|
|
|
let my_gradient = luckysheetTableContent.createLinearGradient( |
|
|
|
x, |
|
|
|
y, |
|
|
|
x + w * valueLen, |
|
|
|
y |
|
|
|
); |
|
|
|
my_gradient.addColorStop(0, format[0]); |
|
|
|
my_gradient.addColorStop(1, format[1]); |
|
|
|
|
|
|
|
luckysheetTableContent.fillStyle = my_gradient; |
|
|
|
} |
|
|
|
else{ |
|
|
|
//单色
|
|
|
|
luckysheetTableContent.fillStyle = format[0]; |
|
|
|
} |
|
|
|
|
|
|
|
luckysheetTableContent.fillRect( |
|
|
|
x, |
|
|
|
y, |
|
|
|
w * valueLen, |
|
|
|
h |
|
|
|
); |
|
|
|
|
|
|
|
luckysheetTableContent.beginPath(); |
|
|
|
luckysheetTableContent.moveTo( |
|
|
|
x, |
|
|
|
y |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
x, |
|
|
|
y + h |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
x + w * valueLen, |
|
|
|
y + h |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
x + w * valueLen, |
|
|
|
y |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
x, |
|
|
|
y |
|
|
|
); |
|
|
|
luckysheetTableContent.lineWidth = 1; |
|
|
|
luckysheetTableContent.strokeStyle = format[0]; |
|
|
|
luckysheetTableContent.stroke(); |
|
|
|
luckysheetTableContent.closePath(); |
|
|
|
} |
|
|
|
else{ |
|
|
|
let minusLen = checksCF["dataBar"]["minusLen"]; |
|
|
|
|
|
|
|
if(format.length > 1){ |
|
|
|
//渐变
|
|
|
|
let my_gradient = luckysheetTableContent.createLinearGradient( |
|
|
|
x + w * minusLen, |
|
|
|
y, |
|
|
|
x + w * minusLen + w * plusLen * valueLen, |
|
|
|
y |
|
|
|
); |
|
|
|
my_gradient.addColorStop(0, format[0]); |
|
|
|
my_gradient.addColorStop(1, format[1]); |
|
|
|
|
|
|
|
luckysheetTableContent.fillStyle = my_gradient; |
|
|
|
} |
|
|
|
else{ |
|
|
|
//单色
|
|
|
|
luckysheetTableContent.fillStyle = format[0]; |
|
|
|
} |
|
|
|
|
|
|
|
luckysheetTableContent.fillRect( |
|
|
|
x + w * minusLen, |
|
|
|
y, |
|
|
|
w * plusLen * valueLen, |
|
|
|
h |
|
|
|
); |
|
|
|
|
|
|
|
luckysheetTableContent.beginPath(); |
|
|
|
luckysheetTableContent.moveTo( |
|
|
|
x + w * minusLen, |
|
|
|
y |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
x + w * minusLen, |
|
|
|
y + h |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
x + w * minusLen + w * plusLen * valueLen, |
|
|
|
y + h |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
x + w * minusLen + w * plusLen * valueLen, |
|
|
|
y |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
x + w * minusLen, |
|
|
|
y |
|
|
|
); |
|
|
|
luckysheetTableContent.lineWidth = 1; |
|
|
|
luckysheetTableContent.strokeStyle = format[0]; |
|
|
|
luckysheetTableContent.stroke(); |
|
|
|
luckysheetTableContent.closePath(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
cellOverflowRender( |
|
|
|
cellOverflow_colInObj.rowIndex, |
|
|
|
cellOverflow_colInObj.colIndex, |
|
|
|
cellOverflow_colInObj.stc, |
|
|
|
cellOverflow_colInObj.edc, |
|
|
|
luckysheetTableContent, |
|
|
|
scrollHeight, |
|
|
|
scrollWidth,offsetLeft,offsetTop,af_compute, cf_compute |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
if(cellOverflow_bd_r_render){ |
|
|
|
//右边框
|
|
|
|
if(!Store.luckysheetcurrentisPivotTable && !fillStyle && Store.showGridLines){ |
|
|
|
luckysheetTableContent.beginPath(); |
|
|
|
luckysheetTableContent.moveTo( |
|
|
|
(end_c + offsetLeft - 2 + bodrder05), |
|
|
|
(start_r + offsetTop) |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
(end_c + offsetLeft - 2 + bodrder05), |
|
|
|
(end_r + offsetTop) |
|
|
|
); |
|
|
|
luckysheetTableContent.lineWidth = 1; |
|
|
|
luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle; |
|
|
|
luckysheetTableContent.stroke(); |
|
|
|
luckysheetTableContent.closePath(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//下边框
|
|
|
|
if(!Store.luckysheetcurrentisPivotTable && !fillStyle && Store.showGridLines){ |
|
|
|
luckysheetTableContent.beginPath(); |
|
|
|
luckysheetTableContent.moveTo( |
|
|
|
(start_c + offsetLeft - 1), |
|
|
|
(end_r + offsetTop - 2 + bodrder05) |
|
|
|
); |
|
|
|
luckysheetTableContent.lineTo( |
|
|
|
(end_c + offsetLeft - 1), |
|
|
|
(end_r + offsetTop - 2 + bodrder05) |
|
|
|
); |
|
|
|
luckysheetTableContent.lineWidth = 1; |
|
|
|
luckysheetTableContent.strokeStyle = luckysheetdefaultstyle.strokeStyle; |
|
|
|
luckysheetTableContent.stroke(); |
|
|
|
luckysheetTableContent.closePath(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//非空白单元格渲染
|
|
|
|
let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckysheetTableContent,af_compute, cf_compute,offsetLeft,offsetTop,dynamicArray_compute,cellOverflowMap, dataset_col_st, dataset_col_ed,scrollHeight,scrollWidth,bodrder05,isMerge){ |
|
|
|
|
|
|
|
@ -1567,13 +1906,14 @@ let cellRender = function(r, c, start_r, start_c, end_r, end_c, value, luckyshee |
|
|
|
if(cell.tb == '2'){ |
|
|
|
//自动换行
|
|
|
|
// luckysheetTableContent.textBaseline = 'top'; //textBaseline以top计算
|
|
|
|
|
|
|
|
//Text rotation,0: 0、1: 45 、2: -45、3 Vertical text、4: 90 、5: -90,
|
|
|
|
if(cell.ct!=null && cell.ct.t=="inlineStr" && cell.ct.sharedStrings!=null && cell.ct.sharedStrings.length>0){ |
|
|
|
let strArr = [],lineMaxHeight=[]; |
|
|
|
let sharedStrings = cell.ct.sharedStrings; |
|
|
|
for(let i=0;i<cell.ct.sharedStrings.length;i++){ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
else{ |
|
|
|
let strArr = []; |
|
|
|
|