请选择 进入手机版 | 继续访问电脑版
Dtttax
金牌服务用户   /  发表于:2026-3-3 10:40  /   查看:34  /  回复:3
目的是两个sheet都删除第四行一下的行,但删除后每个表的rowCount都不是4,代码:


IWorksheet worksheet1 = workbook.getWorksheets().get(0);
IWorksheet worksheet2 = workbook.getWorksheets().get(1);
getRange(worksheet1,3,worksheet1.getRowCount()-1).delete();
getRange(worksheet2,3,worksheet2.getRowCount()-1).delete();
public static IRange getRange(IWorksheet sheet, int row,int endRow) {
        int start = row + 1;
        int end = endRow +1;
        String rangeStr = start+":"+end;
        return sheet.getRange(rangeStr);
    }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

3 个回复

爱迪生
超级版主   /  发表于:6 天前
沙发
getRowCount() 返回的是工作表的总行容量(如 1048576),而不是有数据的最后一行。

根本原因:


// getRowCount() = 1048576(Excel最大行数),不是数据行数
getRange(worksheet1, 3, worksheet1.getRowCount()-1).delete()
// 等价于尝试删除 "4:1048576" 的范围
修复方案 —— 使用 getUsedRange() 获取实际数据行数:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Dtttax
金牌服务用户   /  发表于:6 天前
板凳
本帖最后由 Dtttax 于 2026-3-3 18:49 编辑
爱迪生 发表于 2026-3-3 15:41
getRowCount() 返回的是工作表的总行容量(如 1048576),而不是有数据的最后一行。

根本原因:

workbook.toJson后用spreadjs打开看两个sheet的rowCount,或者直接看json里面的rowCount。貌似跟选中的单元格有关,如果activeRow在14行,删除后rowCount不会变成3,而是15
回复 使用道具 举报
爱迪生
超级版主   /  发表于:5 天前
地板
本帖最后由 爱迪生 于 2026-3-4 14:52 编辑


GCExcel的toJson()方法在计算rowCount时采用以下逻辑:
rowCount = max(实际数据的最大行号 + 1, activeRow + 1)
即使删除了数据行,只要activeCell仍然在更大的行号上,导出的JSON中的rowCount就会包含activeCell所在的行号。
SpreadJS一样有getUsedRange 方法,通过getUsedRange获取有数据的区域:https://demo.grapecity.com.cn/sp ... t-used-range/purejs
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部