找回密码
 立即注册

QQ登录

只需一步,快速开始

动爸
金牌服务用户   /  发表于:2024-8-28 09:44  /   查看:619  /  回复:3
本帖最后由 动爸 于 2024-8-28 10:15 编辑

1、创建了一个模版,行数是56行,其中只有27行前有使用,后面的都没有使用。然后在后台使用gcexcel插入N行后,发现行数并没有发生变化,而是把我后面留的20多行的给填充上数据了。建议赶紧修复这个BUG。
2、另外使用opSheet.getUsedRange().getRowCount()时,有的显示27行,有的显示56行。

关键代码:
IRange insertRange = opSheet.getRange(posRow, headerStartCol);
for (int i = 0; i < totalInsertCount; i++) {
    insertRange.getEntireRow().insert(); //插入一行
}
文件: batchSave.ssjson (238.13 KB, 下载次数: 53)

3 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-8-28 14:54:08
沙发
GCEXCEL目前本身是没有行列数的概念的,getUsedRange拿到的是使用的区域,且getUsedRange根据传入的参数不同,获取到的区域也不同,
如果你是要拿到这个固定的56行,应该是通过getRowCount获取,实际上getRowCount也只是取的ssjson中本身存储的行数,也就是在spreadjs中显示的总行数

如上所说,“在后台使用gcexcel插入N行后,发现行数并没有发生变化,”如果说的是getUsedRange没变化的话,就是正常的

但是我没有看明白你说的“把我后面留的20多行的给填充上数据了”,这个是如何复现,是要继续用数据填充模板才能复现吗

回复 使用道具 举报
动爸
金牌服务用户   /  发表于:2024-8-29 09:10:14
板凳
Richard.Ma 发表于 2024-8-28 14:54
GCEXCEL目前本身是没有行列数的概念的,getUsedRange拿到的是使用的区域,且getUsedRange根据传入的参数不 ...

问题一:template.ssjson文件实际行数56,最后一行数据是29行,使用getUsedRange().getRowCount()的值是27;template_usedrang56.ssjson文件实际行数56,最后一行数据是49行,使用getUsedRange().getRowCount()的值是56;
为什么会出现这种情况呢?
问题二:原来7.1.3版本时,insert()方法时,sheet.getRowCount()会自动增加一行的。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-8-29 15:39:51
地板
1
template_usedrang56.ssjson文件实际行数56,最后一行数据是49行,使用getUsedRange().getRowCount()的值是56;


前面沟通过,getUsedRange根据传入的参数不同,获取到的区域也不同,如果不传参数,默认的话就是All,
image.png165865782.png

会根据上面所有的usedrangetype类型来获取,在你这个文件中,其中的AXIS类型获取到的就是56,这种一般是设置过行高列宽以及行列分组,就会影响

你说的“最后一行数据是49行”实际上我看是设置了数据和样式的最后一行,如果要来获取,那么应该是这样写
  1. int lr=workbook.getWorksheets().get("原始记录").getUsedRange(EnumSet.of(UsedRangeType.Data,UsedRangeType.Style)).getLastRow();
复制代码



2.这个需要再调查一下,有进展我会在帖子中再更新
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部