[英]java.lang.IllegalArgumentException: Result Maps collection already contains value for
[英]java.lang.IllegalArgumentException: The workbook already contains a sheet of this name
插入超過 120 萬條記錄時出現異常。 已成功在 1 張表中插入 1 047 000 條記錄,當創建新表以插入其余記錄時,我得到
java.lang.IllegalArgumentException: 工作簿已包含此名稱的工作表
我正在使用此條件來創建新工作表
if(rowCount>1047000){
wsSheet = createSheet(sheetName, xssfWorkbook);
createHeader(wsSheet, columsnList, xssfWorkbook, null,listResult.isNameFieldRequired());
rowCount = 1;
}
嘗試更改sheetName
wsSheet = createSheet(sheetName, xssfWorkbook) as sheetName+"1"
但仍然是同樣的例外。
org.apache.poi.ss.usermodel.Sheet
檢查字符串是否已用作工作表名稱的方式有些奇怪:使用 name.substring(0, 31) 截斷候選名稱並與現有名稱進行比較以相同的方式截斷,因此您必須使字符串在此范圍內至少有一個字符不同。
XSSFSheet newSheetName = workbook.createSheet("sheetName"+1);
那應該很簡單。 然后根據您的代碼,您可能需要增加 newSheetName 變量范圍。
您可以插入日期時間而不是插入 1,因為它試圖一次添加所有記錄,因此采用相同的工作表名稱。
將以下代碼用於日期時間並在您的代碼中調用它代替 1
請參閱此代碼以獲取日期時間;
================================================== ==========
String dateTime=new Date().toString().replaceAll(":", "_");
wsSheet = createSheet(sheetName, xssfWorkbook) as sheetName+dateTime;
================================================== ====================
它應該工作。
如果不起作用,請使用帶毫秒的日期時間
希望有幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.