如何使用OPCPackage POI阅读特定工作表

时间:2014-12-10 10:14:28

标签: java apache-poi

假设我有一个由三个工作表组成的xlsx文件。使用此代码片段,我能够读取整个xlsx文件,即所有三个工作表,其中每行用括号分隔,每个单元格用逗号分隔。

public static List<List<String>> excelProcess(File xlsxFile) throws Exception {
    int minColumns = -1;
    // The package open is instantaneous, as it should be.
    OPCPackage p = OPCPackage.open(xlsxFile.getPath(), PackageAccess.READ);
    XLSXParse xlsx2csv = new XLSXParse(p, System.out, minColumns);
    xlsx2csv.process();
    System.out.println("row list===="+xlsx2csv.getRowList().size());
    return xlsx2csv.getRowList();
}

这里xlsxFile是xlsx文件的路径。但我只想要特定工作表的数据,比如工作表2,所以我也会传递工作表名称,如下所示。

public static List<List<String>> excelProcess(File xlsxFile,String sheetName) throws Exception {

这里sheetName是特定的工作表名称。

1 个答案:

答案 0 :(得分:1)

您似乎没有使用任何内置的Apache POI代码进行解析,因此您需要直接切换到使用POI!

有了,如果您查看Workbook上的方法,您会发现有一些方法可以让您获取给定的工作表by nameby index

您的代码看起来像

public static List<List<String>> excelProcess(File xlsxFile, String sheetName) 
              throws Exception {
    Workbook wb = WorkbookFactory.create(xlsxFile);
    Sheet sheet = wb.getSheet(sheetName);

    // process sheet contents here

    // eg something like
    DataFormatter formatter = new DataFormatter();
    for (Row r : sheet) {
       for (Cell c : r) {
          System.out.println(formatter.formatCellValue(c));
       }
    }
}

请参阅Usermodel documentationiterating over rows and cells documentation开始使用Apache POI处理文件