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

QQ登录

只需一步,快速开始

lianh

注册会员

1

主题

4

帖子

33

积分

注册会员

积分
33
  • 41

    金币

  • 4

    帖子

  • 0

    精华

lianh
注册会员   /  发表于:2020-3-25 22:47  /   查看:28  /  回复:6
spreadjs的js api有getSpans来获取Sheet中的合并信息
如果要在后端获取,用gcexcel框架没找到对应的api
可有解决办法?

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

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

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


image.png191213988.png
image.png709658813.png

6 个回复

倒序浏览
AlexZ
超级版主   /  发表于:2020-3-26 09:29:28
沙发
遍历使用的区域,然后通过 MergeArea 获取

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

评分

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

查看全部评分

请点击评分,对我的服务做出评价!5分为非常满意!

葡萄城技术服务团队
官方网站:https://www.grapecity.com.cn/
SpreadJS v13.0 全新发布:更多单元格类型 + 更强表单设计能力
回复 使用道具 举报
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
超级版主   /  发表于:2020-3-26 15:26:12
5#
getMergeArea 就返回值就是合并的range,可以getRowcouunt和columncount

评分

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

查看全部评分

请点击评分,对我的服务做出评价!5分为非常满意!

葡萄城技术服务团队
官方网站:https://www.grapecity.com.cn/
SpreadJS v12.2 全新发布:打印、拖拽全面增强
回复 使用道具 举报
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
超级版主   /  发表于:2020-3-26 16:49:23
7#
也可以不用去重,你判断下是否是合并单元格的左上角单元格(i==row,j==col),这个时候再记录。其他位置忽略就好了。
请点击评分,对我的服务做出评价!5分为非常满意!

葡萄城技术服务团队
官方网站:https://www.grapecity.com.cn/
SpreadJS v12.2 全新发布:打印、拖拽全面增强
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册