| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | // Copyright 2016 - 2021 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 / XLSM / XLTM files. Supports reading and writing// spreadsheet documents generated by Microsoft Excel™ 2007 and later. Supports// complex components by high compatibility, and provided streaming API for// generating or reading data from a worksheet with huge amounts of data. This// library needs Go version 1.15 or later.package excelizeimport (	"encoding/xml"	"strings")// xlsxSST directly maps the sst element from the namespace// http://schemas.openxmlformats.org/spreadsheetml/2006/main. String values may// be stored directly inside spreadsheet cell elements; however, storing the// same value inside multiple cell elements can result in very large worksheet// Parts, possibly resulting in performance degradation. The Shared String Table// is an indexed list of string values, shared across the workbook, which allows// implementations to store values only once.type xlsxSST struct {	XMLName     xml.Name `xml:"http://schemas.openxmlformats.org/spreadsheetml/2006/main sst"`	Count       int      `xml:"count,attr"`	UniqueCount int      `xml:"uniqueCount,attr"`	SI          []xlsxSI `xml:"si"`}// 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          *xlsxT             `xml:"t,omitempty"`	R          []xlsxR            `xml:"r"`	RPh        []*xlsxPhoneticRun `xml:"rPh"`	PhoneticPr *xlsxPhoneticPr    `xml:"phoneticPr"`}// 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 bstrUnmarshal(rows.String())	}	if x.T != nil {		return bstrUnmarshal(x.T.Val)	}	return ""}// 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   *xlsxT   `xml:"t"`}// xlsxT directly maps the t element in the run properties.type xlsxT struct {	XMLName xml.Name `xml:"t"`	Space   xml.Attr `xml:"space,attr,omitempty"`	Val     string   `xml:",chardata"`}// xlsxRPr (Run Properties) specifies a set of run properties which shall be// applied to the contents of the parent run after all style formatting has been// applied to the text. These properties are defined as direct formatting, since// they are directly applied to the run and supersede any formatting from// styles.type xlsxRPr struct {	RFont     *attrValString `xml:"rFont"`	Charset   *attrValInt    `xml:"charset"`	Family    *attrValInt    `xml:"family"`	B         *string        `xml:"b"`	I         *string        `xml:"i"`	Strike    *string        `xml:"strike"`	Outline   *string        `xml:"outline"`	Shadow    *string        `xml:"shadow"`	Condense  *string        `xml:"condense"`	Extend    *string        `xml:"extend"`	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}
 |