Excel导出另一个表单引用错误

我正在从事BIRT报告。 在这个我可以成功导出Excel公式时导出到Excel使用spudsoft发射器默认与BIRT。 问题是,当我从另一张工作表引用一个工作表,它会抛出错误。 和BIRT报告一样,我有两个表格:第一个表格名称是table1,第二个表格名称是table2(所以这个名称被用作表格名称),第一个表格总是有分页符,所以两个表格将被创build。 当我将其导出到Excel中时,Excel报表中包含两张工作表'table1'和'table2'的报表已成功创build(没有引用另一工作表的公式)。

当table1(sheet1)的一列从table2(sheet2)引用时,它的引用和导出报告成功工作。

示例-1 table2中的列引用table1列的值(B,该table2 dataelement onRender事件的代码是

if((reportContext.getRenderOption().outputFormat == "xlsx" )||(reportContext.getRenderOption().outputFormat == "XLSX")) { p = row.__rownum; this.text="table1!B"+prow; } 

它会正确导出并引用table1值。

但是当引用table1中的table2列时,这次会抛出error.Sheet index(-1)超出范围(0..0)

示例-2 table1中的列引用table2列(C)的值,该table1 dataelement onRender事件的代码是

 if((reportContext.getRenderOption().outputFormat == "xlsx" )||(reportContext.getRenderOption().outputFormat == "XLSX")) { p = row.__rownum; this.text="table2!C"+prow; } 

我的假设是当table1生成的时间table2不可用。 如果这是正确的假设,那么我的解决scheme是在渲染时改变元素的顺序(我不知道这个可能性)。

导出的Excel工作表中的错误是:

 Caused by: java.lang.IllegalArgumentException: Sheet index (-1) is out of range (0..0) at org.apache.poi.xssf.usermodel.XSSFWorkbook.validateSheetIndex(XSSFWorkbook.java:1043) at org.apache.poi.xssf.usermodel.XSSFWorkbook.getSheetName(XSSFWorkbook.java:876) at org.apache.poi.xssf.usermodel.XSSFEvaluationWorkbook.getSheetNameByExternSheet(XSSFEvaluationWorkbook.java:135) at org.apache.poi.xssf.usermodel.helpers.XSSFFormulaUtils$1.getSheetNameByExternSheet(XSSFFormulaUtils.java:81) at org.apache.poi.ss.formula.ptg.ExternSheetNameResolver.prependSheetName(ExternSheetNameResolver.java:42) at org.apache.poi.ss.formula.ptg.Ref3DPtg.toFormulaString(Ref3DPtg.java:91) at org.apache.poi.ss.formula.FormulaRenderer.toFormulaString(FormulaRenderer.java:92) at org.apache.poi.xssf.usermodel.helpers.XSSFFormulaUtils.updateFormula(XSSFFormulaUtils.java:126) at org.apache.poi.xssf.usermodel.helpers.XSSFFormulaUtils.updateSheetName(XSSFFormulaUtils.java:106) at org.apache.poi.xssf.usermodel.XSSFWorkbook.setSheetName(XSSFWorkbook.java:1230) at uk.co.spudsoft.birt.emitters.excel.handlers.PageHandler.endPage(PageHandler.java:225) at uk.co.spudsoft.birt.emitters.excel.ExcelEmitter.endPage(ExcelEmitter.java:296) at org.eclipse.birt.report.engine.emitter.ContentEmitterUtil.endContent(ContentEmitterUtil.java:102) at org.eclipse.birt.report.engine.layout.html.buffer.DummyPageBuffer.endContainer(DummyPageBuffer.java:61) at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.end(HTMLPageLM.java:183) at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layout(HTMLPageLM.java:98) at org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.layout(HTMLReportLayoutEngine.java:100) at org.eclipse.birt.report.engine.api.impl.RenderTask$PageRangeRender.render(RenderTask.java:717) at org.eclipse.birt.report.engine.api.impl.RenderTask.render(RenderTask.java:321) ... 39 more 

问题是当sheet1在生成时引用了sheet2,此时sheet2不可用,所以抛出了错误,但是我们可以在生成阶段改变元素执行的顺序,并且在渲染阶段回滚到之前的位置。

我无法更改顺序,因为应该先显示sheet1,然后才会显示sheet2。

任何想法涉及我在BIRT的问题?