Какой точный тип возвращает form.getAdd2()
? Я подозреваю, что это String
, а не Date
. Если это так, вам нужно преобразовать это String
в Date
перед установкой значения ячейки. Затем установите значение Date
в качестве значения ячейки.
Используя текущий apache poi 4.1.2
, это можно сделать с помощью java.time.format.DateTimeFormatter
и java.time.LocalDate
, поскольку существует Cell.setCellValue (java .time. Значение LocalDate) сейчас.
До apache poi 3.17
это можно сделать с помощью java.text.SimpleDateFormat
и java.util.Date
. Cell.setCellValue (java .util.Date value) - это используемый тогда метод setCellValue
.
Полный пример:
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.List;
import java.util.ArrayList;
import java.time.format.DateTimeFormatter;
import java.time.LocalDate;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
class CreateExcelSetDateCellValue {
public static void main(String[] args) throws Exception {
List<Form> forms = new ArrayList<Form>();
Form f;
f = new Form(); f.setAdd2("10-Jan-2020"); forms.add(f);
f = new Form(); f.setAdd2("1-Jan-2020"); forms.add(f);
f = new Form(); f.setAdd2("12-Jan-2020"); forms.add(f);
f = new Form(); f.setAdd2("19-Jan-2020"); forms.add(f);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("d-MMM-yyyy", Locale.US);
//SimpleDateFormat simpleDateFormatter = new SimpleDateFormat("dd-MMM-yyyy", Locale.US); // up to apache poi 3.17
Workbook workbook = new XSSFWorkbook();
CellStyle cellStyle2 = workbook.createCellStyle();
cellStyle2.setDataFormat(workbook.createDataFormat().getFormat("d-MMM-yyyy"));
Sheet sheet = workbook.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("DateString");
cell = row.createCell(1);
cell.setCellValue("Date");
int r = 1;
for (Form form : forms) {
row = sheet.createRow(r);
cell = row.createCell(0);
cell.setCellValue(form.getAdd2());// String
cell.setCellStyle(cellStyle2);
cell = row.createCell(1);
cell.setCellValue(LocalDate.parse(form.getAdd2(), dateTimeFormatter));// Date
//cell.setCellValue(simpleDateFormatter.parse(form.getAdd2()));// Date up to apache poi 3.17
cell.setCellStyle(cellStyle2);
r++;
}
sheet.setColumnWidth(0, 15*256);
sheet.setColumnWidth(1, 15*256);
FileOutputStream out = new FileOutputStream("Excel.xlsx");
workbook.write(out);
out.close();
workbook.close();
}
static class Form {
private String add2 = "";
public void setAdd2(String add2) {
this.add2 = add2;
}
public String getAdd2() {
return this.add2;
}
}
}
Столбец A
содержит даты Strings
и показывает вашу проблему. Столбец B
содержит действительно даты.