当前位置: 首页 > 知识库问答 >
问题:

使用Java设置所有类型的Excel单元格值

陈正业
2023-03-14

我需要将Excel行从一张工作表复制到另一张工作表。但是在复制而不是实际值之后,我得到了不同的值。有字符串值的单元格没有问题,但有数值的单元格没有问题。Excel单元格可以包含任何类型的值。我的代码应该接受所有这些内容,并将它们复制到另一张表中。请帮我解决这个问题。

if(row.getCell(getLastCell)!=null && ((row.getCell(getLastCell).toString().equalsIgnoreCase(FAIL))|| (row.getCell(getLastCell).toString().equalsIgnoreCase("Invalid CR Statement"))))
            {
                failuresRow=failuresSheet.createRow(createNewRow++);
                for(int ii=0;ii<=getLastCell;ii++)
                {
                    failuresCell=failuresRow.createCell(ii);
                    failuresCell.setCellValue(row.getCell(ii)+"");
                    failuresCell.setCellType(row.getCell(ii).getCellType());
                    failuresCell.setCellStyle(row.getCell(ii).getCellStyle());
             }

            }

我知道row.get单元格(二)"是转换类型单元格字符串,但我想设置setCellValue接受单元格,可以有任何类型的数据(例如:日期,伯林,字符串,数字,.........)

我已经尝试使用DataFor质和其他一些方式也如下,但没有用。

  failuresCell.setCellValue(df.formatCellValue(row.getCell(ii)));


   switch (cell.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                failuresCell.setCellValue(cell.getRichStringCellValue().getString());
                break;
            case Cell.CELL_TYPE_NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    failuresCell.setCellValue(cell.getDateCellValue());
                } else {
                    failuresCell.setCellValue(cell.getNumericCellValue());
                }
                break;
            case Cell.CELL_TYPE_BOOLEAN:
                failuresCell.setCellValue(cell.getBooleanCellValue());
                break;
            case Cell.CELL_TYPE_FORMULA:
                failuresCell.setCellValuec(cell.getCellFormula());
                break;
            default:
                // some code
        }

如果单元格的数值为9200278,则输出为1717。我不明白我哪里做错了。请帮我解决这个问题。

共有2个答案

鲜于宏义
2023-03-14

我只是事先把它们都设置好了。

try {
        FileInputStream fileInputStream = new FileInputStream(excelTemplate);
        HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
        for (int i=0; i < workbook.getNumberOfSheets(); i++) {
            for (Row row : workbook.getSheetAt(i)) {
                for (Cell cell : row) {
                    if (cell != null)
                        cell.setCellType(Cell.CELL_TYPE_STRING);
                }
            }
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
步嘉德
2023-03-14

这是因为您获取的是单元格而不是值。您可以使用以下方法代替row.getcell(int). toString()

row.getCell(int).getStringCellValue();
row.getCell(int).getNumericCellValue();
and etc.

在调用该方法之前,只需检查单元格的类型。下面是一个例子:

if (cellType == HSSFCell.CELL_TYPE_BOOLEAN) {
    row.getCell(int).getBooleanCellValue();
} else if (cellType == HSSFCell.CELL_TYPE_ERROR) {
    row.getCell(int).getErrorCellValue();
} else if (cellType == HSSFCell.CELL_TYPE_FORMULA) {
    row.getCell(int).getCellFormula();
} else if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {
    row.getCell(int).getNumericCellValue();
} else if (cellType == HSSFCell.CELL_TYPE_STRING) {
    row.getCell(int).getStringCellValue();
}
 类似资料:
  • 如何将该值作为字符串而不是数字从单元格中获取?下面给出了读取和编写excel的代码

  • 本文向大家介绍如何使用Java在excel单元格中设置超链接,包括了如何使用Java在excel单元格中设置超链接的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了如何使用Java在excel单元格中设置超链接,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 (一)问题引入   有时候我们在导入数据到excel中时可能要给某个文件或图片设

  • Java 中如何给 Excel 的单元格设置超链接 我想导入一个excel文件,并且通过java代码给某个单元格设置超链接(业务需求)。请问大家有什么思路没

  • 我想在Excel中设置,将显示为数字,并需要它将值显示为(使用作为分隔符,而不是(不是十进制/小数-但仍然是)。我成功地显示了正确的单元格值,但是只得到。我知道,有美国的配置,一个简单的和就可以了,但是可以访问

  • 我使用的是poi 3.6 我能够正确地创建excel。但当我试图将单元格类型设置为数字时,它总是将单元格类型设置为常规。 i、 e.在新创建的excel中,当我右键单击并转到“格式化单元格”时- 我的代码是这样的 你能告诉我这里缺少什么吗?