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

如何在PeopleCode中通过反射给SXSSFWorkbook传递Zip64Mode枚举常量?

问题分析与修复方案

核心问题

你的代码存在两个关键错误:

  1. 枚举值获取方式错误:PeopleCode中无法通过valueOf("Never")的方式正确获取Java枚举实例,这种写法返回的是类对象而非预期的Zip64Mode.Never枚举值,导致后续方法调用传递的参数无效。
  2. 无效参数导致配置未生效:由于传递的不是正确的枚举实例,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 &paramTypes = CreateJavaObject("java.lang.Class[]", GetJavaClass("org.apache.commons.compress.archivers.zip.Zip64Mode"));

// 获取setZip64Mode方法
Local JavaObject &setZip64ModeMethod = &_workbook.getClass().getDeclaredMethod("setZip64Mode", &paramTypes);

// 调用方法,传递正确的枚举参数
&setZip64ModeMethod.invoke(&_workbook, CreateJavaObject("java.lang.Object[]", &zip64Never));

&_class = Null;

关键说明

  • 在PeopleCode中,Java枚举的常量是以枚举类的静态字段形式存在的,直接通过GetJavaClass(枚举类全路径).常量名即可获取对应的枚举实例,这是最稳定可靠的方式。
  • 请确保Apache Commons Compress版本与POI版本兼容,避免因依赖版本不匹配导致枚举类无法正常加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:25:19