Использование времени ввода apache poi - PullRequest
0 голосов
/ 20 сентября 2018

Я использовал Apahe POI для ввода времени в файл Excel следующим образом:

Time time = Time.valueOf("19:30:00");
CellStyle cellStyle1 = workbook.createCellStyle();
CreationHelper createHelper1 = workbook.getCreationHelper();
cellStyle1.setDataFormat(
        createHelper.createDataFormat().getFormat("HH:MM AM/PM"));
cell = row.getCell(1);
System.out.println(time.toString());
cell.setCellValue(time);
cell.setCellStyle(cellStyle1);

, что привело к превосходству Excel, как и ожидалось, однако было обнаружено следующее несоответствие, что фактическое значение Excel и отображаемое значение различны.Как я могу сделать их одинаковыми, я использую неправильный способ обновления значения в формате Excel Time Screenshot of output on Excel

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

В Excel даты и время сохраняются как числа с плавающей запятой, как количество дней с полуночи 01/01/1900 .

Если вы будете хранитьнекоторое значение меньше 1.0 - оно будет интерпретироваться как время, иначе как дата, например:

  1. 0.5 будет равно 12:00:00
  2. 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);

И результат Excel будет выглядеть так:

Excel time output


Предположим, вопрос был о вещах, описанных выше, реальное значение даты / времени в Excel должен быть двойным, а значение представления должно основываться на заданном вами стиле / шаблоне;Предположим, что целью было достижение подобного рода сходства, то есть 19:30:00 в формуле и 07:30 PM в ячейке.

Если нет, и целью было получить 07:30 PM в обоих случаях - тогда вы будетепросто нужно хранить строковое значение, а не дату / время.

0 голосов
/ 20 сентября 2018

Я использую POI 3.17 и Excel из Office 365 ProPlus со шведским языком.Я добавил несколько строк в ваш код (для создания книги, листа и т. Д.).Код ниже работает нормально.В ячейке я получаю «07:30 PM», а в строке формул «1970-01-01 19:30:00».Если вы не получите ничего похожего при запуске моего кода (используя POI 3.17), я думаю, что что-то немного странное с вашим 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();
    }
}
...