找回密码
 立即注册

QQ登录

只需一步,快速开始

lianh

注册会员

2

主题

8

帖子

66

积分

注册会员

积分
66
最新发帖
lianh
注册会员   /  发表于:2020-3-25 22:47  /   查看:2414  /  回复:6
本帖最后由 lianh 于 2020-6-16 17:41 编辑

spreadjs的js api有getSpans来获取Sheet中的合并信息
如果要在后端获取,用gcexcel框架没找到对应的api
可有解决办法?

我们的需求是这样的,用户在spreadjs上编辑数据后,保存时要将excel中每一行的数据读取并保存
对于有合并行的情况,要视为一条数据,该行中没有被合并的行,视为该数据的多值属性

如下图:
image.png868455200.png
这种情况下,视为1条数据,只不过步骤是多值

因此我需要在后台获取合并信息


image.png191213988.png
image.png709658813.png

6 个回复

倒序浏览
AlexZ讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-3-26 09:29:28
沙发
遍历使用的区域,然后通过 MergeArea 获取

worksheet.Range["B1"].MergeArea 返回的是一个 range

评分

参与人数 1满意度 +5 收起 理由
lianh + 5 赞一个!

查看全部评分

回复 使用道具 举报
lianh
注册会员   /  发表于:2020-3-26 11:54:14
板凳
image.png592767028.png
image.png897277831.png
通过getUsedRang获取使用的区域,再遍历,使用getMergeArea().getMergeCells()来判断每个单元格是否未合并的
但如图所示,虽然能取得到每个单元格是否合并,也没有明显的规律将它们解析为2条数据,即row 2-4,5-8分别为一条数据

在前端的spreadjs中,用getSpans可以清晰的获取合并单元格信息,例如:
image.png258557433.png
结果中的row和rowCount这2个属性就可以知道哪几行数据视为1条

因此使用gcexcel框架时有办法解决这个问题吗
回复 使用道具 举报
lianh
注册会员   /  发表于:2020-3-26 14:11:22
地板
AlexZ 发表于 2020-3-26 09:29
遍历使用的区域,然后通过 MergeArea 获取

worksheet.Range["B1"].MergeArea 返回的是一个 range



通过getUsedRang获取使用的区域,再遍历,使用getMergeArea().getMergeCells()来判断每个单元格是否未合并的
但如图所示,虽然能取得到每个单元格是否合并,也没有明显的规律将它们解析为2条数据,即row 2-4,5-8分别为一条数据

在前端的spreadjs中,用getSpans可以清晰的获取合并单元格信息,例如:

结果中的row和rowCount这2个属性就可以知道哪几行数据视为1条

因此使用gcexcel框架时有办法解决这个问题吗
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-3-26 15:26:12
5#
getMergeArea 就返回值就是合并的range,可以getRowcouunt和columncount

评分

参与人数 1满意度 +5 收起 理由
lianh + 5 赞一个!

查看全部评分

回复 使用道具 举报
lianh
注册会员   /  发表于:2020-3-26 15:33:29
6#
本帖最后由 lianh 于 2020-3-26 15:37 编辑
dexteryao 发表于 2020-3-26 15:26
getMergeArea 就返回值就是合并的range,可以getRowcouunt和columncount

刚试了下,谢谢了之前是直接用sheet.getUsedRange().getMergeArea() 得出的结果让我有些困惑

1.先用sheet.getUsedRange()获取使用的区域
2.遍历单元格
   sheet.getUsedRange().get(i, j).getMergeArea().getMergeCells() 判断是否属于合并区域
3.再获取该合并区域的rowCount和columnCount
   sheet.getUsedRange().get(i, j).getMergeArea().getRowCount()
   sheet.getUsedRange().get(i, j).getMergeArea().getColumnCount()
4.最后对结果去重,一个合并区域内的每一行的getMergeArea().getRowCount()结果是一样的
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-3-26 16:49:23
7#
也可以不用去重,你判断下是否是合并单元格的左上角单元格(i==row,j==col),这个时候再记录。其他位置忽略就好了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部