我有一种使用Apache POI读取Excel单元格的方法,它运行良好。嗯...几乎良好。
如果单元格被格式化了,例如整个A列有边框,则它将继续读取空单元格并给出空字符串。如何忽略这些空(已格式化)单元格?
因此,
但因为A列有边框格式,它还将提供十个更多的空字符串节点。
编辑后Gagravarr的回答。
我可以避免检查是否为空,然后不将其添加到主列表中。但对于一些非常大的.xls文件,如果这些文件很多,这将需要太长时间,而且通常我认为这不是一个好的做法。
我的问题是,是否存在像单元格一样的“行”对象,我是否忽略了它们。
public static ArrayList readXLsXFile() throws FileNotFoundException, IOException {
ArrayList outListaExcel = new ArrayList();
FileInputStream fis;
ptxf= new FileInputStream(pathToExcelFile);
XSSFWorkbook workbook = new XSSFWorkbook(ptxf);
XSSFSheet sheetAr = workbook.getSheetAt(0);
Iterator rowsAr = sheetAr.rowIterator();
while (rowsAr.hasNext()) {
XSSFRow row1 = (XSSFRow) rowsAr.next();
Iterator cellsAr = row1.cellIterator();
ArrayList<String> arr;
arr = new ArrayList();
while (cellsAr.hasNext()) {
XSSFCell cell1 = (XSSFCell) cellsAr.next();
arr.add(String.valueOf(cell1));
}
outListaExcel.add(arr);
}
return outListaExcel;
}
如果单元格被格式化了,例如整个A列有边框,则它将继续读取空单元格并给出空字符串。如何忽略这些空(已格式化)单元格?
因此,
readXLsXFile
将为我提供一个ArryList
,其中包含[0] -> [1][2]
[1] -> [3][4]
但因为A列有边框格式,它还将提供十个更多的空字符串节点。
编辑后Gagravarr的回答。
我可以避免检查是否为空,然后不将其添加到主列表中。但对于一些非常大的.xls文件,如果这些文件很多,这将需要太长时间,而且通常我认为这不是一个好的做法。
我的问题是,是否存在像单元格一样的“行”对象,我是否忽略了它们。
ArrayList<ArrayList<String>>mainLista = new ArrayList<ArrayList<String>>();
for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
Row r = sheet.getRow(rowNum);
int lastColumn = r.getLastCellNum();
ArrayList<String> subList = new ArrayList<String>();
for (int cn = 0; cn < lastColumn; cn++) {
Cell c = r.getCell(cn, Row.RETURN_BLANK_AS_NULL);
if (c != null) {
subList.add(c.getStringCellValue());
} else {
}
}
if (!subList.isEmpty() ){ // I think it is not good way
mainLista.add(subList);} // to do this, because it still reads
} // an empty rows
continue
。不确定您的确切意思是什么。 - Gábor Bakos