Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中将Excel行转换为字符串值?_Java_Excel_String_Apache Poi_Row - Fatal编程技术网

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

如何在Java中将Excel行转换为字符串值?,java,excel,string,apache-poi,row,Java,Excel,String,Apache Poi,Row,Java POI中是否有直接内置函数将Excel行转换为字符串? 我尝试了“row.toString()”,但它返回了该行的内存位置。您可以迭代单元格 Row row = (Row) rows.next(); Iterator cells = row.cellIterator(); while (cells.hasNext()) { Cell cell = (Cell) cells.next(); ... } 对于检索单元格字符串,您可以使

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

您可以迭代单元格

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

     while (cells.hasNext()) {
      Cell cell = (Cell) cells.next();
...
}
对于检索单元格字符串,您可以使用:

cell.getStringCellValue()

你可以在单元格上迭代

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

     while (cells.hasNext()) {
      Cell cell = (Cell) cells.next();
...
}
对于检索单元格字符串,您可以使用:

cell.getStringCellValue()
xssf工作簿=新的xssf工作簿(新文件输入流(新文件(“路径”));
FormulaEvaluator evaluator=工作簿.getCreationHelper().createFormulaEvaluator();
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext())
{
Cell=cellIterator.next();
开关(evaluator.evaluateInCell(cell.getCellType())
{                  
case Cell.Cell\u类型\u数值:
双精度a=单元格。getNumericCellValue();
打破
case Cell.Cell\u类型\u字符串:
String val=cell.getStringCellValue();
打破
}
}
XSSF工作簿=新XSSF工作簿(新文件输入流(新文件(“路径”)));
FormulaEvaluator evaluator=工作簿.getCreationHelper().createFormulaEvaluator();
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext())
{
Cell=cellIterator.next();
开关(evaluator.evaluateInCell(cell.getCellType())
{                  
case Cell.Cell\u类型\u数值:
双精度a=单元格。getNumericCellValue();
打破
case Cell.Cell\u类型\u字符串:
String val=cell.getStringCellValue();
打破
}
}

您可以尝试在java中使用Files类。它有一些方法,例如

Files.line(路径)

接收路径并返回流的。使用流,您可以拆分行并应用您的方法。您可以查看它的API,了解它的其他方法,无论哪种方法更适用


您可以尝试在java中使用Files类。它有一些方法,例如

Files.line(路径)

接收路径并返回流的。使用流,您可以拆分行并应用您的方法。您可以查看它的API,了解它的其他方法,无论哪种方法更适用


不要遍历所有单元格/行,只需通过以下方式选择特定单元格:

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();

不要遍历所有单元格/行,只需通过以下方式选择特定单元格:

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();

中给出了执行此操作所需的所有代码,特别是和。阅读文档通常会有所帮助

假设您想做一些简单的事情,比如用逗号将所有单元格连接在一起(注意——这不是生成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();

中给出了执行此操作所需的所有代码,特别是和。阅读文档通常会有所帮助

假设您想做一些简单的事情,比如用逗号将所有单元格连接在一起(注意——这不是生成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);
}
试试看(
InputStream InputStream=RowToString.class.getResourceAsStream(“excel.xlsx”);
工作簿=WorkbookFactory.create(inputStream);
) {
工作表=工作簿。getSheetAt(0);
列表行=新建ArrayList();
表.forEach(第->{
细木工=新细木工(“|”);
row.forEach(cell->joiner.add(cell.toString());
add(joiner.toString());
});
rows.forEach(System.out::println);
}

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

您可以使用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);
}
试试看(
InputStream InputStream=RowToString.class.getResourceAsStream(“excel.xlsx”);
工作簿=WorkbookFactory.create(inputStream);
) {
工作表=工作簿。getSheetAt(0);
列表行=新建ArrayList();
表.forEach(第->{
细木工=新细木工(“|”);
row.forEach(cell->joiner.add(cell.toString());
add(joiner.toString());
});
rows.forEach(System.out::println);
}

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

尝试逐个单元格读取代码,然后将其附加到string@SpringLearner我已经在这样做了,而且效果很好。。但我想通过避免嵌套循环来优化我的解决方案。@andrew为什么?嵌套循环有什么问题?您对它有任何性能问题吗?您希望“Excel中一行的字符串值”是什么?Excel行包含多个单元格,每个单元格都有自己的值,并且并非所有这些单元格值都必须是字符串。请尝试逐个单元格读取,然后将其附加到string@SpringLearner我已经在这样做了,而且效果很好。。但我想通过避免嵌套循环来优化我的解决方案。@andrew为什么?嵌套循环有什么问题?您对它有任何性能问题吗?您希望的“字符串值”是多少