8

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

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

我尝试了以下方法:

Apache poi 日期格式

Apache POI 将日期本地化为 Excel 单元格

但它不起作用。

这是我拥有的代码:

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

4 回答 4

10

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

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

于 2012-06-29T10:54:43.190 回答
4

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

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

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

于 2013-04-15T11:37:39.617 回答
0

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

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

享受 !!

于 2017-11-15T09:19:31.143 回答
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++;
于 2017-11-30T21:11:34.183 回答