请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

李仔文

注册会员

11

主题

25

帖子

90

积分

注册会员

积分
90
李仔文
注册会员   /  发表于:2025-3-21 09:05  /   查看:100  /  回复:6
1金币
本帖最后由 Wilson.Zhang 于 2025-3-21 13:33 编辑

采用spread.import()导入excel文件,文件能导入成功但是我在回调函数里面通过spread.getActiveSheet().getDataSource()获取到的值始终为null,我想在回调函数中获取导入的Excel的数据并做一定的处理再传入给后端。怎么解决?

最佳答案

查看完整内容

理解在您的业务场景中数据已经保存在被导入的excel文件了,否则可以单独保存数据,这样就可以把数据单独拎出来了,在打开文件查看时通过数据绑定将数据填充在sheet中。同时也获取到了每个部门对应的数据,便于单独导出。 如果数据已经存在于Excel文件内,那咱们可以尝试想办法在Excel文件中保存每个部门对应的数据所在单元格区域。当部门A的成员点击下载时,通过其身份信息获取对应部门数据所在单元格区域信息,进而获取单元 ...

6 个回复

倒序浏览
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:2025-3-21 09:05:18
来自 7#
李仔文 发表于 2025-3-28 11:50
所有部门集中在一张sheet

理解在您的业务场景中数据已经保存在被导入的excel文件了,否则可以单独保存数据,这样就可以把数据单独拎出来了,在打开文件查看时通过数据绑定将数据填充在sheet中。同时也获取到了每个部门对应的数据,便于单独导出。

如果数据已经存在于Excel文件内,那咱们可以尝试想办法在Excel文件中保存每个部门对应的数据所在单元格区域。当部门A的成员点击下载时,通过其身份信息获取对应部门数据所在单元格区域信息,进而获取单元格中的数据。不过,这样获取所得的数据是平面化的,无法确定每一个数据的语义。

如果您能接收获取的数据没有语义,那咱们继续讨论下如何存储各部门数据所在单元格区域信息。SpreadJS支持对单元格设置标签,假设部门A的数据存储在单元格区域A1: E4,那么可以将该区域信息设置为A1单元格的标签,之后遍历A列单元格查询单元格上的标签内容。但是这种方法有局限性,比如要遍历单元格获取所有标签内容与部门A成员匹配校验,无用功较多;而且Excel文件不支持标签tag,导出的Excel文件会丢失这部分信息,再导入SpreadJS后也不可见原本存在的标签。

那么,可以考虑将部门数据所在单元格位置信息存储在一张独立的sheet中,从A1单元格起向右或者向下依次填充,并且隐藏该sheet以保护数据安全性。当下载按钮被点击时,读取被隐藏的这张sheet中的usedRange(这张sheet中只从左上角单元格开始在连续单元格中保存了各部门数据位置信息),据此读取相关单元格区域中的数据,之后将数据再保存为符合您业务需求的文件类型。

上述仅是基于最简单场景的方案规划,您可以结合实际情况变通。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-3-21 13:31:49
2#
您好!理解您应该在导出文件前设置了“包含绑定数据源”,数据源一经绑定便被填充在单元格内,“包含绑定数据源”导出后作为普通单元格数据存在,没有单独的属性比如“dataSource”专门记录保存数据源。

而且,咱们在通过Worksheet:setDataSource()时是在当前代码执行过程中的进程使用的资源,所以,您会发现在setDataSource后能够通过Worksheet:getDataSource()获取到一致的数据,因为此时这些在进程的内存空间中。

然而,一经导出,导出的文件便不再属于原来创建该文件的进程,自然无法从文件中通过Worksheet:getDataSource()获取到预期的数据。

您可以在保存文件的同时单独保存数据源,将文件和数据源分开管理。重新导入文件后根据文件信息在您的业务中获取对应的数据源。

您需要将数据传给后端实现什么业务呢?可以介绍下,咱们讨论看有没有其他解决思路。
回复 使用道具 举报
李仔文
注册会员   /  发表于:2025-3-21 14:05:53
3#
我想实现的是我的项目提供一个导入按钮,用于导入外部的excel,这个excel有很多部门数据,管理员账户导入成功后,其他不同权限角色的部门用户登录系统后可以下载管理员导入的表,但是只能下载管理员上传excel中属于自己部门的数据,因此我想让管理员导入excel后使用spread.import导入后在回调函数里面拿到excel表格中的数据存入后端数据库,当其他用户登录后下载他们自己的数据,我就可以去数据库查询并过滤出属于他们部门自己的数据
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-3-21 15:38:01
4#
李仔文 发表于 2025-3-21 14:05
我想实现的是我的项目提供一个导入按钮,用于导入外部的excel,这个excel有很多部门数据,管理员账户导入成 ...

对于您描述的需求,需要进一步确认如下细节:

1. 每个部门的数据集中在一张sheet中显示,还是每个部门的数据对应一张专属的sheet?
2. 如果每个部门的数据单独对应一张sheet,那A部门的用户登录系统后能看到所有sheet呢还是只能看到A部门的数据呢?
3. 这里说的数据是数据源吗?存储在后端的是整个json,还是将数据源中每个字段映射为数据库table中的属性列?
4. ”下载数据“是指下载sheet吗?或者下载某部门对应的数据源,那最终下载得到的什么?
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2025-3-28 11:30:32
5#
您好!由于您较长时间未回复,请教下您的问题解决的怎么样了?对于您之前告知的需求,我理解还需要进一步确认了解清楚您的需求。不然,只是下载文件的话,可以复制Workbook,然后删除权限以外的部门对应的sheet,仅保留权限内的sheet,再导出为结构化文件。

但是这样比较笼统,如果您的问题还未解决,您可以参考4楼的回复介绍下具体需求。
回复 使用道具 举报
李仔文
注册会员   /  发表于:2025-3-28 11:50:06
6#
所有部门集中在一张sheet
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部