添加大型查询时,如何解决SpreadSheetAddRows函数崩溃的问题?

亚历克斯:

EDIT3:感谢@Leigh的帮助,我已将问题范围缩小到查询中的日期列。使用原始代码集和POI,当SpreadSheetAddRows()尝试添加包含类似日期的单元格的非常大的查询时,页面崩溃。我在这里做了一个错误报告:https : //bugbase.adobe.com/index.cfm?event= bug &id=3432184


我有一个查询,我要添加到一个spreadsee对象,当查询的行数过多时(在本示例中为18583),该查询似乎出错。确切的错误如下:

java.lang.ArrayIndexOutOfBoundsException: -32735
at java.util.ArrayList.get(ArrayList.java:324)
at org.apache.poi.hssf.model.WorkbookRecordList.get(WorkbookRecordList.j ava:50)
at org.apache.poi.hssf.model.Workbook.getExFormatAt(Workbook.java:787)
at org.apache.poi.hssf.usermodel.HSSFCell.getCellStyle(HSSFCell.java:901 )
at org.apache.poi.hssf.usermodel.HSSFSheet.autoSizeColumn(HSSFSheet.java :1727)
at coldfusion.excel.Excel.autoResize(Excel.java:1246)
at coldfusion.excel.Excel.autoResize(Excel.java:1240)
at coldfusion.excel.Excel.addRows(Excel.java:1214)
at coldfusion.runtime.CFPage.SpreadSheetAddRows(CFPage.java:7089) at coldfusion.runtime.CFPage.SpreadSheetAddRows(CFPage.java:7076)

以下是相关代码:

<cfset xls = spreadsheetNew()>
<cfset spreadsheetAddRow(xls, arrayToList( qryTest.getMeta().getColumnLabels() ))>
<cfset SpreadsheetFormatRow(xls, {bold=true,fgcolor="brown",color="white"}, 1)>
<cfset SpreadsheetAddRows(xls, qryTest)>
<cfheader name="Content-Disposition" value="attachment; filename=#filename#">
<cfcontent variable="#spreadsheetReadBinary(xls)#" reset="yes" type="application/vnd.ms-excel">

编辑:我以前确实成功使用过cfspreadsheet,但它不会产生带有标题的电子表格(而且还有需要创建一个临时文件来提供服务的缺点。)


EDIT2:根据@Leigh建议,我更新了CF9 / lib文件夹中的POI。现在,错误已更改为以下内容:

<cfset SpreadsheetFormatRow(xls, {bold=true,fgcolor="brown",color="white"}, 1)> 给出以下消息:org.apache.poi.hssf.util.HSSFColor.getIndexHash()Ljava / util / Hashtable;

错误代码:

java.lang.NoSuchMethodError:
org.apache.poi.hssf.util.HSSFColor.getIndexHash()Ljava/util/Hashtable;
at coldfusion.excel.Excel.getHSSFColor(Excel.java:2094)
at coldfusion.excel.Excel.findFont(Excel.java:2237)
at coldfusion.excel.Excel.getCellStyle(Excel.java:2318)
at coldfusion.excel.Excel.formatRow(Excel.java:2948)
at coldfusion.excel.Excel.formatRow(Excel.java:2963)
at coldfusion.excel.Excel.formatRow(Excel.java:2981)
at coldfusion.runtime.CFPage.SpreadSheetFormatRow(CFPage.java:7268)

注释掉该行,现在再次崩溃: <cfset SpreadsheetAddRows(xls, qryTest)>

错误代码:

java.lang.IllegalStateException: The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook 
at org.apache.poi.hssf.usermodel.HSSFWorkbook.createCellStyle(HSSFWorkbook.java:1120) 
at org.apache.poi.hssf.usermodel.HSSFWorkbook.createCellStyle(HSSFWorkbook.java:73) 
at coldfusion.excel.Excel.addRow(Excel.java:1323)
at coldfusion.excel.Excel.addRows(Excel.java:1203) 
at coldfusion.runtime.CFPage.SpreadSheetAddRows(CFPage.java:7089) 
at coldfusion.runtime.CFPage.SpreadSheetAddRows(CFPage.java:7076) 
利:

我怀疑它根本与CF或JRE版本无关。至少不是直接。听起来像POI中的错误。

如果查看该异常,则清楚地表明,当CF调用试图自动调整列大小(添加查询数据之后)的POI方法时,就会发生此问题。快速搜索发现了一些类似ArrayIndexOutOfBoundsException错误的报告,HSSFSheet.autoSizeColumn 如下所示(恰好提到了ColdFusion):

如果在设置了超过32767个单元格后尝试在列上使用org.apache.poi.hssf.usermodel.HSSFSheet和方法autosizecolumn(int),则会引发ArrayOutOfBoundsException。

根据错误报告,此问题存在于3.5版中,该版本与ColdFusion 9包含的相同(主要)版本。一位POI开发人员建议,此问题已在更高版本中得到解决。因此,您可以尝试更新POI jar。除此之外,如果您可以将一个重现该问题的测试用例组合在一起,则可能要提交一个错误报告

以前我确实成功使用了cfspreadsheet,但它不会产生带有标题的电子表格(而且还有需要创建一个临时文件来提供服务的缺点)。

cfspreadsheet可能不会尝试像spreadsheetAddRows那样自动调整列的大小,因此不会发生错误。因此,显而易见的解决方法(不是一个很好的解决方法)是避免使用试图调整列宽大小的函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何解决在Android Studio 4中启动时崩溃的问题?

如何解决Mac OS X应用程序崩溃时的libdispatch问题?

在SeparateProcess 执行模式下使用WebView 时如何解决崩溃问题?

如何解决def函数运行问题

如何解决悬停时弹出的问题?

如何解决/修复Azure Function主机崩溃的问题?

如何解决FTP获取Excel文件崩溃的问题?

如何解决某些SELECT语句导致Excel崩溃的问题?

如何解决和解决lambda函数问题?

尝试将节点添加到 Kubernetes 集群时如何解决超时问题?

添加bootsrap流明主题时,如何解决MVC 5中的首页问题?

运行测试时如何解决代码覆盖率找不到函数的问题?

部署functions.pubsub.schedule时如何解决创建函数失败的问题

当我尝试更新函数的输入变量时,如何解决Shiny的反应性问题

在Laravel中使用for else循环和紧凑函数时,如何解决此问题?

当我尝试从函数返回 2d 结构时如何解决这个问题

如何解决此问题的sql查询才能正常工作?

如何解决SPARQL查询返回的数据集中的Unicode问题?

查询功能的问题 - 如何解决?| 谷歌表格

如何解决子查询返回多于1行的问题

如何解决sql查询中的性能问题?

如何解决这个数组查询/更新问题?

如何解决Firebase项目添加配额的问题?

如何解决“构建主来宾添加模块失败”的问题

注册后如何解决向ManyToMany添加实体的问题

Django-如何解决添加成员的问题?

如何解决类函数未定义的问题?

我该如何解决VBA FORMAT函数问题?

如何解决递归函数中的变量增量问题