【问题标题】:How to set date as type date in excel with apache poi?如何使用apache poi在excel中将日期设置为类型日期?
【发布时间】:2012-06-29 07:14:11
【问题描述】:

我正在使用 apache poi 3.8 创建一个 excel 文件。这个excel文件需要包含一些日期。

我正在尝试将日期写入 excel 文件,格式为 excel 类型“日期”。但我总是得到一种“自定义”类型。我需要使用“日期”类型,因此它将根据用户设置进行本地化。

我尝试了以下方法:

Apache poi date format

Apache POI localized Date into Excel cell

但它不起作用。

这是我的代码:

XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet("new sheet");

XSSFDataFormat df = wb.createDataFormat();
CellStyle cs = wb.createCellStyle();
cs.setDataFormat(df.getFormat("d-mmm-yy"));

XSSFCell cell = sheet.createRow(0).createCell(0);

Calendar c = Calendar.getInstance();
c.set(2012,3-1,18);
cell.setCellValue( c.getTime() );

cell.setCellStyle(cs);

// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("c:\\temp\\dates-sworkbook.xlsx");
wb.write(fileOut);
fileOut.close();

我应该使用哪种格式?

谢谢

【问题讨论】:

    标签: java excel apache-poi


    【解决方案1】:

    日期 是一种特殊的内置格式。如果你想明确地使用那个,那么你需要明确地选择它。 (Excel 中使用的几乎所有格式都是自定义格式,以您指定的方式呈现,但也有一些特殊格式)

    POI 在BuiltinFormats 中有完整的特殊内置格式列表(比最近的 Excel 副本中的下拉列表中的格式列表要小得多!)。如果您确保设置了其中之一,而不是您自己的自定义格式字符串,那么它的行为应该完全符合您的预期

    【讨论】:

    • 我认为“d-mmm-yy”是一种内置格式。但由于某种原因,这种格式不起作用。当我使用“m/d/yy”时,它按预期工作。
    • 不,d-mmm-yy 是欧式格式。当你在欧洲展示它时,这就是像内置(美式)这样的东西!
    • 其实不是这样的。我指定了格式 22(0x16,“m/d/yy h:mm”)。但它显示为“自定义”。
    【解决方案2】:

    真的不知道你是否已经解决了这个问题,但这里有一个可以解决它的代码。 它实际上解决了我的问题。

    CreationHelper createHelper = wb.getCreationHelper();
    ...
    cs.setDataFormat(createHelper.createDataFormat().getFormat("yourformat"));
    

    取自 http://poi.apache.org/spreadsheet/quick-guide.html#CreateDateCells

    【讨论】:

      【解决方案3】:

      我了解您的问题。我使用 Apache Poi 的 DateUtil 解决了。

      Cell cell = yourRow.createCell(yourIndex);
      cell.setCellValue(DateUtil.getExcelDate(yourDate);
      

      尽情享受吧!

      【讨论】:

        【解决方案4】:

        解决方法如下:

        DataFormatter fmt = new DataFormatter();
        Object Excel1data=Excel.readExcel(Excel1, "Sheet3", rownumber, columnnumber1);
                    String valueAsInExcel1 = fmt.formatCellValue((Cell) Excel1data);
        
                    Object Excel2Data=Excel.readExcel(Excel2, "Sheet2", getrownumber, columnnmumber2);
                    String valueAsInExcel2 = fmt.formatCellValue((Cell) Excel2Data);
        
                    org.testng.Assert.assertEquals(valueAsInExcel1, valueAsInExcel2,"Incorrect data in RowNumber:"+getrownumber+" ColumnNumber:"+columnnmumber2);
                    columnnumber1++;
        

        【讨论】:

          猜你喜欢
          • 2012-12-28
          • 2013-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-25
          • 2012-04-03
          相关资源
          最近更新 更多