// Copyright 2016 - 2019 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. package excelize import ( "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 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. type xlsxSI struct { T string `xml:"t"` R []xlsxR `xml:"r"` } func (x xlsxSI) String() string { if len(x.R) > 0 { var rows strings.Builder for _, s := range x.R { rows.WriteString(s.T) } return rows.String() } return x.T } // 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. type xlsxR struct { RPr *xlsxRPr `xml:"rPr"` T string `xml:"t"` } // 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 { B string `xml:"b,omitempty"` Sz *attrValFloat `xml:"sz"` Color *xlsxColor `xml:"color"` RFont *attrValString `xml:"rFont"` Family *attrValInt `xml:"family"` }