如何使用Java在Excel电子表格中从多个工作表中读取特定单元格的内容?

时间:2015-11-06 06:00:27

标签: java excel apache-poi spreadsheet

我的电子表格超过100张。我必须从每张纸中读取特定的单元格内容,例如第7行第5列,并将其写入单个列中的单独表格中。

2 个答案:

答案 0 :(得分:1)

这样的东西?

public static List<String> getCellOfAllSheets (File file, int row, int cell) throws IOException {
    HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(file));
    List<String> rows = new ArrayList<>(workbook.getNumberOfSheets());
    for (int numberOfSheet = 0; numberOfSheet < workbook.getNumberOfSheets(); numberOfSheet++) {
        HSSFSheet sheet = workbook.getSheetAt(numberOfSheet);
        rows.add(sheet.getRow(row).getCell(cell).getStringCellValue());
    }
    return rows;
}

答案 1 :(得分:0)

我认为您要问的是:对于跨多个工作表的给定行和列位置(单元格),您希望在那里抓取单元格,然后将这些值保存到单个列中的新工作表中。假设是这样的

首先,打开工作簿,然后添加一个新工作表:

Workbook wb = WorkbookFactory.create(new File("input.xlsx"));
Sheet output = wb.createSheet("Found Values");

接下来,使用CellReference将单元格引用(例如D3)转换为行和单元格索引:

 CellReference ref = new CellReference("D3"); // example
 int rowWanted = ref.getRow(); // 2
 int cellWanted = ref.getCol(); // 3

现在,我们遍历所有其他工作表(除了我们的新工作表!),抓住感兴趣的单元格,并将其写入新工作表

 for (int sn=0; sn<wb.getNumberOfSheets()-1; sn++) {
    Sheet input = wb.getSheetAt(sn);
    Row or = output.createRow(sn);
    Cell oc = or.createCell(0);

    Row ir = input.getRow(rowWanted);
    Cell ic = null;
    if (ir != null) {
       ic = ir.getCell(cellWanted, Row.RETURN_BLANK_AS_NULL);
    }
    if (ic == null) {
       // Empty
       oc.setCellValue("No value in " + input.getSheetName());
    } else {
       // Save the value to the new cell
       switch (ic.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                oc.setCellValue(ic.getRichStringCellValue());
                break;
            case Cell.CELL_TYPE_NUMERIC:
                oc.setCellValue(ic.getNumericCellValue());
                oc.setCellStyle(ic.getCellStyle()));
                break;
            case Cell.CELL_TYPE_BOOLEAN:
                oc.setCellValue(ic.getBooleanCellValue());
                break;
            case Cell.CELL_TYPE_FORMULA:
                oc.setCellFormula(ic.getCellFormula());
                break;
            default:
         }
     }
 }

最后,我们保存更新的文件:

 FileOutputStream out = new FileOutputStream("output.xlsx");
 wb.write(out);
 out.close();