gpt4 book ai didi

java - 如何使用 Apache POI 读取空但格式化的 Excel 单元格?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:46 30 4
gpt4 key购买 nike

我有一种使用 Apache POI 读取 Excel 单元格的方法,它工作正常。好吧……差不多好了。

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 回答后

编辑

我可以避免检查 subList 是否为空,然后不将其添加到 mainList。但是对于一些非常大的 .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

最佳答案

Apache POI Documentation on Iterate over rows and cells 中所述,迭代器只为您提供已定义和具有/具有内容的行和单元格。

如果你想获取完全控制空白或空单元格的单元格,你需要使用类似的东西:

// Decide which rows to process
int rowStart = Math.min(15, sheet.getFirstRowNum());
int rowEnd = Math.max(1400, sheet.getLastRowNum());

for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
Row r = sheet.getRow(rowNum);

int lastColumn = Math.max(r.getLastCellNum(), MY_MINIMUM_COLUMN_COUNT);

for (int cn = 0; cn < lastColumn; cn++) {
Cell c = r.getCell(cn, Row.RETURN_BLANK_AS_NULL);
if (c == null) {
// The spreadsheet is empty in this cell
} else {
// Do something useful with the cell's contents
}
}
}

如果您想获取空白单元格(通常是那些有样式但没有值的单元格),请使用其他缺失单元格策略,例如 RETURN_NULL_AND_BLANK

关于java - 如何使用 Apache POI 读取空但格式化的 Excel 单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28171227/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com