summaryrefslogtreecommitdiff
path: root/xmlSharedStrings.go
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2020-05-22 16:53:46 +0800
committerGitHub <noreply@github.com>2020-05-22 16:53:46 +0800
commitec14de32f0c06f7a26b6b79578f666c0cc50b72c (patch)
treec6ebd61a7d9a7da5b993ffb82e4fb6c036e75d6a /xmlSharedStrings.go
parentaa7eadbffe6ae2f9f86201bbaaa4c1d1e8829cae (diff)
parent2efc7107ff30dc7f1e1a798082616ee488f99489 (diff)
Merge branch 'master' into fix/cell_lock
Diffstat (limited to 'xmlSharedStrings.go')
-rw-r--r--xmlSharedStrings.go77
1 files changed, 61 insertions, 16 deletions
diff --git a/xmlSharedStrings.go b/xmlSharedStrings.go
index 3fcf3d5..a6525df 100644
--- a/xmlSharedStrings.go
+++ b/xmlSharedStrings.go
@@ -1,15 +1,18 @@
-// Copyright 2016 - 2019 The excelize Authors. All rights reserved. Use of
+// Copyright 2016 - 2020 The excelize Authors. All rights reserved. Use of
// this source code is governed by a BSD-style license that can be found in
// the LICENSE file.
//
// Package excelize providing a set of functions that allow you to write to
// and read from XLSX files. Support reads and writes XLSX file generated by
// Microsoft Excelâ„¢ 2007 and later. Support save file without losing original
-// charts of XLSX. This library needs Go version 1.8 or later.
+// charts of XLSX. This library needs Go version 1.10 or later.
package excelize
-import "encoding/xml"
+import (
+ "encoding/xml"
+ "strings"
+)
// xlsxSST directly maps the sst element from the namespace
// http://schemas.openxmlformats.org/spreadsheetml/2006/main. String values may
@@ -25,20 +28,46 @@ type xlsxSST struct {
SI []xlsxSI `xml:"si"`
}
-// xlsxSI directly maps the si element from the namespace
-// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have
-// not checked this for completeness - it does as much as I need.
+// xlsxSI (String Item) is the representation of an individual string in the
+// Shared String table. If the string is just a simple string with formatting
+// applied at the cell level, then the String Item (si) should contain a
+// single text element used to express the string. However, if the string in
+// the cell is more complex - i.e., has formatting applied at the character
+// level - then the string item shall consist of multiple rich text runs which
+// collectively are used to express the string.
type xlsxSI struct {
- T string `xml:"t"`
+ T string `xml:"t,omitempty"`
R []xlsxR `xml:"r"`
}
-// xlsxR directly maps the r element from the namespace
-// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have
-// not checked this for completeness - it does as much as I need.
+// String extracts characters from a string item.
+func (x xlsxSI) String() string {
+ if len(x.R) > 0 {
+ var rows strings.Builder
+ for _, s := range x.R {
+ if s.T != nil {
+ rows.WriteString(s.T.Val)
+ }
+ }
+ return rows.String()
+ }
+ return x.T
+}
+
+// xlsxR represents a run of rich text. A rich text run is a region of text
+// that share a common set of properties, such as formatting properties. The
+// properties are defined in the rPr element, and the text displayed to the
+// user is defined in the Text (t) element.
type xlsxR struct {
RPr *xlsxRPr `xml:"rPr"`
- T string `xml:"t"`
+ T *xlsxT `xml:"t"`
+}
+
+// xlsxT directly maps the t element in the run properties.
+type xlsxT struct {
+ XMLName xml.Name `xml:"t"`
+ Space string `xml:"xml:space,attr,omitempty"`
+ Val string `xml:",innerxml"`
}
// xlsxRPr (Run Properties) specifies a set of run properties which shall be
@@ -47,9 +76,25 @@ type xlsxR struct {
// they are directly applied to the run and supersede any formatting from
// styles.
type xlsxRPr struct {
- B string `xml:"b,omitempty"`
- Sz *attrValFloat `xml:"sz"`
- Color *xlsxColor `xml:"color"`
- RFont *attrValString `xml:"rFont"`
- Family *attrValInt `xml:"family"`
+ RFont *attrValString `xml:"rFont"`
+ Charset *attrValInt `xml:"charset"`
+ Family *attrValInt `xml:"family"`
+ B string `xml:"b,omitempty"`
+ I string `xml:"i,omitempty"`
+ Strike string `xml:"strike,omitempty"`
+ Outline string `xml:"outline,omitempty"`
+ Shadow string `xml:"shadow,omitempty"`
+ Condense string `xml:"condense,omitempty"`
+ Extend string `xml:"extend,omitempty"`
+ Color *xlsxColor `xml:"color"`
+ Sz *attrValFloat `xml:"sz"`
+ U *attrValString `xml:"u"`
+ VertAlign *attrValString `xml:"vertAlign"`
+ Scheme *attrValString `xml:"scheme"`
+}
+
+// RichTextRun directly maps the settings of the rich text run.
+type RichTextRun struct {
+ Font *Font
+ Text string
}