gpt4 book ai didi

java - 使用 apache POI 将日期格式设置为 Excel 单元格不起作用

转载 作者:行者123 更新时间:2023-12-02 02:31:47 25 4
gpt4 key购买 nike

我使用下面的代码将日期值设置为 Excel 单元格,但它在 Excel 单元格中显示 double 值。要求是打开 Excel 时查看日期值。

row = sheet.createRow(rowNum++);
cell = row.createCell(0);

XSSFCellStyle cellStyle = (XSSFCellStyle)cell.getCellStyle();
cellStyle.setDataFormat(workbook.createDataFormat().getFormat("mm/dd/yyyy"));
Date loginDate = formatStringToDate(entry.getKey(),"yyyy-MM-dd");
cell.setCellValue(loginDate);
cell.setCellStyle(cellStyle);

当我打开并查看单元格格式时,它显示为常规,如下所示 enter image description here

如果我在 Excel 中将格式更改为日期,那么它会在单元格中显示日期值,但我希望单元格默认显示日期值

最佳答案

首先您需要了解 Excel 如何管理其单元格样式。它在工作簿级别执行此操作,因此并非每个单元格都有自己的单元格样式。相反,根据需要有多种不同的单元格样式,并且单元格正在使用其中一种单元格样式。

新创建的单元格具有默认单元格样式,如果在此新创建的单元格上使用 Cell.getCellStyle,您将获得此默认单元格样式。因此,您的代码尝试将默认单元格样式设置为日期格式的单元格样式。这不是要走的路。

因此,首先在工作簿级别,我们根据需要创建尽可能多的单元格样式。例如,一种日期格式的单元格样式和一种货币格式的单元格样式。

然后我们创建工作表和单元格,并将数据放入单元格中。如果单元格需要特殊的单元格样式,那么我们将使用之前创建的单元格样式之一。

示例:

import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Map;
import java.util.TreeMap;
import java.util.List;
import java.util.Arrays;

public class CreateExcelNumberFormats {

public static void main(String[] args) throws Exception {

Map<Date, List<Object>> data = new TreeMap<Date, List<Object>>();

data.put(new GregorianCalendar(2017, 9, 29, 6, 0).getTime(), Arrays.asList("user 1", 1234.56));
data.put(new GregorianCalendar(2017, 9, 30, 6, 0).getTime(), Arrays.asList("user 2", 789.12));
data.put(new GregorianCalendar(2017, 9, 31, 6, 0).getTime(), Arrays.asList("user 3", 131415.16));
data.put(new GregorianCalendar(2017, 9, 29, 15, 45).getTime(), Arrays.asList("user 4", 1234567.89));
data.put(new GregorianCalendar(2017, 9, 30, 9, 45).getTime(), Arrays.asList("user 5", 123.45));

Workbook wb = new XSSFWorkbook();
CreationHelper creationHelper = wb.getCreationHelper();

//on workbook level we are creating as much cell styles as needed:
CellStyle datestyle = wb.createCellStyle();
datestyle.setDataFormat(creationHelper.createDataFormat().getFormat("mm/dd/yyyy"));
CellStyle currencystyle = wb.createCellStyle();
currencystyle.setDataFormat(creationHelper.createDataFormat().getFormat("$#,##0.00"));

//now we are creating the sheet and the cells and are putting the data into the cells
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("Date");
cell = row.createCell(1);
cell.setCellValue("Logged in User");
cell = row.createCell(2);
cell.setCellValue("Amount");

int rowNum = 1;

for (Map.Entry<Date, List<Object>> entry : data.entrySet()) {

row = sheet.createRow(rowNum++);
cell = row.createCell(0);
Date loginDate = entry.getKey();
cell.setCellValue(loginDate);
//if the cell needs a special cell style, then we are using one of the ones we have previous created
cell.setCellStyle(datestyle);

List<Object> userdatas = entry.getValue();

int cellNum = 1;
for (Object userdata : userdatas) {
cell = row.createCell(cellNum);
if (cellNum == 1) {
cell.setCellValue((String)userdata);
} else if (cellNum == 2) {
cell.setCellValue((Double)userdata);
//if the cell needs a special cell style, then we are using one of the ones we have previous created
cell.setCellStyle(currencystyle);
}
cellNum++;
}

}

wb.write(new FileOutputStream("CreateExcelNumberFormats.xlsx"));
wb.close();

}

}

关于java - 使用 apache POI 将日期格式设置为 Excel 单元格不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46982950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com