找回密码
 立即注册

QQ登录

只需一步,快速开始

xujie-joe
金牌服务用户   /  发表于:2023-3-13 16:20  /   查看:1464  /  回复:8
1金币
通过SpreadJS插入浮动对象
let imageName = "图" + 1;


let ps = sheet.shapes.addPictureShape(imageName, reader.result, left, top, picWidth, imgHeight);

然后GcExcel需要获取到这个imageName,这边通过这个方法:
worksheet.getShapes().get(0).getName();   这个方法返回的是:picture 5    之类的结果,
但是如上图片名字并不是这个结果



但是我通过前端代码:item.znb.Cj  能获取到
  1. sheet.shapes.all().forEach(item=> {
  2.     const imgNo = parseInt(item.znb.Cj.substring(1));
  3.       });
复制代码
image.png129490050.png

想知道GCExcel如何获取到这个:图1

ssjson如附件,图片在第三个sheet



gongyi.ssjson

1.57 MB, 下载次数: 312

最佳答案

查看完整内容

你好,gcexcel在合并workbook的过程中,确实会对一些元素的名称做处理(避免重名导致的冲突或者其他问题) 建议的解决方案 在合并前先获取所有图片名称,在合并后再设置回去

8 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-3-13 16:20:16
来自 7#
你好,gcexcel在合并workbook的过程中,确实会对一些元素的名称做处理(避免重名导致的冲突或者其他问题)

建议的解决方案
在合并前先获取所有图片名称,在合并后再设置回去
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-3-13 16:52:42
2#
没能重现你说的问题,你可以检查一下是不是sheet搞错了

  1.                                 IWorksheet sheet=workbook.getActiveSheet();
  2.                 for(IShape shape:sheet.getShapes()){
  3.                         String str=shape.getName();
  4.                         System.out.println(str);

  5.                 }
  6.                 System.out.println(sheet.getShapes().get(0).getName());
复制代码


输出结果
image.png388319701.png
回复 使用道具 举报
xujie-joe
金牌服务用户   /  发表于:2023-3-13 17:55:03
3#
Richard.Ma 发表于 2023-3-13 16:52
没能重现你说的问题,你可以检查一下是不是sheet搞错了

sorry,我刚刚再检查了一遍代码,

我先说下我这边的业务场景:
1:产线有多道工序,每个工序对应一个SOP,即对应一个Excel文档。
2:在编辑完文档后,需要将两份Excel合并生成一份PDF
3:生成的PDF需要指定6张图片一页,但是有可能用户上传8张图片后,把第3张删除了,那么此时:1,2,4,5,6   张图片一页
所以我这边会在上传图片的时候,指定图片名字为:图1   这样,GCExcel通过解析这个名字来确定分页

我这边会将两个ssjson,通过GCExcel合并到一个Workbook里面,代码如下
  1. // 将detailDocList放到一个Excel中
  2.         Workbook sectionWorkbook = new Workbook();
  3.         IWorksheets sectionWorksheets = sectionWorkbook.getWorksheets();
  4.         // 循环detailDocList,将sheet汇总到sectionWorkbook里面
  5.         for (int i = 0; i < docs.size(); i++) {
  6. // ssjson的内容
  7.             String docContent = sheetSopProjectDetailDoc.getDocContent();
  8.             if (i == 0) {
  9.                 sectionWorkbook.fromJson(docContent);
  10.             } else {
  11.                 Workbook workbook = new Workbook();
  12.                 workbook.fromJson(docContent);
  13.                 // 由于Excel中sheet名字不能重复,所以sheet名字加上工序名字的前缀
  14.                 String preName = "test";

  15.                 IWorksheets worksheets = workbook.getWorksheets();
  16.                 for (IWorksheet worksheet : worksheets) {
  17.                     worksheet.setName(preName + worksheet.getName());
  18.                     IWorksheet add = sectionWorksheets.add();
  19.                     add.fromJson(worksheet.toJson());
  20.                 }
  21.             }
  22.         }
复制代码
然后转PDF的时候,针对第4个,第8个sheet中的图片名字进行判断,然后分页

第4个sheet中的名字是正确的,第8个sheet中的名字就不对了

image.png181485594.png


2.ssjson

835.83 KB, 下载次数: 332

1.ssjson

1.6 MB, 下载次数: 303

回复 使用道具 举报
xujie-joe
金牌服务用户   /  发表于:2023-3-13 17:57:18
4#
附件两个Demo的ssjson,如果把这两个通过GCExcel放入同一个Workbook
会发现第二个ssjson里面的图片名字变了
回复 使用道具 举报
xujie-joe
金牌服务用户   /  发表于:2023-3-13 18:06:38
5#
刚开始两个ssjson里面的图片名字都是:图1   这样的
通过Workbook合并后,第二个被合并进去的ssjson里面的图片名字变了
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-3-13 18:19:31
6#
可以复现问题,有可能是设计就是i这样,需要和研发确认一下然后给你会回复
回复 使用道具 举报
xujie-joe
金牌服务用户   /  发表于:2023-3-16 09:34:14
8#
Richard.Ma 发表于 2023-3-15 18:24
你好,gcexcel在合并workbook的过程中,确实会对一些元素的名称做处理(避免重名导致的冲突或者其他问题)
...

好的,谢谢
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-3-16 10:18:26
9#
不客气
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部