我的电子表格超过100张。我必须从每张纸中读取特定的单元格内容,例如第7行第5列,并将其写入单个列中的单独表格中。
答案 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();