2012-06-29 62 views
8

私は、apache poi 3.8を使ってExcelファイルを作成しています。このExcelファイルには日付が含まれている必要があります。apache poiでExcelの日付を日付に設定するにはどうすればいいですか?

私はExcel形式の「日付」という形式でExcelファイルに日付を書き込もうとしています。しかし、私はいつもタイプ "カスタム"を取得します。私はタイプ "日付"を使用する必要があるので、ユーザーの設定に基づいてローカライズされます。

私は次のことを試してみました:

Apache poi date format

Apache POI localized Date into Excel cell

しかし、それは仕事をdoens't。フォーマットは、私が使用する必要があります

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(); 

これは私が持っているコードですか?

おかげ

答えて

9

はフォーマットで構築された、特別の一つです。明示的に使用する場合は、明示的に選択する必要があります。 (Excelで使用されているほとんどすべての形式は、指定方法をレンダリングするカスタム形式ですが、いくつか特殊な形式があります)

POIには特殊な組み込み形式の完全なリストがありますExcelの最近のコピーのドロップダウンで)BuiltinFormatsにあります。あなた自身のカスタム書式文字列ではなく、カスタム書式文字列の1つを設定した場合は、期待どおりに動作するはずです

+3

私は "D-MMM-YY" の形式で建てられたと思いました。しかし何らかの理由で、この形式は機能しません。私が "m/d/yy"を使用すると、期待どおりに動作します。 – cremersstijn

+1

いいえ、d-mmm-yyはヨーロッパスタイルのフォーマットです。それは、あなたがヨーロッパでそれを表示するようなもの(アメリカンスタイル)のもののようなものです! – Gagravarr

+0

実際、そうではありません。フォーマット22(0x16、 "m/d/yy h:mm")を指定しました。しかし、それは "カスタム"として表示されます。 – Alexey

0

から撮影

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

私はあなたの問題を理解しています。私はApache PoiのDateUtilを使って解決しました。

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

お楽しみください!

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++; 
関連する問題