- /**
- * 数据表格样式复制(复制第一行的样式)(针对绑定的列表数据)
- */
- //需求:在多行表格的情况下并表格的数据条数少于表格一行数据占据的行数的时候,实际出来的行数是少于编写模板的时候的行数的(具体的行数是数据源带出来的数据的条数)
- //解决方案:在setDataSource之前判断出需要的数据条数,即当是上面的情况下,我们需要为数据源设置数据。并且将正确数据的情况记录。加载行数的时候使用设置的数据。实际显示数据的时候使用正确的数据
- function copyTableStyle(sheet, table,lengthtc) {//参数三:数组->key:表格信息->value:rowtc->做row隐藏操作
- if (!table.bindingPath())
- return;
- var bindingPath = table.bindingPath();
- var range = table.dataRange();
- var rowHeight = sheet.getRowHeight(range.row);
- var spans =sheet.getSpans(range);
- var spansColumns = [];
- var rowtc = 1;//默认情况下一条数据只占用一行,这里获取最大合并单元格数
- for(var i=0;i<spans.length;i++) {//获取当前列表里面的合并信息
- if(spans[i].row == range.row){
- var spansColumn = {row:spans[i].row,col:spans[i].col,rowCount:spans[i].rowCount,colCount:spans[i].colCount};
- if(spans[i].rowCount>rowtc)
- rowtc = spans[i].rowCount;
- spansColumns.push(spansColumn);
- //sheet.removeSpan(spans[i].row, spans[i].col);//取消合并
- }
- }
- //洁净度_温湿度_需求:合并检测区域、级别、结论&&两条数据的结论一致
- var is_humiture = false;//防止刷新数据的时候 两次合并处理
- if(table.bindingPath()==='列表反写数据.多结果列表反存'&&range.rowCount%2===0){
- var index_detectarea = null;
- var index_level = null;
- var index_conclusion =null;
- for(var index = 0;index<range.colCount;index++){
- if(table.getColumnDataField(index)==='检测区域'){
- if(sheet.getValue(range.row,range.col+index)==sheet.getValue(range.row+1,range.col+index))
- index_detectarea = index;
-
- }else if(table.getColumnDataField(index)==='级别'){
- if(sheet.getValue(range.row,range.col+index)==sheet.getValue(range.row+1,range.col+index))
- index_level = index;
-
- }else if(table.getColumnDataField(index)==='结论'){
- if(sheet.getValue(range.row,range.col+index)==sheet.getValue(range.row+1,range.col+index))
- index_conclusion = index;
- }
- }
- if(index_detectarea!=null&&index_level!=null&&index_conclusion!=null){
- if(!is_humiture)
- is_humiture = true;
- }
- }
- if(rowtc >1 && !is_humiture){
- var looptimes = lengthtc||range.rowCount;
- sheet.addRows(range.row, rowtc*(looptimes));//插入需要的行-合并行数*数据条数
- for (var i = 1; i <= looptimes; i++) {//复制格式以及复制公式以及设置行高
- for ( var key in spansColumns) {
- var row = spansColumns[key].row;
- var col = spansColumns[key].col;
- var colCount = spansColumns[key].colCount;
- var rowCount = spansColumns[key].rowCount;
- sheet.addSpan(range.row + rowtc*(i-1), col, rowCount,colCount);
- }
- sheet.copyTo(range.row + looptimes*rowtc, -1, range.row + rowtc*(i-1), -1, rowtc,
- range.colCount, GC.Spread.Sheets.CopyToOptions.style);
- sheet.copyTo(range.row + looptimes*rowtc+(i-1), -1, range.row + rowtc*(i-1), -1, 1,
- range.colCount, GC.Spread.Sheets.CopyToOptions.value);
- sheet.copyTo(range.row + looptimes*rowtc, -1, range.row + rowtc*(i-1), -1, 1,
- range.colCount, GC.Spread.Sheets.CopyToOptions.formula);
- sheet.setRowHeight(range.row + rowtc*(i-1), rowHeight);
- }
- sheet.deleteRows(range.row + looptimes*rowtc,range.rowCount);
- }else{
- for (var i = 1; i < range.rowCount; i++) {
- // Copy Style
- sheet.copyTo(range.row + i - 1, -1, range.row + i, -1, 1,
- range.colCount, GC.Spread.Sheets.CopyToOptions.style);
- // Copy Formula
- sheet.copyTo(range.row + i - 1, -1, range.row + i, -1, 1,
- range.colCount, GC.Spread.Sheets.CopyToOptions.formula);
- // 高度设置
- sheet.setRowHeight(range.row + i, rowHeight);
- // 合并单元格
- for ( var key in spansColumns) {
- var row = spansColumns[key].row;
- var col = spansColumns[key].col;
- var colCount = spansColumns[key].colCount;
- try{//温湿度这里会在刷新数据的时候报错//当有列合并的时候
- sheet.addSpan(range.row + i, col, 1,colCount);
- }catch (e) {
- console.log("合并单元格err"+(range.row + i)+"-"+ col+"-"+ 1+"-"+colCount)
- }
- }
- }
- //洁净度_温湿度_需求:合并检测区域、级别、结论&&两条数据的结论一致
- if(table.bindingPath()==='列表反写数据.多结果列表反存'&&range.rowCount%2===0){
- var index_detectarea = null;
- var index_level = null;
- var index_conclusion =null;
- for(var index = 0;index<range.colCount;index++){
- if(table.getColumnDataField(index)==='检测区域'){
- if(sheet.getValue(range.row,range.col+index)==sheet.getValue(range.row+1,range.col+index))
- index_detectarea = index;
-
- }else if(table.getColumnDataField(index)==='级别'){
- if(sheet.getValue(range.row,range.col+index)==sheet.getValue(range.row+1,range.col+index))
- index_level = index;
-
- }else if(table.getColumnDataField(index)==='结论'){
- if(sheet.getValue(range.row,range.col+index)==sheet.getValue(range.row+1,range.col+index))
- index_conclusion = index;
- }
- }
- if(index_detectarea!=null&&index_level!=null&&index_conclusion!=null){
- //合并操作
- var n = 0;
- var range_detectarea = new GC.Spread.Sheets.Range(range.row + n*2, range.col+index_detectarea, 1, 1);
- var sp_range_detectarea = sheet.getSpans(range_detectarea);
- var range_level = new GC.Spread.Sheets.Range(range.row + n*2, range.col+index_level, 1, 1);
- var sp_range_level = sheet.getSpans(range_level);
- var range_conclusion = new GC.Spread.Sheets.Range(range.row + n*2, range.col+index_conclusion, 1, 1);
- var sp_range_conclusion = sheet.getSpans(range_conclusion);
- for(n ;n<range.rowCount/2;n++){
- sheet.addSpan(range.row + n*2, range.col+index_detectarea, 2,1+(sp_range_detectarea[0]==undefined?0:(sp_range_detectarea[0].colCount-1)));
- sheet.addSpan(range.row + n*2, range.col+index_level, 2,1+(sp_range_level[0]==undefined?0:(sp_range_level[0].colCount-1)));
- sheet.addSpan(range.row + n*2, range.col+index_conclusion, 2,1+(sp_range_conclusion[0]==undefined?0:(sp_range_conclusion[0].colCount-1)));
- //下面格子等于上面的格子
- var letter = String.fromCharCode(64 + parseInt(range.col+index_conclusion+1));
- // console.log(letter);
- sheet.setFormula(range.row + n*2+1, range.col+index_conclusion,
- ""+letter+(range.row + n*2+1),GC.Spread.Sheets.SheetArea.viewport);
- }
- }
- }
- }
- }
复制代码
我排查了一下 是这段代码的问题 ,但是我看不出原因 麻烦您帮忙看一下 |