使用poi 3.16

时间:2017-08-03 09:31:57

标签: java excel apache-poi

我的工作簿中有4张(让 AA BB CC & DD )。我有以下要求:我想删除工作表 BB ,并希望插入新工作表 BB_Error

我可以使用"my_workbook.removeSheetAt(index);"删除 BB 表。还可以使用"my_workbook.createSheet("BB_Error");"创建新工作表。

现在,我使用了"my_workbook.setSheetOrder("BB_Error", index);"来重新排序新创建的工作表。当我调试代码时,工作簿正在生成,但是,当我运行我的代码时,我收到以下错误:

  

无法运行'createExcel'   java.lang.IllegalArgumentException:计算的结束索引(888984)超出允许范围(888980..888983)

     

java.lang.IllegalArgumentException:计算的结束索引(888984)超出允许范围(888980..888983)       在org.apache.poi.util.LittleEndianByteArrayOutputStream。(LittleEndianByteArrayOutputStream.java:41)       在org.apache.poi.hssf.record.StandardRecord.serialize(StandardRecord.java:45)       在org.apache.poi.hssf.usermodel.HSSFWorkbook $ SheetRecordCollector.serialize(HSSFWorkbook.java:1259)       at org.apache.poi.hssf.usermodel.HSSFWorkbook.getBytes(HSSFWorkbook.java:1305)       在org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:1205)       在lavika.createExcel(lavika.java:733)       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)       at java.lang.reflect.Method.invoke(Method.java:606)       在com.wm.app.b2b.server.JavaService.baseInvoke(JavaService.java:443)       在com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:648)       在com.wm.app.b2b.server.util.tspace.ReservationProcessor.process(ReservationProcessor.java:39)       在com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:49)       在com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:243)       在com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49)       在com.wm.app.b2b.server.invoke.PipelineProcessor.process(PipelineProcessor.java:171)       在com.wm.app.b2b.server.ACLManager.process(ACLManager.java:303)       在com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:34)       在com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:375)       在com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:547)       在com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:386)       在com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:238)       在com.wm.app.b2b.server.comm.DefaultServerRequestHandler.handleMessage(DefaultServerRequestHandler.java:119)       在com.wm.app.b2b.server.HTTPMessageHandler.process(HTTPMessageHandler.java:164)       在com.wm.app.b2b.server.HTTPDispatch.handleRequest(HTTPDispatch.java:170)       在com.wm.app.b2b.server.Dispatch.run(Dispatch.java:362)       在com.wm.util.pool.PooledThread.run(PooledThread.java:127)       在java.lang.Thread.run(Thread.java:745)

有人可以救我这个吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

这是我的代码:

if(resultAssessed.equalsIgnoreCase("true")&& code.equals("-1")) {
    if(sheetName.equalsIgnoreCase("ABC")) {
        int index = my_workbook.getSheetIndex("ABC");
        if(index >=0)
            my_workbook.removeSheetAt(index);
        Sheet errorSheet= my_workbook.createSheet("ABC_Error"); 
        my_workbook.setSheetOrder("ABC_Error",index); 

        Row row = errorSheet.createRow(3);
        Cell cell = row.createCell(1);
        cell.setCellValue("Error in Data");
        errorSheet.addMergedRegion(new CellRangeAddress(3,3,1,4));
    }
}
else {
    if(sheetName.equalsIgnoreCase("ABC")){
        int index = my_workbook.getSheetIndex("ABC");
        if(index >=0)
            my_workbook.removeSheetAt(index);