簡體   English   中英

用POI API編寫JAVA的Excel工作表

[英]Excel sheet writing JAVA with POI API

我正在使用以下POI API通過Java代碼在Excel上進行編寫

public static HSSFWorkbook sampleWorkbook = new HSSFWorkbook();
public static HSSFSheet sampleDataSheet = sampleWorkbook.createSheet("ABC");

使用Java Main方法運行時,它運行良好。 但是當我使用servlet將其轉換為dao時,它僅創建一次工作表,此后顯示以下異常

java.lang.IllegalArgumentException: The workbook already contains a sheet of this name
at org.apache.poi.hssf.usermodel.HSSFWorkbook.createSheet(HSSFWorkbook.java:813)
at  com.SangamOne.ApnaKhata.dao.ExcelReportGenerator1.generateSimpleExcelReport(ExcelReportGenerator1.jav    a:309)
at com.SangamOne.ApnaKhata.dao.ExcelReportGenerator1.getDealerxls(ExcelReportGenerator1.java:95)
at com.SangamOne.ApnaKhata.Controller.Xlspass.doGet(Xlspass.java:29)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
 at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
/*Just use the following check before creating a sheet:
XSSFSheet sheet;
XSSFWorkbook workBook (the workbook to hold the sheet having name sheetName)
*/

int sheetIndex = workBook.getSheetIndex(sheetName);
if(sheetIndex == -1){
    sheet = workBook.createSheet(sheetName);
}

/*
If sheet with the given name does not already exist in the workbook, it will return -1, else the position of sheet in the workbook.
*/
while (wb.getNumberOfSheets() > 1)
wb.removeSheetAt(0);

使用上面的代碼刪除工作表。

我以前遇到過這個例外。 但是我的情況如下圖所示

workbook.createSheet(“一個非常非常非常長的名稱,超過了Excel工作表名稱的長度限制,超過了31個字符”);

谷歌“ Excel表名稱長度”。 不知道這是否與您面臨的情況相同。 希望它會有所幫助。

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM