From f2b8798a34aab4411a50861a4cdf47203edc3a19 Mon Sep 17 00:00:00 2001 From: Artem Kustikov Date: Sun, 4 Oct 2020 16:07:39 +0300 Subject: extend cell value load to support custom datetime format (#703) * extend cell value load to support custom datetime format * cleanup incorrect imports * fix numeric values conversion as done in legacy Excel * fix tests coverage * revert temporary package name fix * remove personal info from test XLSX files * remove unused dependencies * update format conversion in parseTime * new UT to increase code coverage * Resolve code review issue for PR #703 * Rename broken file name generated by unit test Co-authored-by: xuri --- cell.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'cell.go') diff --git a/cell.go b/cell.go index 5fe2157..11c6836 100644 --- a/cell.go +++ b/cell.go @@ -762,9 +762,23 @@ func (f *File) formattedValue(s int, v string) string { return v } styleSheet := f.stylesReader() - ok := builtInNumFmtFunc[*styleSheet.CellXfs.Xf[s].NumFmtID] + if s >= len(styleSheet.CellXfs.Xf) { + return v + } + numFmtId := *styleSheet.CellXfs.Xf[s].NumFmtID + ok := builtInNumFmtFunc[numFmtId] if ok != nil { - return ok(*styleSheet.CellXfs.Xf[s].NumFmtID, v) + return ok(v, builtInNumFmt[numFmtId]) + } + for _, xlsxFmt := range styleSheet.NumFmts.NumFmt { + if xlsxFmt.NumFmtID == numFmtId { + format := strings.ToLower(xlsxFmt.FormatCode) + if strings.Contains(format, "y") || strings.Contains(format, "m") || strings.Contains(format, "d") || strings.Contains(format, "h") { + return parseTime(v, format) + } + + return v + } } return v } -- cgit v1.2.1