繁体   English   中英

如何在Java中将Excel行转换为字符串值?

[英]how to convert Excel row to string value in Java?

Java POI中是否有直接内置函数将Excel行转换为字符串? 我已经尝试过“ row.toString()”,但是它返回了行的内存位置。

您可以遍历单元格,

       Row row = (Row) rows.next();
        Iterator cells = row.cellIterator();

     while (cells.hasNext()) {
      Cell cell = (Cell) cells.next();
...
}

为了检索单元格的字符串,您可以使用:

cell.getStringCellValue()
     XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File("path")));

        FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
    Iterator<Cell> cellIterator = row.cellIterator();
          while (cellIterator.hasNext()) 
            {
               Cell cell = cellIterator.next();
                switch (evaluator.evaluateInCell(cell).getCellType()) 
                {                  
                    case Cell.CELL_TYPE_NUMERIC:
                        double a = cell.getNumericCellValue();
                        break;
                    case Cell.CELL_TYPE_STRING:
                        String val = cell.getStringCellValue();
                        break;
                 }
            }

您可以尝试在Java中使用Files类。 它具有例如

Files.lines(Path path)

它接受路径并返回流。 使用流,您可以拆分行并应用您的方法。 您可以查看其API的其他方法,以较合适的方法为准。

https://docs.oracle.com/javase/9​​/docs/api/java/nio/file/Files.html

不要遍历所有单元格/行,只需按照以下步骤选择您的特定单元格即可:

int x = 5;
int y = 8;   
// open your File
Workbook wb = new XSSFWorkbook(file);
// Get your excel sheet nr. 1
XSSFSheet sheet = Workbook.getSheetAt(0);
// get your Row from Y cordinate
Row yourRow = sheet.getRow(y);
// get your Cell from X cordinate
Cell yourCell = cell = yourRow.getCell(x);
// be sure that the pointingCell is an String or else it will catch Exception.
String cellString = cell.getStringCellValue();

Apache POI文档中给出了执行此操作所需的所有代码,特别是遍历行和单元格获取单元格内容 阅读文档通常会有所帮助!

假设您想做一些简单的事情,例如将所有单元格与逗号连接在一起(请注意,这不是生成CSV的好方法,因为您还需要转义!),您可以执行以下操作:

// Load the file, get the first sheet
Workbook wb = WorkbookFactory.create(new File("input.xls"));
Sheet sheet = wb.getSheetAt(0);

// To turn numeric and date cells into friendly formatted strings
DataFormatter formatter = new DataFormatter();

// Process every row
for (Row row : sheet) {
   StringBuffer text = new Stringbuffer();
   // Turn each cell into a string, and append
   for (Cell : row) {
      if (! text.isEmpty()) { text.append(", "); }
      text.append(formatter.formatCellValue(cell));
   }

   // TODO Do something useful with the string
   String rowAsText = text.toString();
}

// Tidy up
wb.close();

您可以使用java8 foreach获得也许更方便的代码:

try (
    InputStream inputStream = RowToString.class.getResourceAsStream("excel.xlsx");
    Workbook workbook = WorkbookFactory.create(inputStream);
) {
    Sheet sheet = workbook.getSheetAt(0);
    List<String> rows = new ArrayList<>();
    sheet.forEach(row -> {
        StringJoiner joiner = new StringJoiner("|");
        row.forEach(cell -> joiner.add(cell.toString()));
        rows.add(joiner.toString());
    });

    rows.forEach(System.out::println);
}

StringJoiner是连接值的好选择。 为了获取单元格值, toString可以正常工作。 toString将获取任何单元格类型的正确值。 唯一的问题是toString不会解析公式,它将获取公式本身。 但是您可以根据自己的需要修改代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM