找回密码
 立即注册

QQ登录

只需一步,快速开始

主音吉他手

初级会员

25

主题

105

帖子

292

积分

初级会员

积分
292
主音吉他手
初级会员   /  发表于:2023-10-10 10:47  /   查看:2163  /  回复:8
本帖最后由 Richard.Huang 于 2023-10-12 09:47 编辑

产品:SpreadJS

合并多个工作簿内容,再导出后,Excel是空的。

WX20231010-104353@2x.png
截屏2023-10-11 10.24.43.png
截屏2023-10-11 10.24.53.png

全部.xlsx

36.38 KB, 下载次数: 289

8 个回复

倒序浏览
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-10-10 13:34:15
沙发
您好,我将您的代码复制到我本地的demo中进行了测试,但是并没有发现存在相关问题,您可以参考我这个demo进行相关排查是否是其他原因导致了导出失败

1demo.rar

74.9 KB, 下载次数: 315

回复 使用道具 举报
主音吉他手
初级会员   /  发表于:2023-10-11 10:25:46
板凳
Richard.Huang 发表于 2023-10-10 13:34
您好,我将您的代码复制到我本地的demo中进行了测试,但是并没有发现存在相关问题,您可以参考我这个demo进 ...

功能点实现了,就是有点小瑕疵,导出的时候,会有一部分其他Excel表的内容(某些,不一是全部)跑到其他表,污染其他表。贴上两张图看看。
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-10-11 11:19:15
地板
主音吉他手 发表于 2023-10-11 10:25
功能点实现了,就是有点小瑕疵,导出的时候,会有一部分其他Excel表的内容(某些,不一是全部)跑到其他 ...

从图中无法获取造成该问题的原因,请问能否将您有问题的两份Excel文件上传后并详细描述您的操作,方便我们进行复现
回复 使用道具 举报
主音吉他手
初级会员   /  发表于:2023-10-11 14:09:19
5#
Richard.Huang 发表于 2023-10-11 11:19
从图中无法获取造成该问题的原因,请问能否将您有问题的两份Excel文件上传后并详细描述您的操作,方便我 ...

导出代码是
let list = res.data.data;

          //下载全部数据
          let datas = res.data.data.map((item) => {
            return item.info;
          });
          console.log(datas);
          for (let i = 0; i < datas.length; i++) {
            var temp = new GC.Spread.Sheets.Workbook();
            temp.fromJSON(JSON.parse(datas)); // 重命名样式表
            temp.getNamedStyles().forEach(function (namedStyle) {
              console.log(temp);
              for (let i = 0; i < list.length; i++) {
                let sheet = temp.getActiveSheet(i);
                let patternCloseList = list.pattern_close; //获取需要插入的输入坐标
                let rowColList = [];
                //获取坐标值转换行列数值
                patternCloseList.forEach((coordinate) => {
                  rowColList.push(
                    GC.Spread.Sheets.CalcEngine.formulaToRanges(
                      sheet,
                      coordinate
                    )[0].ranges[0]
                  );
                });
                // 行列数据打印清除相应数据
                rowColList.forEach((rowCol) => {
                  sheet.getCell(rowCol.row, rowCol.col).foreColor("#E6A23C");
                });

                // 附表单元格文字颜色判断
                let scheduleList = [];
                list.template_bind_show.forEach((coordinate) => {
                  scheduleList.push(
                    GC.Spread.Sheets.CalcEngine.formulaToRanges(
                      sheet,
                      coordinate
                    )[0].ranges[0]
                  );
                });

                // 显示单元格附表文字颜色
                scheduleList.forEach((rowCol) => {
                  sheet.getCell(rowCol.row, rowCol.col).foreColor("#66b1ff");
                });

                //获取坐标值给单元格赋值
                let statementBlock = list.pattern;
                statementBlock.forEach((block) => {
                  if (block.val != "") {
                    sheet.setValue(block.c, block.r, block.val); //获取坐标给单元格赋值
                  }
                });

                let looList = list.loop;
                looList.forEach((loop) => {
                  for (let i = 0; i < loop.tr.total; i++) {
                    let currentLine = i + loop.tr.endLine;
                    sheet.addRows(currentLine, 1);
                    sheet.copyTo(
                      currentLine - 1,
                      0,
                      currentLine,
                      0,
                      1,
                      sheet.getColumnCount(),
                      2047
                    );

                    sheet.copyTo(
                      currentLine - 1,
                      0,
                      currentLine,
                      0,
                      1,
                      sheet.getColumnCount(),
                      32
                    );
                    var rh = sheet.getRowHeight(
                      currentLine - 1,
                      GC.Spread.Sheets.SheetArea.viewport
                    );
                    // 挂起事件响应
                    sheet.suspendEvent();
                    sheet.setRowHeight(
                      currentLine,
                      rh,
                      GC.Spread.Sheets.SheetArea.viewport
                    );
                    // 恢复事件响应
                    sheet.resumeEvent();
                  }

                  loop.trData.forEach((child, idx) => {
                    let lineLength = idx + loop.tr.startLine;
                    //数据长度小于等于结束直接赋值
                    child.forEach((childLoop) => {
                      if (typeof childLoop.val == "number") {
                        childLoop.val = childLoop.val.toString();
                      }
                      sheet.setValue(
                        lineLength - 1,
                        Number(childLoop.column),
                        childLoop.val
                      );
                    });
                  });
                });
              }
              namedStyle.name = "sc" + i + "_" + namedStyle.name;
              spread2.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 + "_");
              spread2.suspendPaint();
              var newSheet = new GC.Spread.Sheets.Worksheet("sheet" + i + "_");
              newSheet.fromJSON(JSON.parse(sheetJSON));
              newSheet.name(newSheet.name() + i + "_" + j);
              spread2.addSheet(spread2.getSheetCount(), newSheet);
              spread2.resumePaint();
            }
          }
          spread2.removeSheet(0);

          let json = spread2.toJSON();
          excelIO.save(
            json,
            function (blob) {
              FaverSaver.saveAs(blob, "全部.xlsx");
            },
            function (e) {
              console.log(e);
              that.$message.error({
                message: e.errorMessage,
                duration: 1500,
              });
            }
          );
        }
回复 使用道具 举报
主音吉他手
初级会员   /  发表于:2023-10-11 14:10:04
6#
Richard.Huang 发表于 2023-10-11 11:19
从图中无法获取造成该问题的原因,请问能否将您有问题的两份Excel文件上传后并详细描述您的操作,方便我 ...

Excel上传了
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-10-11 16:56:36
7#
您好,因为我无法获取您返回的数据中的list等用于插入的信息,因此并没有复现您的问题,建议先将插入数据的操作去除后进行测试,并且,您的代码中getActiveSheet(i)传入了参数,猜测您是希望通过索引获取工作表,但是getActiveSheet的作用是获取激活的工作簿,因此您如果想要通过索引获取工作表建议使用getSheet方法,API可以参考:https://demo.grapecity.com.cn/sp ... s.Workbook#getsheet
回复 使用道具 举报
主音吉他手
初级会员   /  发表于:2023-10-11 19:36:26
8#
Richard.Huang 发表于 2023-10-11 16:56
您好,因为我无法获取您返回的数据中的list等用于插入的信息,因此并没有复现您的问题,建议先将插入数据的 ...

问题解决了,可以结帖了
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-10-12 09:46:21
9#
主音吉他手 发表于 2023-10-11 19:36
问题解决了,可以结帖了

好的,那么本贴就先结贴了,后续有其他问题的话欢迎随时开新贴提问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部