找回密码
 立即注册

QQ登录

只需一步,快速开始

RainYan

初级会员

49

主题

172

帖子

491

积分

初级会员

积分
491
RainYan
初级会员   /  发表于:2024-9-5 16:16  /   查看:243  /  回复:15
20金币
我上传了一个EXCEL 然后我用sheet.toJSON将每个sheet表单存储在后端 ,但是我再反序列化回显时候,样式全部没了  设置了ignoreStyle:false的,这是为什么呢

15 个回复

倒序浏览
RainYan
初级会员   /  发表于:2024-9-5 16:44:45
沙发
我之前问过 你们说的是我导入的时候 样式是存在workbook级别上的 所以我每个表单转JSON的时候 样式就没有 ,那可不可以把样式分到sheet上去呢 再保存呢 你们提供的这个办法我这儿也不太适用 image.png558657226.png
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-5 16:47:20
板凳
您好!Workbook和Worksheet各有一部分样式,您序列化的对象是每张Worksheet,这便会在序列化结果中缺少Workbook上的样式,最终导致序列化前后每张Worksheet的样式不一致。请问您的需求场景是怎样的呢?咱们一块讨论下。
回复 使用道具 举报
RainYan
初级会员   /  发表于:2024-9-5 17:01:28
地板
我上传好了excel后需要保存下来 业务需求是需要把workbook 的sheet每个拆出来保存而不是全部保存 我想的就是遍历sheet存储他们的JSON。然后就出现这个问题了 再次打开就像你说的样式是在大的上面的 我拆开其实样式就没了 不仅是样式有些他的显示比如说导入进来单元格是百分数显示 我自己保存后再打开就不是了就是小数了 没有百分数保存了
回复 使用道具 举报
RainYan
初级会员   /  发表于:2024-9-5 17:09:56
5#
Wilson.Zhang 发表于 2024-9-5 16:47
您好!Workbook和Worksheet各有一部分样式,您序列化的对象是每张Worksheet,这便会在序列化结果中缺少Work ...

我上传好了excel后需要保存下来 业务需求是需要把workbook 的sheet每个拆出来保存而不是全部保存 我想的就是遍历sheet存储他们的JSON。然后就出现这个问题了 再次打开就像你说的样式是在大的上面的 我拆开其实样式就没了 不仅是样式有些他的显示比如说导入进来单元格是百分数显示 我自己保存后再打开就不是了就是小数了 没有显示百分数了
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-5 18:00:13
6#
RainYan 发表于 2024-9-5 17:01
我上传好了excel后需要保存下来 业务需求是需要把workbook 的sheet每个拆出来保存而不是全部保存 我想的就 ...

如您所说保存的是单个Worksheet的序列化数据,那打开时是通过一个Workbook打开多张Worksheet呢还是Workbook中只打开一个Worksheet呢?
回复 使用道具 举报
RainYan
初级会员   /  发表于:2024-9-5 18:02:09
7#
Wilson.Zhang 发表于 2024-9-5 18:00
如您所说保存的是单个Worksheet的序列化数据,那打开时是通过一个Workbook打开多张Worksheet呢还是Workbo ...

把他们又放回到一个workbook里面回显
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-6 09:32:12
8#
RainYan 发表于 2024-9-5 18:02
把他们又放回到一个workbook里面回显

根据您提供的信息,了解到您的场景中有一个包含了多张Worksheet的Workbook,需要对该Workbook中的每张Worksheet单独序列化保存,而又需要将所有Worksheet的序列化文件读取到同一个Workbook中回显。那何不对整个Workbook序列化呢?虽然单独对每个Worksheet序列化了,但这些Worksheet在同一个Workbook中,其实就是对整个Workbook序列化。而且,后续也要将每个Worksheet的序列化文件读入到同一个Workbook,初步理解还是好奇为什么不直接序列化整个Workbook呢?要想在序列化中保留Worksheet中的样式效果,还是得要序列化整个Workbook。


针对这样的场景,我们向您提供如下解决方案:
1. 复制Workbook,记为CopiedWorkbook。
2. 在CopiedWorkbook中仅保留某个Worksheet,删除其他Worksheet。
3. 序列化CopiedWorkbook,记作CopiedJSON。
4. 对Workbook中的每张Worksheet作如上处理,代替单独序列化每个Worksheet。
5. 读入时,创建新的Workbook实例,在该Workbook实例中读入一个CopiedJSON,即为NewWorkbook。
6. 获取NewWorkbook中的命名样式,即Workbook:getNamedStyles(),记为NamedStyles。
7. 创建Worksheet实例,令其读入NewWorkbook中唯一Worksheet的序列化结果(即Worksheet:toJSON()),记为NewWorksheet。
8. 为NewWorksheet添加NamedStyles中的每个样式,这样便能令每张Worksheet保留原先的样式。
9. 再创建一个Workbook,将第8步得到的Worksheet逐一添加至该Workbook中即可复原。

您可以尝试下如上方案,看是否能满足您的需求。

回复 使用道具 举报
RainYan
初级会员   /  发表于:2024-9-6 12:04:40
9#
Wilson.Zhang 发表于 2024-9-6 09:32
根据您提供的信息,了解到您的场景中有一个包含了多张Worksheet的Workbook,需要对该Workbook中的每张Wor ...

   企业微信截图_17255954049264.png847971191.png 我用您的方法改 遇到个问题 我这样复制workbook 再删除表 老是说我索引超出区间 这是什么问题呢
image.png938215637.png
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-6 13:31:13
10#
RainYan 发表于 2024-9-6 12:04
我用您的方法改 遇到个问题 我这样复制workbook 再删除表 老是说我索引超出区间 这是什么问题呢

您图示中的代码未能成功实例化Workbook,通过new关键字创建对象需要在构造函数后加上括号。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部