From bbb8ebfa8cc648ec09094d16eddebb03240baecf Mon Sep 17 00:00:00 2001 From: tonnyzhang <450024933@qq.com> Date: Mon, 22 Feb 2021 06:04:13 -0600 Subject: add GetCellRichText method and test (#789) --- cell.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 3 deletions(-) (limited to 'cell.go') diff --git a/cell.go b/cell.go index ae468e9..ea4e1d0 100644 --- a/cell.go +++ b/cell.go @@ -494,6 +494,54 @@ func (f *File) SetCellHyperLink(sheet, axis, link, linkType string) error { return nil } +// GetCellRichText provides a function to get rich text of cell by given +// worksheet. +func (f *File) GetCellRichText(sheet, cell string) (runs []RichTextRun, err error) { + ws, err := f.workSheetReader(sheet) + if err != nil { + return + } + cellData, _, _, err := f.prepareCell(ws, sheet, cell) + if err != nil { + return + } + siIdx, err := strconv.Atoi(cellData.V) + if nil != err { + return + } + sst := f.sharedStringsReader() + if len(sst.SI) <= siIdx || siIdx < 0 { + return + } + si := sst.SI[siIdx] + for _, v := range si.R { + run := RichTextRun{ + Text: v.T.Val, + } + if nil != v.RPr { + font := Font{} + font.Bold = v.RPr.B != nil + font.Italic = v.RPr.I != nil + if nil != v.RPr.U { + font.Underline = *v.RPr.U.Val + } + if nil != v.RPr.RFont { + font.Family = *v.RPr.RFont.Val + } + if nil != v.RPr.Sz { + font.Size = *v.RPr.Sz.Val + } + font.Strike = v.RPr.Strike != nil + if nil != v.RPr.Color { + font.Color = strings.TrimPrefix(v.RPr.Color.RGB, "FF") + } + run.Font = &font + } + runs = append(runs, run) + } + return +} + // SetCellRichText provides a function to set cell with rich text by given // worksheet. For example, set rich text on the A1 cell of the worksheet named // Sheet1: @@ -619,14 +667,15 @@ func (f *File) SetCellRichText(sheet, cell string, runs []RichTextRun) error { fnt := textRun.Font if fnt != nil { rpr := xlsxRPr{} + trueVal := "" if fnt.Bold { - rpr.B = " " + rpr.B = &trueVal } if fnt.Italic { - rpr.I = " " + rpr.I = &trueVal } if fnt.Strike { - rpr.Strike = " " + rpr.Strike = &trueVal } if fnt.Underline != "" { rpr.U = &attrValString{Val: &fnt.Underline} -- cgit v1.2.1