本帖最后由 azure1987 于 2025-1-24 17:21 编辑
在静态demo里面可以复制 正常显示 在自己的项目中 无法显示
项目的代码如下 与demo区别就是最后四行代码
// 后端请求
await sumSpreadRecord(data).then((res) => {
// resData等于两个data.js文件的内容 一模一样
let resData = res.data
if (resData.length > 0) {
// 创建空表单
let tempSpread1 = new GC.Spread.Sheets.Workbook(document.getElementById("tempSpread1"));
// 先加载第一个数据
tempSpread1.fromJSON(resData[0])
// 循环读取后端数据 从第二个开始读取
for(let i = 0; i < resData.length; i++){
// 从第二个数据开始读取 因为第一个已经完整加载了
if (i >= 1) {
let tempSpread2 = new GC.Spread.Sheets.Workbook(document.getElementById("tempSpread2"));
tempSpread2.fromJSON(resData);
// 重命名样式表 继续加入第一个中
tempSpread2.getNamedStyles().forEach(function (namedStyle) {
namedStyle.name = "rename" + i + "_" + namedStyle.name;
tempSpread1.addNamedStyle(namedStyle);
});
// 检查第二个有多少个sheet表单
let sheetCount = tempSpread2.getSheetCount();
for(let j=0; j < sheetCount; j++){
// 第一个表
let toSheet = tempSpread1.getSheet(j);
// 表格 行数与列数
let toRowCount = toSheet.getRowCount();
let toColumnCount = toSheet.getColumnCount();
// console.log('toRowCount ' + toRowCount);
// console.log('toColumnCount' + toColumnCount);
let toSheetName = toSheet.name();
// 开启粘贴功能
let workbook = tempSpread1;
// 开启区域自动扩增
workbook.options.allowExtendPasteRange = true;
// 第二个表
let copySheet = tempSpread2.getSheet(j);
let sheetJSON = JSON.stringify(copySheet.toJSON());
sheetJSON = sheetJSON.replace(/\"style\":\"/g, '"style":"rename' + i + "_");
let copyRowCount = copySheet.getRowCount();
let copyColumnCount = copySheet.getColumnCount();
// console.log('copyRowCount ' + copyRowCount);
// console.log('copyColumnCount' + copyColumnCount);
// 增加行数 防止复制的数据 只操作行数
toSheet.addRows(toRowCount, Number(copyRowCount));
// 开启性能渲染
tempSpread1.suspendPaint();
// 新建一个表
let newSheet = new GC.Spread.Sheets.Worksheet("sheet" + i + "_");
newSheet.fromJSON(JSON.parse(sheetJSON));
// 这一步是必须的
newSheet.name(newSheet.name() + i + "_" + j);
// 这里要索引
tempSpread1.addSheet(tempSpread1.getSheetCount(), newSheet);
// 这里是被复制的表 意思就是全选数据
let fromRange = [new GC.Spread.Sheets.Range(-1, -1, -1, -1)];
// 这里是复制数据到新表的哪些位置
let toRange = [new GC.Spread.Sheets.Range(
toRowCount,
-1,
-1,
-1
)];
// 操作的上下文 操作的选项 工作表名称 源工作表 源范围数组 目标范围数组
// 该操作是剪切还是复制 剪贴板的文本
workbook.commandManager().execute(
{
cmd: "clipboardPaste",
// 复制到哪个表内 这个没问题
sheetName: toSheetName,
// 从那里来的数据 这个没问题
fromSheet: newSheet,
fromRanges: fromRange,
// 复制到什么位置
pastedRanges: toRange,
isCutting: false,
clipboardText: "",
pasteOption: GC.Spread.Sheets.ClipboardPasteOptions.all
}
);
tempSpread1.resumePaint();
}
tempSpread1.setSheetCount(sheetCount);
tempSpread1.setActiveSheetIndex(0);
}
}
// 这里是主的 spread demo 没有
// 暂停重绘
this.spread.suspendPaint();
// 主体加载数据
this.spread.fromJSON(tempSpread1.toJSON());
this.setSpreadTab()
// 恢复重绘
this.spread.resumePaint();
}
});
|
|