ColdFusion 2021调用XSSFSheet的setRepeatingRows方法重载匹配错误
ColdFusion 2021迁移后调用POI setRepeatingRows方法报错的解决办法
问题场景
将代码从ColdFusion 2018迁移至ColdFusion 2021(Update 6)后,执行以下设置Excel重复行的POI代码时出现错误:
cellRange = createObject( "java", "org.apache.poi.ss.util.CellRangeAddress" ).init( 1, 1, 0, 0 ); document = spreadSheetNew( "Demo", true ); poiWorkBook = document.getWorkBook(); for( i = 0; i < poiWorkBook.getNumberOfSheets(); i++ ){ poiSheet = poiWorkBook.getSheetAt( i ); try{ poiSheet.setRepeatingRows( cellRange ); }catch( any e ){ writeDump( var=poiSheet, label="poiSheet" ); writeDump( var=cellRange, label="cellRange" ); writeDump( var = e, label="Sheet #i#" ); } }
错误提示
Either there are no methods with the specified method name and argument types or the setRepeatingRows method is overloaded with argument types that ColdFusion cannot decipher reliably
中文释义:找不到指定方法或无法可靠解析setRepeatingRows的重载方法
已尝试的无效操作
- 更新ColdFusion 2021至最新补丁
- 升级JDK至官方支持版本(当前使用JDK 11.0.19)
- 修改变量名称
解决方法
通过在createObject时指定POI 4.1.2版本创建CellRangeAddress对象,问题得以解决,修正后的初始化代码如下:
cellRange = createObject( "java", "org.apache.poi.ss.util.CellRangeAddress", "poi", "4.1.2" ).init( 1, 1, 0, 0 );
原因分析
ColdFusion 2021附带的POI库版本与ColdFusion 2018不一致,直接创建的CellRangeAddress对象版本与poiSheet依赖的POI版本不匹配,导致ColdFusion无法正确识别重载的setRepeatingRows方法。指定明确的POI版本后,对象版本统一,方法调用恢复正常。
内容的提问来源于stack exchange,提问作者Paolo
相关产品推荐
相关产品推荐

