tried to access method org.apache.poi.util.POILogg

本文详细介绍了在项目中导入Apache POI的三个关键组件(poi、poi-ooxml、poi-ooxml-schemas)时确保版本一致性的重要性,并提供了实践指导。


    'org.apache.poi:poi:3.14',
    'org.apache.poi:poi-ooxml:3.14',
    'org.apache.poi:poi-ooxml-schemas:3.14'

 

这三个包都需要导入, 并且版本要一致

转载于:https://my.oschina.net/u/2474820/blog/657185

在使用 Apache POI 进行 Excel 文件操作时,特别是涉及条件格式化规则(Conditional Formatting)时,可能会遇到 **XSSFConditionalFormattingRule** 构造函数访问权限问题。这类问题通常发生在尝试从 **XSSFConditionalFormattingSelfRule** 类访问受保护(protected)或私有(private)构造函数时,导致非法访问方法错误。 Apache POI 的 XSSF 模块用于处理 Office Open XML(.xlsx)格式文件,其中 `XSSFConditionalFormattingRule` 类用于定义条件格式规则。在某些版本中,该类的构造函数可能被定义为受保护或包私有(package-private),因此无法直接从外部类如 `XSSFConditionalFormattingSelfRule` 实例化。 一种常见的解决方案是通过反射(Reflection)机制访问构造函数,以绕过访问权限限制。示例代码如下: ```java import org.apache.poi.ss.usermodel.ConditionalFormattingRule; import org.apache.poi.xssf.usermodel.XSSFConditionalFormattingRule; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.lang.reflect.Constructor; public class ConditionalFormattingRuleExample { public static void main(String[] args) { try { XSSFWorkbook workbook = new XSSFWorkbook(); // 使用反射获取受保护的构造函数 Constructor<XSSFConditionalFormattingRule> constructor = XSSFConditionalFormattingRule.class .getDeclaredConstructor(XSSFWorkbook.class, String.class); constructor.setAccessible(true); XSSFConditionalFormattingRule rule = constructor.newInstance(workbook, "some condition"); // 使用 rule 对象进行后续操作 } catch (Exception e) { e.printStackTrace(); } } } ``` 通过上述方式,可以绕过访问权限限制并成功创建 `XSSFConditionalFormattingRule` 实例。然而,这种方法依赖于 Java 的反射机制,并且可能在 POI 的未来版本中失效,因此建议关注 Apache POI 官方文档和更新日志,以获取更稳定的解决方案 [^3]。 此外,也可以考虑使用 Apache POI 提供的工厂方法或辅助类来创建条件格式规则,例如通过 `Sheet` 接口的 `getSheetConditionalFormatting()` 方法获取 `SheetConditionalFormatting` 实例,然后调用其 `createConditionalFormattingRule()` 方法创建规则对象,避免直接访问构造函数 [^2]。 ```java import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.SheetConditionalFormatting; import org.apache.poi.ss.usermodel.ConditionalFormattingRule; public class ConditionalFormattingExample { public static void main(String[] args) { Sheet sheet = workbook.createSheet("Conditional Formatting"); SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting(); ConditionalFormattingRule rule = sheetCF.createConditionalFormattingRule("some condition"); // 使用 rule 对象进行后续操作 } } ``` 通过使用 Apache POI 提供的 API 接口来创建对象,可以有效避免因构造函数访问权限问题导致的非法访问错误 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值