Excel 文件 (staff.xls)
ID 姓名
1 阿里
2 阿布
3 艾哈迈德
java代码
FileInputStream inputFile = new FileInputStream("staff.xls"); XSSFWorkbook workbook = new XSSFWorkbook(inputFile); XSSFSheet spreadsheet = workbook.getSheetAt(0); XSSFRow row; Cell cell; Iterator<Row> rowIterator = spreadsheet.iterator(); while(rowIterator.hasNext()){ row = (XSSFRow)rowIterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); while(cellIterator.hasNext()){ cell = cellIterator.next(); cell.setCellType(Cell.CELL_TYPE_STRING); switch(cell.getCellType()){ case Cell.CELL_TYPE_STRING: System.out.print(cell.getStringCellValue()+"|"); break; case Cell.CELL_TYPE_NUMERIC: System.out.print(cell.getNumericCellValue()+"|"); break; } } System.out.println(); }
我的问题是:
(1) 如何将记录放入数组或数组列表中?
(2)创建后,如何拆分“|”?
最佳答案
只需在第一个while之前创建一个列表变量,在每次迭代开始时创建一个新列表,将元素放入此列表并将此列表添加到主列表列表中迭代结束。你应该得到类似的东西:
...
List<List<String>> records = new ArrayList<List<String>>();
while(rowIterator.hasNext()){
List<String> record = new ArrayList<String>();
row = (XSSFRow)rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while(cellIterator.hasNext()){
cell = cellIterator.next();
cell.setCellType(Cell.CELL_TYPE_STRING);
switch(cell.getCellType()){
case Cell.CELL_TYPE_STRING:
record.add(cell.getStringCellValue());
break;
case Cell.CELL_TYPE_NUMERIC:
record.add(Double.toString(cell.getNumericCellValue()));
break;
}
}
records.add(record);
}
for (List<String> record : records) {
for (String s : record) {
System.out.print(" " + s);
}
System.out.println();
}
...
另请注意,您不需要添加 |符号不再存在,所以最终不需要拆分。但一般来说,要分割字符串,有一个方法 String#split() 接受正则表达式。您需要像这样使用它来用“|”分隔(您需要在 | 之前放置\,因为它是特殊的正则表达式字符):
for (String record : records) {
System.out.println(record);
String[] elements = record.split("\\|");
for (String element : elements) {
System.out.println(" -> " + element);
}
}
关于java apache poi(第 1 部分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28735125/