-1
  • 我正在使用 java (Apache POI) 读取 xlsx 文件。
  • 我创建了一个 Document 类(将所有 excel 列标题作为变量)
  • 我必须通过创建 Document 类的集合来读取 excel 中的每一行并映射到 Document 类。
  • 我面临的问题是我必须从第 2 行和第 7 列到第 35 列开始读取,并将相应的值映射到文档类。

  • 无法弄清楚代码应该是怎样的?

  • 我写了以下几行代码。

 List sheetData = new ArrayList();
        InputStream excelFile = new BufferedInputStream(new FileInputStream("D:\\Excel file\\data.xlsx"));
        Workbook workBook = new XSSFWorkbook(excelFile); // Creates Workbook
        XSSFSheet sheet = (XSSFSheet) workBook.getSheet("Daily");
        DataFormatter formatter = new DataFormatter();
        for (int i = 7; i <= 35; i++) {
            XSSFRow row = sheet.getRow(i);
            Cell cell = row.getCell(i);
            String val = formatter.formatCellValue(cell);
            sheetData.add(val);
        }

4

2 回答 2

1

假设我已经正确理解了您的问题,我相信您想要处理从第 2 行开始到文件末尾的每一行,并且对于这些行中的每一行,请考虑第 7 列到第 35 列中的单元格。我相信您也可能需要处理这些值,但你还没有说如何,所以对于这个例子,我只是将它们填充到字符串列表中,并希望最好......

这是基于用于迭代行和单元格的 Apache POI 文档

File excelFile = new File("D:\\Excel file\\data.xlsx");
Workbook workBook = WorkbookFactory.create(excelFile);
Sheet sheet = workBook.getSheet("Daily");
DataFormatter formatter = new DataFormatter();

// Start from the 2nd row, processing all to the end
// Note - Rows and Columns in Apache POI are 0-based not 1-based
for (int rn=1; rn<=sheet.getLastRowNum(); rn++) {
   Row row = sheet.getRow(rn);
   if (row == null) {
      // Whole row is empty. Handle as required here
      continue;
   }
   List<String> values = new ArrayList<String>();
   for (int cn=6; cn<35; cn++) {
      Cell cell = row.getCell(cn);
      String val = null;
      if (cell != null) { val = formatter.formatCellValue(cell); }
      if (val == null || val.isEmpty()) {
         // Cell is empty. Handle as required here
      }
      // Save the value to list. Save to an object instead if required
      values.append(val);
   }
}
workBook.close();

根据您的业务需求,输入处理空白行和单元格的逻辑。然后,再次根据您的业务需求对您找到的值做任何您需要做的事情!

于 2017-11-14T13:14:10.183 回答
0

您可以在文档中使用迭代器进行迭代,但还有一个函数“getRow() 和 getCell()”

  Workbook workbook = new XSSFWorkbook(excelFile);

  // defines the standard pointer in document in the first Sheet
  XSSFSheet data = this.workbook.getSheetAt(0);
  // you could iterate the document with an iterator
  Iterator<Cell> iterator = this.data.iterator();

  // x/y pointer at the document
  Row row = data.getRow(y);
  Cell pointingCell = row.getCell(x);

  String pointingString = pointingCell.getStringCellValue();
于 2017-11-13T13:04:38.553 回答