如何在导出Excel时带有自动合并(AutoMerge)效果(一)
本帖最后由 Fiooona 于 2020-6-16 17:53 编辑SpreadJS在V13版本中推出了自动合并(AutoMerge)功能,该功能可以在展示时按照合并规则自动实现合并效果。但是由于该效果只是画法显示层面的合并,实际上单元格之间并没有进行合并。所以在导出的时候并不会按照展示的效果进行单元格合并。如果场景中需要在导出时候也需要有自动合并的效果,AutoMerge是无法满足的,那么就需要我们自己来设计一套自动合并的算法,并利用单元格合并(addSpan)的功能来进行合并。这样可以确保导出Excel时也可以带有合并的效果。 首先,我们参考AutoMerge功能的设计分为四种合并方向:按行(byRow),按列(byColumn),先按行再按列(byRowColumn),先按列再按行(byColumnRow)。接下来,设计自动合并方式的算法,考虑到byRowColumn,byColumnRow这两种组合合并的方式是基于byRow,byColumn的基础上完成的,所以我们需要先设计byRow,byColumn的算法,主要通过循环来进行判断,下面附上算法的逻辑
byRow:
function spanbyrow(range){
var spans = [];
for(var i=range.row;i<range.rowCount;i++){
var colCount = 1;var col = 0;
var startValue = sheet.getValue(i,0);
for(var j=range.col+1;j<range.colCount;j++){
var currentValue = sheet.getValue(i,j);
if(currentValue==startValue){
colCount++;
}else{
sheet.addSpan(i,col,1,colCount);
var spanRange = new GC.Spread.Sheets.Range(i,col,1,colCount);
spans.push(spanRange);
startValue = currentValue;
col = j;
colCount = 1;
}
//判断是否到达边界
if(j == range.col+range.colCount-1){
sheet.addSpan(i,col,1,colCount);
var spanRange = new GC.Spread.Sheets.Range(i,col,1,colCount);
spans.push(spanRange);
}
}
}
return spans;
}显示的效果如下:
导出效果如下:
byColumn:function spanbycolumn(range){
var spans = [];
for(var i=range.col;i<range.col+range.colCount;i++){
var rowCount = 1;var row = 0;
var startValue = sheet.getValue(0,i);
for(var j=range.row+1;j<range.row+range.rowCount;j++){
var currentValue = sheet.getValue(j,i);
if(currentValue==startValue){
rowCount++;
}else{
sheet.addSpan(row,i,rowCount,1);
var spanRange = new GC.Spread.Sheets.Range(row,i,rowCount,1);
spans.push(spanRange);
startValue = currentValue;
row = j;
rowCount = 1;
}
//判断是否到达边界
if(j == range.row+range.rowCount-1){
sheet.addSpan(row,i,rowCount,1);
var spanRange = new GC.Spread.Sheets.Range(row,i,rowCount,1);
spans.push(spanRange);
}
}
}
return spans;
}
显示的效果如下:
导出效果如下:
上面是byRow,byColumn的实现,下一期我们会接着介绍byRowColumn,byColumnRow这两组的实现
如何在导出Excel时带有自动合并(AutoMerge)效果(二)
挺好的,是需要的东西,期待byRowColumn,byColumnRow 已经在文末附上链接啦~ 我们在新版本中已经实现了这部分内容,欢迎大家点击下面这个链接查看测试:
https://gcdn.grapecity.com.cn/showtopic-198053-1-1.html
页:
[1]