123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372 |
- // 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 excelize
- import (
- "encoding/xml"
- "sync"
- )
- // xlsxStyleSheet is the root element of the Styles part.
- type xlsxStyleSheet struct {
- sync.Mutex
- XMLName xml.Name `xml:"http://schemas.openxmlformats.org/spreadsheetml/2006/main styleSheet"`
- NumFmts *xlsxNumFmts `xml:"numFmts,omitempty"`
- Fonts *xlsxFonts `xml:"fonts,omitempty"`
- Fills *xlsxFills `xml:"fills,omitempty"`
- Borders *xlsxBorders `xml:"borders,omitempty"`
- CellStyleXfs *xlsxCellStyleXfs `xml:"cellStyleXfs,omitempty"`
- CellXfs *xlsxCellXfs `xml:"cellXfs,omitempty"`
- CellStyles *xlsxCellStyles `xml:"cellStyles,omitempty"`
- Dxfs *xlsxDxfs `xml:"dxfs,omitempty"`
- TableStyles *xlsxTableStyles `xml:"tableStyles,omitempty"`
- Colors *xlsxStyleColors `xml:"colors,omitempty"`
- ExtLst *xlsxExtLst `xml:"extLst"`
- }
- // xlsxAlignment formatting information pertaining to text alignment in cells.
- // There are a variety of choices for how text is aligned both horizontally and
- // vertically, as well as indentation settings, and so on.
- type xlsxAlignment struct {
- Horizontal string `xml:"horizontal,attr,omitempty"`
- Indent int `xml:"indent,attr,omitempty"`
- JustifyLastLine bool `xml:"justifyLastLine,attr,omitempty"`
- ReadingOrder uint64 `xml:"readingOrder,attr,omitempty"`
- RelativeIndent int `xml:"relativeIndent,attr,omitempty"`
- ShrinkToFit bool `xml:"shrinkToFit,attr,omitempty"`
- TextRotation int `xml:"textRotation,attr,omitempty"`
- Vertical string `xml:"vertical,attr,omitempty"`
- WrapText bool `xml:"wrapText,attr,omitempty"`
- }
- // xlsxProtection (Protection Properties) contains protection properties
- // associated with the cell. Each cell has protection properties that can be
- // set. The cell protection properties do not take effect unless the sheet has
- // been protected.
- type xlsxProtection struct {
- Hidden *bool `xml:"hidden,attr"`
- Locked *bool `xml:"locked,attr"`
- }
- // xlsxLine expresses a single set of cell border.
- type xlsxLine struct {
- Style string `xml:"style,attr,omitempty"`
- Color *xlsxColor `xml:"color,omitempty"`
- }
- // xlsxColor is a common mapping used for both the fgColor and bgColor elements.
- // Foreground color of the cell fill pattern. Cell fill patterns operate with
- // two colors: a background color and a foreground color. These combine together
- // to make a patterned cell fill. Background color of the cell fill pattern.
- // Cell fill patterns operate with two colors: a background color and a
- // foreground color. These combine together to make a patterned cell fill.
- type xlsxColor struct {
- Auto bool `xml:"auto,attr,omitempty"`
- RGB string `xml:"rgb,attr,omitempty"`
- Indexed int `xml:"indexed,attr,omitempty"`
- Theme *int `xml:"theme,attr"`
- Tint float64 `xml:"tint,attr,omitempty"`
- }
- // xlsxFonts directly maps the font element. This element contains all font
- // definitions for this workbook.
- type xlsxFonts struct {
- Count int `xml:"count,attr"`
- Font []*xlsxFont `xml:"font"`
- }
- // xlsxFont directly maps the font element. This element defines the
- // properties for one of the fonts used in this workbook.
- type xlsxFont struct {
- B *attrValBool `xml:"b,omitempty"`
- I *attrValBool `xml:"i,omitempty"`
- Strike *attrValBool `xml:"strike,omitempty"`
- Outline *attrValBool `xml:"outline,omitempty"`
- Shadow *attrValBool `xml:"shadow,omitempty"`
- Condense *attrValBool `xml:"condense,omitempty"`
- Extend *attrValBool `xml:"extend,omitempty"`
- U *attrValString `xml:"u"`
- Sz *attrValFloat `xml:"sz"`
- Color *xlsxColor `xml:"color"`
- Name *attrValString `xml:"name"`
- Family *attrValInt `xml:"family"`
- Charset *attrValInt `xml:"charset"`
- Scheme *attrValString `xml:"scheme"`
- }
- // xlsxFills directly maps the fills element. This element defines the cell
- // fills portion of the Styles part, consisting of a sequence of fill records. A
- // cell fill consists of a background color, foreground color, and pattern to be
- // applied across the cell.
- type xlsxFills struct {
- Count int `xml:"count,attr"`
- Fill []*xlsxFill `xml:"fill,omitempty"`
- }
- // xlsxFill directly maps the fill element. This element specifies fill
- // formatting.
- type xlsxFill struct {
- PatternFill *xlsxPatternFill `xml:"patternFill,omitempty"`
- GradientFill *xlsxGradientFill `xml:"gradientFill,omitempty"`
- }
- // xlsxPatternFill is used to specify cell fill information for pattern and
- // solid color cell fills. For solid cell fills (no pattern), fgColor is used.
- // For cell fills with patterns specified, then the cell fill color is
- // specified by the bgColor element.
- type xlsxPatternFill struct {
- PatternType string `xml:"patternType,attr,omitempty"`
- FgColor *xlsxColor `xml:"fgColor"`
- BgColor *xlsxColor `xml:"bgColor"`
- }
- // xlsxGradientFill defines a gradient-style cell fill. Gradient cell fills can
- // use one or two colors as the end points of color interpolation.
- type xlsxGradientFill struct {
- Bottom float64 `xml:"bottom,attr,omitempty"`
- Degree float64 `xml:"degree,attr,omitempty"`
- Left float64 `xml:"left,attr,omitempty"`
- Right float64 `xml:"right,attr,omitempty"`
- Top float64 `xml:"top,attr,omitempty"`
- Type string `xml:"type,attr,omitempty"`
- Stop []*xlsxGradientFillStop `xml:"stop,omitempty"`
- }
- // xlsxGradientFillStop directly maps the stop element.
- type xlsxGradientFillStop struct {
- Position float64 `xml:"position,attr"`
- Color xlsxColor `xml:"color,omitempty"`
- }
- // xlsxBorders directly maps the borders element. This element contains borders
- // formatting information, specifying all border definitions for all cells in
- // the workbook.
- type xlsxBorders struct {
- Count int `xml:"count,attr"`
- Border []*xlsxBorder `xml:"border,omitempty"`
- }
- // xlsxBorder directly maps the border element. Expresses a single set of cell
- // border formats (left, right, top, bottom, diagonal). Color is optional. When
- // missing, 'automatic' is implied.
- type xlsxBorder struct {
- DiagonalDown bool `xml:"diagonalDown,attr,omitempty"`
- DiagonalUp bool `xml:"diagonalUp,attr,omitempty"`
- Outline bool `xml:"outline,attr,omitempty"`
- Left xlsxLine `xml:"left,omitempty"`
- Right xlsxLine `xml:"right,omitempty"`
- Top xlsxLine `xml:"top,omitempty"`
- Bottom xlsxLine `xml:"bottom,omitempty"`
- Diagonal xlsxLine `xml:"diagonal,omitempty"`
- }
- // xlsxCellStyles directly maps the cellStyles element. This element contains
- // the named cell styles, consisting of a sequence of named style records. A
- // named cell style is a collection of direct or themed formatting (e.g., cell
- // border, cell fill, and font type/size/style) grouped together into a single
- // named style, and can be applied to a cell.
- type xlsxCellStyles struct {
- XMLName xml.Name `xml:"cellStyles"`
- Count int `xml:"count,attr"`
- CellStyle []*xlsxCellStyle `xml:"cellStyle,omitempty"`
- }
- // xlsxCellStyle directly maps the cellStyle element. This element represents
- // the name and related formatting records for a named cell style in this
- // workbook.
- type xlsxCellStyle struct {
- XMLName xml.Name `xml:"cellStyle"`
- Name string `xml:"name,attr"`
- XfID int `xml:"xfId,attr"`
- BuiltInID *int `xml:"builtinId,attr,omitempty"`
- ILevel *int `xml:"iLevel,attr,omitempty"`
- Hidden *bool `xml:"hidden,attr,omitempty"`
- CustomBuiltIn *bool `xml:"customBuiltin,attr,omitempty"`
- }
- // xlsxCellStyleXfs directly maps the cellStyleXfs element. This element
- // contains the master formatting records (xf's) which define the formatting for
- // all named cell styles in this workbook. Master formatting records reference
- // individual elements of formatting (e.g., number format, font definitions,
- // cell fills, etc) by specifying a zero-based index into those collections.
- // Master formatting records also specify whether to apply or ignore particular
- // aspects of formatting.
- type xlsxCellStyleXfs struct {
- Count int `xml:"count,attr"`
- Xf []xlsxXf `xml:"xf,omitempty"`
- }
- // xlsxXf directly maps the xf element. A single xf element describes all of the
- // formatting for a cell.
- type xlsxXf struct {
- NumFmtID *int `xml:"numFmtId,attr"`
- FontID *int `xml:"fontId,attr"`
- FillID *int `xml:"fillId,attr"`
- BorderID *int `xml:"borderId,attr"`
- XfID *int `xml:"xfId,attr"`
- QuotePrefix *bool `xml:"quotePrefix,attr"`
- PivotButton *bool `xml:"pivotButton,attr"`
- ApplyNumberFormat *bool `xml:"applyNumberFormat,attr"`
- ApplyFont *bool `xml:"applyFont,attr"`
- ApplyFill *bool `xml:"applyFill,attr"`
- ApplyBorder *bool `xml:"applyBorder,attr"`
- ApplyAlignment *bool `xml:"applyAlignment,attr"`
- ApplyProtection *bool `xml:"applyProtection,attr"`
- Alignment *xlsxAlignment `xml:"alignment"`
- Protection *xlsxProtection `xml:"protection"`
- }
- // xlsxCellXfs directly maps the cellXfs element. This element contains the
- // master formatting records (xf) which define the formatting applied to cells
- // in this workbook. These records are the starting point for determining the
- // formatting for a cell. Cells in the Sheet Part reference the xf records by
- // zero-based index.
- type xlsxCellXfs struct {
- Count int `xml:"count,attr"`
- Xf []xlsxXf `xml:"xf,omitempty"`
- }
- // xlsxDxfs directly maps the dxfs element. This element contains the master
- // differential formatting records (dxf's) which define formatting for all non-
- // cell formatting in this workbook. Whereas xf records fully specify a
- // particular aspect of formatting (e.g., cell borders) by referencing those
- // formatting definitions elsewhere in the Styles part, dxf records specify
- // incremental (or differential) aspects of formatting directly inline within
- // the dxf element. The dxf formatting is to be applied on top of or in addition
- // to any formatting already present on the object using the dxf record.
- type xlsxDxfs struct {
- Count int `xml:"count,attr"`
- Dxfs []*xlsxDxf `xml:"dxf,omitempty"`
- }
- // xlsxDxf directly maps the dxf element. A single dxf record, expressing
- // incremental formatting to be applied.
- type xlsxDxf struct {
- Dxf string `xml:",innerxml"`
- }
- // dxf directly maps the dxf element.
- type dxf struct {
- Font *xlsxFont `xml:"font"`
- NumFmt *xlsxNumFmt `xml:"numFmt"`
- Fill *xlsxFill `xml:"fill"`
- Alignment *xlsxAlignment `xml:"alignment"`
- Border *xlsxBorder `xml:"border"`
- Protection *xlsxProtection `xml:"protection"`
- ExtLst *xlsxExt `xml:"extLst"`
- }
- // xlsxTableStyles directly maps the tableStyles element. This element
- // represents a collection of Table style definitions for Table styles and
- // PivotTable styles used in this workbook. It consists of a sequence of
- // tableStyle records, each defining a single Table style.
- type xlsxTableStyles struct {
- Count int `xml:"count,attr"`
- DefaultPivotStyle string `xml:"defaultPivotStyle,attr"`
- DefaultTableStyle string `xml:"defaultTableStyle,attr"`
- TableStyles []*xlsxTableStyle `xml:"tableStyle,omitempty"`
- }
- // xlsxTableStyle directly maps the tableStyle element. This element represents
- // a single table style definition that indicates how a spreadsheet application
- // should format and display a table.
- type xlsxTableStyle struct {
- Name string `xml:"name,attr,omitempty"`
- Pivot int `xml:"pivot,attr"`
- Count int `xml:"count,attr,omitempty"`
- Table bool `xml:"table,attr,omitempty"`
- TableStyleElement string `xml:",innerxml"`
- }
- // xlsxNumFmts directly maps the numFmts element. This element defines the
- // number formats in this workbook, consisting of a sequence of numFmt records,
- // where each numFmt record defines a particular number format, indicating how
- // to format and render the numeric value of a cell.
- type xlsxNumFmts struct {
- Count int `xml:"count,attr"`
- NumFmt []*xlsxNumFmt `xml:"numFmt,omitempty"`
- }
- // xlsxNumFmt directly maps the numFmt element. This element specifies number
- // format properties which indicate how to format and render the numeric value
- // of a cell.
- type xlsxNumFmt struct {
- NumFmtID int `xml:"numFmtId,attr"`
- FormatCode string `xml:"formatCode,attr,omitempty"`
- }
- // xlsxStyleColors directly maps the colors element. Color information
- // associated with this stylesheet. This collection is written whenever the
- // legacy color palette has been modified (backwards compatibility settings) or
- // a custom color has been selected while using this workbook.
- type xlsxStyleColors struct {
- Color string `xml:",innerxml"`
- }
- // Alignment directly maps the alignment settings of the cells.
- type Alignment struct {
- Horizontal string `json:"horizontal"`
- Indent int `json:"indent"`
- JustifyLastLine bool `json:"justify_last_line"`
- ReadingOrder uint64 `json:"reading_order"`
- RelativeIndent int `json:"relative_indent"`
- ShrinkToFit bool `json:"shrink_to_fit"`
- TextRotation int `json:"text_rotation"`
- Vertical string `json:"vertical"`
- WrapText bool `json:"wrap_text"`
- }
- // Border directly maps the border settings of the cells.
- type Border struct {
- Type string `json:"type"`
- Color string `json:"color"`
- Style int `json:"style"`
- }
- // Font directly maps the font settings of the fonts.
- type Font struct {
- Bold bool `json:"bold"`
- Italic bool `json:"italic"`
- Underline string `json:"underline"`
- Family string `json:"family"`
- Size float64 `json:"size"`
- Strike bool `json:"strike"`
- Color string `json:"color"`
- }
- // Fill directly maps the fill settings of the cells.
- type Fill struct {
- Type string `json:"type"`
- Pattern int `json:"pattern"`
- Color []string `json:"color"`
- Shading int `json:"shading"`
- }
- // Protection directly maps the protection settings of the cells.
- type Protection struct {
- Hidden bool `json:"hidden"`
- Locked bool `json:"locked"`
- }
- // Style directly maps the style settings of the cells.
- type Style struct {
- Border []Border `json:"border"`
- Fill Fill `json:"fill"`
- Font *Font `json:"font"`
- Alignment *Alignment `json:"alignment"`
- Protection *Protection `json:"protection"`
- NumFmt int `json:"number_format"`
- DecimalPlaces int `json:"decimal_places"`
- CustomNumFmt *string `json:"custom_number_format"`
- Lang string `json:"lang"`
- NegRed bool `json:"negred"`
- }
|