2 回答

TA貢獻(xiàn)1853條經(jīng)驗 獲得超18個贊
在Excel 中,日期和時間存儲為浮點數(shù),即自01/01/1900午夜以來的天數(shù)。
如果您將存儲一些小于1.0
- 的值,它將被解釋為時間,否則為日期,例如:
0.5
將等于12:00:00
5.5
將等于05.01.1900 12:00:00
要正確處理日期和時間,請使用org.apache.poi.ss.usermodel.DateUtil
,例如您的示例可能如下所示:
double time = DateUtil.convertTime("19:30:00");
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setDataFormat(
workbook.createDataFormat().getFormat("HH:MM AM/PM"));
cell.setCellValue(time);
cell.setCellStyle(cellStyle);
結(jié)果Excel將如下所示:
假設(shè)問題與上述內(nèi)容有關(guān),Excel 中的實際日期/時間值應(yīng)為雙精度值,而表示值應(yīng)基于您設(shè)置的樣式/模式;假設(shè)目標(biāo)是實現(xiàn)這種相似性,即19:30:00
在公式和07:30 PM
單元格中。
如果沒有并且目標(biāo)是07:30 PM
在兩種情況下都有 - 那么您只需要存儲一個字符串值,而不是日期/時間。

TA貢獻(xiàn)1830條經(jīng)驗 獲得超9個贊
我使用來自 Office 365 ProPlus 的 POI 3.17 和 Excel 和瑞典語語言環(huán)境。我在您的代碼中添加了幾行(用于創(chuàng)建工作簿和工作表等)。下面的代碼工作正常。在單元格中我得到“07:30 PM”和在公式欄中“1970-01-01 19:30:00”。如果在運(yùn)行我的代碼(使用 POI 3.17)時沒有得到類似的結(jié)果,我的猜測是您的 Excel 有點奇怪。
public void createExcelFile() {
XSSFWorkbook workbook = new XSSFWorkbook();
Time time = Time.valueOf("19:30:00");
CellStyle cellStyle1 = workbook.createCellStyle();
CreationHelper createHelper1 = workbook.getCreationHelper();
cellStyle1.setDataFormat(createHelper1.createDataFormat().getFormat("HH:MM AM/PM"));
Sheet sheet = workbook.createSheet("Sheet");
Row row = sheet.createRow(0);
Cell cell = row.createCell(1);
System.out.println(time.toString());
cell.setCellValue(time);
cell.setCellStyle(cellStyle1);
try {
FileOutputStream outputStream = new FileOutputStream("C:/temp/file.xlsx");
workbook.write(outputStream);
workbook.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
添加回答
舉報