最近做報表用到POI
有踩到一個雷,由於真的不是很熟POI
所以趕快來記我踩的雷
poi操作excel文件 - CSDN博客
HSSF、XSSF和SXSSF区别以及Excel导出优化 - PC君 - 博客园
可能踩雷,未知java.lang.IllegalArgumentException: Sheet index (-1) is out of range (0..2)
問題
經查詢是這段問題
workbook.setSheetName( sheetIndex , userType == 0 ? label : label + xxxxxx);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//下面是原寫法
//sheet = workbook.getSheet("XXXXX");
//下面是修改寫法
sheet = workbook.getSheetAt(sheetIndex);
System.out.println("sheetIndex:" + workbook.getSheetIndex(sheet));
String sheetName = userType == 0 ? label : label + xxxxxx;
// 按不同方案別命名Sheet
workbook.setSheetName(sheetIndex, sheetName);
System.out.println("sheetName:" + sheetName);
// 按不同方案別命名Sheet
workbook.setSheetName( sheetIndex , userType == 0 ? label : label + xxxxxx);
|
createRow 會覆蓋當下row
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
// 由於資料過少的話,temple Excel欄位header會印出來,所以目前先用小於五筆資料,新增5列資料去覆蓋
if (arrayList.size() <= 5)
{
for (int i = 0; i < arrayList.size(); i++)
{
int idxrow = i + 1 + arrayList.size();
XSSFRow row1 = sheet.createRow(idxrow);
// 固定內容部分
XSSFCell cell_1 = row1.createCell(0);
cell_1.setCellType(XSSFCell.CELL_TYPE_STRING);
cell_1.setCellValue("");
XSSFCell cell_2 = row1.createCell(1);
cell_2.setCellType(XSSFCell.CELL_TYPE_STRING);
cell_2.setCellValue("");
XSSFCell cell_3 = row1.createCell(2);
cell_3.setCellType(XSSFCell.CELL_TYPE_STRING);
cell_3.setCellValue("");
// 變動欄位
XSSFCell cell_4 = row1.createCell(3);
cell_4.setCellType(XSSFCell.CELL_TYPE_STRING);
cell_4.setCellValue("");
XSSFCell cell_5 = row1.createCell(4);
cell_5.setCellType(XSSFCell.CELL_TYPE_STRING);
cell_5.setCellValue("");
XSSFCell cell_6 = row1.createCell(5);
cell_6.setCellType(XSSFCell.CELL_TYPE_STRING);
cell_6.setCellValue("");
}
|
POI ,Java 操作 Excel 实现行的插入(insert row) - CSDN博客
POI实现插入一行操作,就像office excel插入一行的操作 - cai555 - ITeye博客
NPOI 插入行[转] - kingang - 博客园
Java POI(第一讲):POI中HSSF用法大全-进击的程序猿-51CTO博客
好想寫WEB orz…….