如何在PeopleCode中通过反射给SXSSFWorkbook传递Zip64Mode枚举常量?
问题分析与修复方案
核心问题
你的代码存在两个关键错误:
- 枚举值获取方式错误:PeopleCode中无法通过
valueOf("Never")的方式正确获取Java枚举实例,这种写法返回的是类对象而非预期的Zip64Mode.Never枚举值,导致后续方法调用传递的参数无效。 - 无效参数导致配置未生效:由于传递的不是正确的枚举实例,
setZip64Mode方法并未实际修改SXSSFWorkbook的Zip64配置,因此输出文件大小没有变化。
修复后的代码
&_workbook = CreateJavaObject("org.apache.poi.xssf.streaming.SXSSFWorkbook"); // 正确获取Zip64Mode.Never枚举实例 Local JavaObject &zip64Never = GetJavaClass("org.apache.commons.compress.archivers.zip.Zip64Mode").Never; // 构造方法参数类型数组 Local JavaObject ¶mTypes = CreateJavaObject("java.lang.Class[]", GetJavaClass("org.apache.commons.compress.archivers.zip.Zip64Mode")); // 获取setZip64Mode方法 Local JavaObject &setZip64ModeMethod = &_workbook.getClass().getDeclaredMethod("setZip64Mode", ¶mTypes); // 调用方法,传递正确的枚举参数 &setZip64ModeMethod.invoke(&_workbook, CreateJavaObject("java.lang.Object[]", &zip64Never)); &_class = Null;
关键说明
- 在PeopleCode中,Java枚举的常量是以枚举类的静态字段形式存在的,直接通过
GetJavaClass(枚举类全路径).常量名即可获取对应的枚举实例,这是最稳定可靠的方式。 - 请确保Apache Commons Compress版本与POI版本兼容,避免因依赖版本不匹配导致枚举类无法正常加载。
内容的提问来源于stack exchange,提问作者Veteris Schola
相关产品推荐
相关产品推荐

