POI - Как мне удалить определенные строковые значения в Excel? - PullRequest
0 голосов
/ 21 февраля 2020

Я использовал Apache POI для отображения файлов печати в формате .xls программным способом. Единственная проблема, стоящая у меня на пути, это то, что у меня есть формат даты следующим образом в Excel, который изменился на формат строки:

снимок экрана - файл Excel,

enter image description here

это выше изображение Excel содержит (') эту строку

соответствующий код здесь,

cell = row.createCell((short)0);
cell.setCellValue(form.getAdd2());// Date
cell.setCellStyle(cellStyle2);

1 Ответ

1 голос
/ 22 февраля 2020

Какой точный тип возвращает 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 содержит действительно даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...