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

使用Apache POI如何将数字单元格值检索为整数

督飞鸣
2023-03-14

我创建了一个创建excel工作表的程序,它有一些数据列1-包含字符串列2-包含数字(基本上是一个整数,但在读取时为什么它被转换为浮点?)

    public class ApachePOI8 {

        public static void main(String[] args) {

            String file = "C:\\Eclipse workspace\\PoiExample\\Excel8.xlsx";

            Workbook wb = new XSSFWorkbook();       
            Sheet sheet = wb.createSheet("Sheet1");
            sheet.protectSheet("Pwd1"); //This statements locks the entire sheet with password: Pwd1

            DataFormat fmt = wb.createDataFormat();   //created a textStyle, which prevents Excel to interprate data, in short it means it will be taken as String
            CellStyle textStyle = wb.createCellStyle();
            textStyle.setDataFormat(fmt.getFormat("@"));
            textStyle.setLocked(false);

            CellStyle numerStyle = wb.createCellStyle();
            numerStyle.setDataFormat(fmt.getFormat("0"));
            numerStyle.setLocked(false);


                    Row row0 = CellUtil.getRow(0, sheet);
                    for (int columnIndex = 0; columnIndex<4; columnIndex++){
                        Cell cell = CellUtil.getCell(row0, columnIndex);
                            if(columnIndex == 0) {
                                cell.setCellStyle(textStyle);
                                cell.setCellValue("Product 1");
                            }else if(columnIndex == 1) {                            
                                cell.setCellStyle(numerStyle);
                                cell.setCellValue(1);

                            }
                        }   
                            else{
                                cell.setCellStyle(textStyle);

                            }    
                     } //end of for Loop


            try {
                FileOutputStream outputStream = null;
                outputStream = new FileOutputStream(file);
                wb.write(outputStream);
                outputStream.close();
                System.out.println("Done!");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

}
public class ApachePOIExcelRead {

    private static final String FILE_NAME = "C:\\Eclipse workspace\\PoiExample\\Excel8.xlsx";
    public static void main(String[] args) {

        try {
            FileInputStream excelFile = new FileInputStream(new File(FILE_NAME));
            Workbook workbook = new XSSFWorkbook(excelFile);
            Sheet datatypeSheet = workbook.getSheetAt(0);
            Iterator<Row> iterator = datatypeSheet.iterator();

            while (iterator.hasNext()) {

                Row currentRow = iterator.next();
                Iterator<Cell> cellIterator = currentRow.iterator();

                while (cellIterator.hasNext()) {

                    Cell currentCell = cellIterator.next();
                    //getCellTypeEnum shown as deprecated for version 3.15
                    //getCellTypeEnum ill be renamed to getCellType starting from version 4.0
                    if (currentCell.getCellTypeEnum() == CellType.STRING) {
                        System.out.print("String: "+currentCell.getStringCellValue() + "\n");
                    } else if (currentCell.getCellTypeEnum() == CellType.NUMERIC) {
                        System.out.print("NUMERIC "+currentCell.getNumericCellValue() + "\n");
                    }

                }
                System.out.println();

            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

共有1个答案

巫马自明
2023-03-14

回答我自己的问题,因为我已经得到了解决方案,我希望这可能对其他人有所帮助:)

DataFormat format = sheet1.getWorkbook().createDataFormat();
            CellStyle costprice = bulkUploadSpreadSheet.getWorkbook().createCellStyle();
            costprice.setDataFormat(format.getFormat("#"));

现在您可以将costprice单元格样式应用到所需的单元格。请让我知道如果你有任何其他的解决办法。万事如意。

 类似资料:
  • 我正在使用Poi.jar从excel表输入,想知道如何检查单元格是否为空。 现在我使用下面的代码。

  • 我正在使用google电子表格API v4 for java。 我的电子表格看起来像这样- 我想查找带有用户“User2”和时间银行(空值)的行索引。之后,我想使用此行索引在该行中添加时间值。是否可以在不知道范围或索引的情况下逐行搜索单元格值? 在上面的示例中,当它与条件(User='User2'和Time='')匹配时,它应该只返回最后一行索引。甚至更好的是,是否存在查找和替换API,它将查找行

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

  • 在谷歌搜索StackOverflow之后,我还没有找到与这个问题相关的地方。目前我可以将空白单元格读取为空,但一次只能读取一个单元格。所以我必须写这样的东西: 这对我来说不太好,因为我对重复感到不满。我们可以设置返回?

  • 我正在使用Apache POI读取零件编号电子表格中的数据。我在我们的数据库中查找零件编号,如果我们有零件的计算机辅助设计图纸,我将零件编号单元格涂成绿色,如果没有,我将其涂成红色。处理完成后,将保存电子表格。我遇到的问题是那列中的每个细胞都是绿色的。我已经完成了代码,查找零件号的逻辑工作正常,确定单元格应该是什么颜色以及设置颜色和填充的逻辑似乎也工作正常。知道我做错了什么吗? 谢谢

  • 我试图在一行中获得非空白的单元格数。 与 但对于这两行,我得到的int值都大于表中实际有值的单元格数。这可能是什么原因?单元格格式和/或样式是否有责任? 我还注意到,如果我从excel工作表中删除值(手动,而不是从代码中),poi仍然将它们视为非空(null?),并将它们包含在总数中。 UPD:经过更多的研究,我发现如果我给一个单元格增加价值,然后删除它,那么POI仍然认为它是非空的。有没有办法在