WriteXLSX gem 无法正确打印日期格式作为正常数字格式打印

WriteXLSX gem not print date format properly print as normal number format

需要在xlsx文件中打印日期mm/dd/yyyy格式,使用add_format方法添加格式,但打印为'2019-09-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

你正在做的事情的问题是你正在传递一个 date 对象,但是如果你已经阅读了 Date Time documentation 那么前两行就是这样 -

  1. A date/time in Excel is a real number plus an Excel number format.
  2. WriteXLSX doesn’t automatically convert date/time strings in write() to an Excel date/time.

现在,要回答您的问题,您需要将 date 转换为 Excel 可以理解的 number

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

我已经添加了 00:00:00.000 因为你不关心时间,如果你也想要时间然后检查 strftime documentation

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 documentation

的底部