如何使用apache poi在excel中将日期设置为类型日期?

时间:2012-06-29 07:14:11

标签: java excel apache-poi

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

我正在尝试使用excel类型“date”的格式将日期写入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();

我应该使用哪种格式?

由于

4 个答案:

答案 0 :(得分:9)

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

POI在BuiltinFormats中有完整的特殊内置格式列表(比最近的Excel副本中的格式列表小得多!)。如果你确定你设置了其中一个,而不是你自己的自定义格式字符串,它应该完全按照你的预期行事

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:0)

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

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

享受!!

答案 3 :(得分:0)

使用以下方法解决:

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++;