You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用反射获取Apache POI中XSSFSheet缩放级别时遇参数错误问题

问题:反射调用XSSFSheet的getDefaultSheetView方法抛出参数数量异常

我想要获取目标XSSFSheet的当前缩放级别,查阅Apache POI官方文档后发现没有对应的getter方法。于是尝试通过反射调用与设置缩放级别逻辑相似的getDefaultSheetView方法,但运行时抛出了java.lang.IllegalArgumentException: wrong number of arguments异常。

我的代码如下:

private static long getZoomLevel(XSSFSheet sheet) throws Exception {
Method m = XSSFSheet.class.getDeclaredMethod("getDefaultSheetView", boolean.class);
m.setAccessible(true);
CTSheetView sheetView = (CTSheetView)m.invoke(sheet);
return sheetView.getZoomScale();
}

XSSFSheet类中该方法的定义如下:

private CTSheetView getDefaultSheetView(final boolean create) {
....
}

原因及解决方案

异常的直接原因是反射调用方法时未传入方法所需的参数。

从getDefaultSheetView的方法定义可知,它需要接收一个boolean类型的参数create,但你调用m.invoke(sheet)时仅传入了目标对象sheet,缺少了这个必填的boolean参数,因此触发了参数数量不匹配的异常。

修复后的代码如下(传入false表示仅获取现有视图,无需创建新的):

private static long getZoomLevel(XSSFSheet sheet) throws Exception {
    Method m = XSSFSheet.class.getDeclaredMethod("getDefaultSheetView", boolean.class);
    m.setAccessible(true);
    // 补充boolean参数,这里传入false
    CTSheetView sheetView = (CTSheetView) m.invoke(sheet, false);
    return sheetView.getZoomScale();
}

内容的提问来源于stack exchange,提问作者Flash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:10:02