使用Apache POI时,我可以使用索引遍历excel文件吗?

时间:2017-12-21 19:10:11

标签: java excel apache-poi

如果我不清楚,请原谅。英语不是我的第一语言。

我试图编写一个代码,我可以遍历excel文件的第一行,直到找到标有' Comments'的列。我想对该列中的文本运行一些操作,然后将结果保存在文件末尾的新列中。我可以以类似于索引的方式遍历xlsx文件吗?如果是这样,我怎样才能使用该单元格的坐标直接跳到单元格?

public static void main(String[] args) throws IOException {

    File myFile = new File("temp.xlsx");
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(myFile);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    @SuppressWarnings("resource")
    XSSFWorkbook myWorkBook = new XSSFWorkbook (fis);
    XSSFSheet mySheet = myWorkBook.getSheetAt(0);
    Iterator<Row> rowIterator = mySheet.iterator();


    Row row = rowIterator.next();
    Iterator<Cell> cellIterator = row.cellIterator();

    while (cellIterator.hasNext()) {

        Cell cell = cellIterator.next();

        String comment = cell.toString();

        if (comment.equals("Comments"))
        {
            System.out.println("Hello");
        }



    }


}

}

3 个答案:

答案 0 :(得分:1)

对于“想要进入第二列第3行的问题,我可以使用像(3,2)这样的坐标吗?”:

是的,可以使用CellUtilQVarLengthArray<struct coords_t>Sheet中的方法的优点是Row方法能够获取单元格(如果已存在),如果单元格尚不存在则创建单元格。因此,现有的单元格将被尊重,而不是简单地创建它们,因此会覆盖它们。

示例:

CellUtil

答案 1 :(得分:0)

我不确定你的2D索引是什么意思,但是Cell知道它属于哪个列,所以这样的东西应该有效:

...
Cell cell = cellIterator.next();

String comment = cell.toString();

int sourceColumnIndex = -1;
if (comment.equals("Comments")) {
    System.out.println("Hello");
    sourceColumnIndex = cell.getColumnIndex();
}
....

同样,定义类似int targetColumnIndex的内容来表示将处理来自sourceColumnIndex列的所有单元格的结果的列。

答案 2 :(得分:0)

FileInputStream file = new FileInputStream(new File(fileLocation));

Workbook workbook = new XSSFWorkbook(file);
Sheet sheet = workbook.getSheetAt(0);

Map<Integer, List<String>> data = new HashMap<>();
int i = 0;
for (Row row : sheet) {
    data.put(i, new ArrayList<String>());
    for (Cell cell : row) {
        switch (cell.getCellTypeEnum()) {
            case STRING: ... break;
            case NUMERIC: ... break;
            case BOOLEAN: ... break;
            case FORMULA: ... break;
            default: data.get(new Integer(i)).add(" ");
        }
    }
    i++;
}