找回密码
 立即注册

QQ登录

只需一步,快速开始

[处理中] 富文本复制

s先生
初级会员   /  发表于:2024-4-28 17:00  /   查看:382  /  回复:4
1金币
我用下面的代码实现把左侧的表格添加到右侧中,但是复制后富文本变成了正常的文字

var tempspread = new GC.Spread.Sheets.Workbook(document.getElementById("spread-temp"));
                    tempspread.fromJSON(spread.toJSON());
                    spreadR.addSheet(1, new GC.Spread.Sheets.Worksheet('Sheet2'));
                    var sheet1 = spreadR.getSheet(1);
                    var commonsheet1 = tempspread.getSheet(1);
                    var commonsheetJson1 = JSON.stringify(commonsheet1.toJSON({ignoreFormula: true}));
                    // 重命名设置样式
                    commonsheetJson1 = commonsheetJson1.replace(/\"style\":\"/g, '"style":"zdyysb');
                    commonsheetJson1 = commonsheetJson1.replace(/\"parentName\":\"/g, '"parentName":"zzs');
                     //重命名样式表
                    tempspread.getNamedStyles().forEach(function (namedStyle) {
                        namedStyle.name = "zdyysb"  + namedStyle.name;
                        spreadR.addNamedStyle(namedStyle);
                    });
                    sheet1.fromJSON(JSON.parse(commonsheetJson1));
                    var rowNum = commonsheet1.getRowCount();
                    var colNum = commonsheet1.getColumnCount();
                    for(var i=0;i<rowNum;i++){
                          for(var j=0;j<colNum;j++){
                              var style = commonsheet1.getActualStyle(i,j);
                              sheet1.setStyle(i,j,style);
                          }
                    }
                    var fsheet = spreadR.getSheet(1);
                    var tsheet = spreadR.getSheet(0);
                    var fromRanges = [new GC.Spread.Sheets.Range(0, 0, fsheet.getRowCount(),fsheet.getColumnCount())];
                    var tempRow = tsheet.getRowCount();
                    tsheet.addRows(tsheet.getRowCount(),fsheet.getRowCount());
                    var pastedRange = [new GC.Spread.Sheets.Range(tempRow, 0, fsheet.getRowCount(),fsheet.getColumnCount())];
                    console.log("fromRanges",fromRanges);
                    console.log("pastedRange",pastedRange);
                    spreadR.commandManager().execute({
                        cmd: 'clipboardPaste',
                        sheetName: tsheet.name(),
                        fromSheet: fsheet,
                        fromRanges: fromRanges,
                        pastedRanges: pastedRange,
                        isCutting: false,
                        clipboardText: "",
                        pasteOption: GC.Spread.Sheets.ClipboardPasteOptions.all
                    });
                    var j=0;
                    for(var i=tempRow;i<tsheet.getRowCount();i++){
                        tsheet.setRowHeight(i,fsheet.getRowHeight(j));
                        j++;
                    }

目前的效果如下图:
图片.png356868590.png

希望达到的效果如下图:
图片.png887942199.png

这要怎么实现


4 个回复

倒序浏览
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-4-28 17:51:25
沙发
您好,我这里用clipboardPaste指令进行操作成功实现了富文本的复制粘贴,并没有复现您所描述的问题,因此猜测和您代码中的样式修改以及JSON的替换有关,因此是否可以提供一份可供我们复现的demo方便我们更加深入的去调研问题所在
image.png427414550.png
回复 使用道具 举报
s先生
初级会员   /  发表于:2024-4-28 18:05:14
板凳
Richard.Huang 发表于 2024-4-28 17:51
您好,我这里用clipboardPaste指令进行操作成功实现了富文本的复制粘贴,并没有复现您所描述的问题,因此猜 ...

我刚才测试,发现一个新的单元格引用了这个单元格,这个新的单元格的内容变成了普通文本而不是富文本,这是什么情况
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-4-29 09:53:54
地板
s先生 发表于 2024-4-28 18:05
我刚才测试,发现一个新的单元格引用了这个单元格,这个新的单元格的内容变成了普通文本而不是富文本,这 ...

因为用公式“=A1”实际获取到的是A1单元格的value,而富文本您可以理解成是将value进行了样式设置后的内容,他本质值是没变的。而这个引用A1单元格的B1所展示的肯定是B1单元格上设置的样式。
上述规则是和Excel所保持一致的,您可以在Excel中将进行测试
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:5 天前
5#
您好,请问楼主的问题是否得到解决,如果仍然存在问题,欢迎继续跟帖询问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部