WriteXLSX gem не печатать формат даты правильно печатать как обычный числовой формат - PullRequest
0 голосов
/ 06 февраля 2020

Нужно напечатать дату в формате xlsx в формате мм / дд / гггг, добавлен формат с использованием метода add_format, но его печать выполняется как '2019-27-27 дата

workbook = ::WriteXLSX.new(file, strings_to_urls: false)
worksheet = workbook.add_worksheet('Sheet 1')
row=column=1
date_val = Date.today
date_format = workbook.add_format({'num_format': 'dd/mm/yy'})
worksheet.write(1 + row, column, date_val, date_format)
workbook.close

, затем я попробовал метод write_date_time , пример кода ниже

workbook = ::WriteXLSX.new(file, strings_to_urls: false)
worksheet = workbook.add_worksheet('Sheet 1')
row=column=1
date_val = Date.today
date_format = workbook.add_format({'num_format': 'dd/mm/yy'})
worksheet.write_date_time(1 + row, column, item[:value]&.iso8601, date_format)
workbook.close

1 Ответ

2 голосов
/ 06 февраля 2020

Проблема с тем, что вы делаете, заключается в том, что вы передаете объект date, но если вы прочитали документацию Дата и время , то первые две строки говорят об этом -

  1. Дата / время в Excel - это действительное число плюс числовой формат Excel.
  2. WriteXLSX не выполняет автоматическое преобразование строк даты / времени в write () в дату / время Excel.

Теперь, чтобы ответить на ваш вопрос, вам необходимо преобразовать date в number, который понимает Excel.

date_time = DateTime.now.strftime('%Y-%m-%dT00:00:00.000Z')

Я добавил 00:00:00.000, так как вы не беспокоитесь о времени, если вы хотите, чтобы время также было, тогда проверьте документацию strftime

date_time_number = worksheet.convert_date_time(date_time)
format2 = workbook.add_format(:num_format => 'dd/mm/yy')
worksheet.write(row, col, number, format2)

Это должно решить это для вас

Это помогло мне понять, как использовать convert_date_time , и его упоминание находится внизу документации Date Time

...