Go 语言 Excelize 获取日期值并修改格式

1,322 阅读1分钟

设置 cell 单元格数值格式为“General”,使用这种格式,获取日期单元格的值为浮点数字符串,该字符串表示该日期与1900-01-01 00:00:00相差的天数(Excel 1900 日期系统)。利用该值,使用 excelize 的 ExcelDateToTime 工具函数将浮点数转成 time.Time 值。修改 time 值,将该值填入原 cell。重新设置该 cell 的 style,使值显示为 yyyy/mm/dd hh:mm

cellAxis := "A1"
valStyle, err := excelFile.NewStyle(`{"number_format": 0}`)
if err != nil {
   log.Fatalln(err)
}
excelFile.SetCellStyle(sheetName, cellAxis, cellAxis, valStyle)

// 浮点字符串,表示与1900-01-01 00:00:00相差的天数
dayNo, err := excelFile.GetCellValue(sheetName, cellAxis)
if err != nil {
   log.Fatalln(err)
}
// dayNo 转成浮点数
dayFloat, err := strconv.ParseFloat(dayNo, 64)
if err != nil {
   log.Fatalln(err)
}
// 使用 excelize 工具函数将浮点数转成 time.Time
cellTime, err := excelize.ExcelDateToTime(dayFloat, false)
if err != nil {
   log.Fatalln(err)
}
// 根据需求修改日期,此处将原有日期增加1天
cellTime.AddDate(0, 0, 1)
// 替换原有日期的值,注意 cellTime 为 time.Time 类型
excelFile.SetCellValue(sheetName, cellAxis, cellTime)
// 设置 excel 日期格式为 yyyy/mm/dd hh:mm
targetStyle, err := excelFile.NewStyle(`{"custom_number_format": "yyyy/mm/dd hh:mm"}`)
if err != nil {
   log.Fatalln(err)
}
excelFile.SetCellStyle(sheetName, cellAxis, cellAxis, targetStyle)
// 保存修改
excelFile.Save()

修改后,该日期单元格显示为: 2022/11/9 13:16