2012-06-29 6 views
8

Tôi đang sử dụng apache poi 3.8 để tạo tệp excel. Tệp excel này cần chứa một số ngày.Làm thế nào để thiết lập ngày là loại ngày trong excel với apache poi?

Tôi đang cố ghi ngày tháng vào tệp excel với định dạng kiểu excel "ngày". Nhưng tôi luôn nhận được một loại "tùy chỉnh". Tôi cần phải sử dụng loại "ngày", vì vậy nó sẽ được bản địa hóa dựa trên các thiết lập người dùng.

Tôi đã thử những điều sau đây:

Apache poi date format

Apache POI localized Date into Excel cell

Nhưng nó doens't làm việc.

Đây là mã mà tôi có:

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

Định dạng tôi nên sử dụng?

Cảm ơn

Trả lời

9

ngày là một trong những đặc biệt, được xây dựng trong các định dạng. Nếu bạn muốn sử dụng một cách rõ ràng, thì bạn cần phải chọn nó một cách rõ ràng. (Hầu hết tất cả các định dạng được sử dụng trong Excel là các định dạng tùy chỉnh, hiển thị cách bạn chỉ định, nhưng có một số đặc biệt)

POI có danh sách đầy đủ các định dạng đặc biệt (nhỏ hơn nhiều so với danh sách định dạng) trong danh sách thả xuống trong các bản sao Excel gần đây!) trong BuiltinFormats. Nếu bạn chắc chắn rằng bạn đặt một trong số đó và không phải là chuỗi định dạng tùy chỉnh của riêng bạn, nó sẽ hoạt động chính xác như bạn mong đợi

+3

tôi nghĩ "d-mmm-yy" đã được tích hợp sẵn trong định dạng. Nhưng vì lý do nào đó định dạng này không hoạt động. Khi tôi sử dụng "m/d/yy", nó hoạt động như mong đợi. – cremersstijn

+1

Không, d-mmm-yy là một định dạng phong cách châu Âu. Đó là những gì giống như những người xây dựng (phong cách Mỹ) trông giống như khi bạn hiển thị nó ở châu Âu! – Gagravarr

+0

Thực ra, điều đó không đúng. Tôi đã chỉ định định dạng 22 (0x16, "m/d/yy h: mm"). Nhưng nó được hiển thị là "Tùy chỉnh". – Alexey

4

Không thực sự biết nếu bạn đã giải quyết điều này hay chưa nhưng đây là mã sẽ giải quyết. Nó thực sự giải quyết vấn đề của tôi.

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

Taken từ http://poi.apache.org/spreadsheet/quick-guide.html#CreateDateCells

0

Tôi hiểu vấn đề của bạn. Tôi đã giải quyết bằng cách sử dụng DateUtil của Apache Poi.

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

Thưởng thức !!

0

Nó đã được giải quyết bằng dưới đây:

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