java apache poi(第 1 部分)

标签 java apache-poi

  • 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/

相关文章:

java - 细胞没有被着色

java - 为什么 exception.printStackTrace() 被认为是不好的做法?

java - 如何根据正态(高斯)分布对网格(矩阵)的单元格进行采样?

java - 代码运行但没有给我正确的输出

java - 使用java更新word文档中自定义属性的值

java - 未使用 Apache POI Java 在 Excel 中创建标题

spring - Apache Poi SAX 写入空单元格

java - 将 Web 元素导入 Excel 时出现空指针异常

java - Java jdk1.7.0_03 附带哪些密码套件,和/或如何使用它们配置我的 RMI 安装?

java - 如何限制Android应用程序不显示在设备的主菜单中?