合并两个工作簿(Workbook)以及工作表(Worksheet)
本帖最后由 AlexZ 于 2023-5-12 15:16 编辑注:使用工作簿拼接时,可能会受到工作簿级别命名样式、跨sheet公式等等因素的影响,出现未知的错误。
官方角度不建议这样使用,但考虑到实际需求,您可以参考上述文章实际测试下。
如后续有出现异常问题可以另开新帖咨询。
需求:
1、将两个工作簿(Workbook)合并到一个工作簿中
2、将一个工作簿中的两个工作表sheet合并为1个
步骤:
合并工作簿代码:
for(let i=0; i<datas.length; i++){
var temp = new GC.Spread.Sheets.Workbook(document.getElementById("ss1"));
temp.fromJSON(datas);
// 重命名样式表
temp.getNamedStyles().forEach(function (namedStyle) {
namedStyle.name = "sc" + i + "_" + namedStyle.name;
spread.addNamedStyle(namedStyle);
});
var sheetCount = temp.getSheetCount();
for(let j=0; j<sheetCount; j++){
let sheet = temp.getSheet(j);
let sheetJSON = JSON.stringify(sheet.toJSON());
sheetJSON = sheetJSON.replace(/\"style\":\"/g, '"style":"sc' + i + "_");
// 如果存在parentName,则添加以下代码:
// sheetJSON = sheetJSON.replace(/\"parentName\":\"/g, '"parentName":"sc' + i + "_");
spread.suspendPaint();
var newSheet = new GC.Spread.Sheets.Worksheet("sheet" + i + "_");
newSheet.fromJSON(JSON.parse(sheetJSON));
newSheet.name(newSheet.name()+i+"_"+j);
spread.addSheet(spread.getSheetCount(), newSheet);
spread.resumePaint();
}
}
spread.removeSheet(0);
合并sheet代码:
spread.suspendPaint();
//新增一个sheet,用来放拼接后的表单
var newSheeet = new GC.Spread.Sheets.Worksheet("new sheet");
spread.addSheet(spread.getSheetCount(), newSheeet);
var workbook = spread;
workbook.options.allowExtendPasteRange = true;
//sheet1、sheet2行列数
var sheet1 = workbook.getSheet(0);
var rc1 = sheet1.getRowCount();
var cc1 = sheet1.getColumnCount();
var sheet2 = workbook.getSheet(1);
var rc2 = sheet2.getRowCount();
var cc2 = sheet2.getColumnCount();
var sheet3 = workbook.getSheet(2);
var sheetName = sheet3.name();
//全选复制sheet1,粘贴至sheet3
var fromRange1 = ;
var toRange1 = ;
workbook.commandManager().execute(
{
cmd: "clipboardPaste",
sheetName: sheetName,
fromSheet: sheet1,
fromRanges: fromRange1,
pastedRanges: toRange1,
isCutting: false,
clipboardText: "",
pasteOption: GC.Spread.Sheets.ClipboardPasteOptions.all
}
);
sheet3.addColumns(cc1-1, cc2);
//全选复制sheet2,粘贴至sheet3
var fromRange2 = ;
debugger;
var toRange2 = ;
workbook.commandManager().execute(
{
cmd: "clipboardPaste",
sheetName: sheetName,
fromSheet: sheet2,
fromRanges: fromRange2,
pastedRanges: toRange2,
isCutting: false,
clipboardText: "",
pasteOption: GC.Spread.Sheets.ClipboardPasteOptions.all
}
);
//获取sheet1图片,添加在sheet3内
var pic = sheet1.pictures.all();
sheet3.pictures.add('f2', pic.src(), pic.x(), pic.y(), pic.width(), pic.height());
//删除sheet1、sheet2
workbook.removeSheet(1);
workbook.removeSheet(0);
//取消选中状态
sheet3.clearSelection();
spread.resumePaint();
最终效果如下图所示:
完整代码见附件。
麻烦问一下,两个不同的sheet,里面的内容也不同。如何在一个新的sheet中将前两个sheet合并在一起?并且,该怎么触发这个合并呢?
本帖最后由 Lynn.Dou 于 2022-8-10 18:39 编辑
这边注意到关于此问题您开了新帖,可参考贴中回复:https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=152147
浮动元素拷贝不了,形状、图表这些 mmmaze95 发表于 2022-11-28 10:14
浮动元素拷贝不了,形状、图表这些
形状/图表可以通过遍历的方式获取形状/图表对象,内有位置等属性信息。然后在拼接的sheet中计算位置,重新创建
页:
[1]