2024-01-09 20:56:20 +08:00
|
|
|
// Copyright 2016 - 2024 The excelize Authors. All rights reserved. Use of
|
2018-09-14 00:44:23 +08:00
|
|
|
// this source code is governed by a BSD-style license that can be found in
|
|
|
|
// the LICENSE file.
|
|
|
|
//
|
2022-02-17 00:09:11 +08:00
|
|
|
// Package excelize providing a set of functions that allow you to write to and
|
|
|
|
// read from XLAM / XLSM / XLSX / XLTM / XLTX 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
|
2024-01-18 15:31:43 +08:00
|
|
|
// data. This library needs Go version 1.18 or later.
|
2018-09-14 00:58:48 +08:00
|
|
|
|
2018-07-07 15:59:48 +08:00
|
|
|
package excelize
|
|
|
|
|
|
|
|
import "encoding/xml"
|
|
|
|
|
|
|
|
// xlsxTheme directly maps the theme element in the namespace
|
|
|
|
// http://schemas.openxmlformats.org/drawingml/2006/main
|
|
|
|
type xlsxTheme struct {
|
2023-10-20 00:04:31 +08:00
|
|
|
XMLName xml.Name `xml:"a:theme"`
|
2022-10-28 00:31:55 +08:00
|
|
|
XMLNSa string `xml:"xmlns:a,attr"`
|
|
|
|
XMLNSr string `xml:"xmlns:r,attr"`
|
|
|
|
Name string `xml:"name,attr"`
|
2023-10-20 00:04:31 +08:00
|
|
|
ThemeElements xlsxBaseStyles `xml:"a:themeElements"`
|
|
|
|
ObjectDefaults xlsxObjectDefaults `xml:"a:objectDefaults"`
|
|
|
|
ExtraClrSchemeLst xlsxExtraClrSchemeLst `xml:"a:extraClrSchemeLst"`
|
|
|
|
CustClrLst *xlsxInnerXML `xml:"a:custClrLst"`
|
|
|
|
ExtLst *xlsxExtLst `xml:"a:extLst"`
|
2018-07-07 15:59:48 +08:00
|
|
|
}
|
|
|
|
|
2022-10-28 00:31:55 +08:00
|
|
|
// xlsxBaseStyles defines the theme elements for a theme, and is the workhorse
|
|
|
|
// of the theme. The bulk of the shared theme information that is used by a
|
|
|
|
// given document is defined here. Within this complex type is defined a color
|
|
|
|
// scheme, a font scheme, and a style matrix (format scheme) that defines
|
|
|
|
// different formatting options for different pieces of a document.
|
|
|
|
type xlsxBaseStyles struct {
|
2023-10-20 00:04:31 +08:00
|
|
|
ClrScheme xlsxColorScheme `xml:"a:clrScheme"`
|
|
|
|
FontScheme xlsxFontScheme `xml:"a:fontScheme"`
|
|
|
|
FmtScheme xlsxStyleMatrix `xml:"a:fmtScheme"`
|
|
|
|
ExtLst *xlsxExtLst `xml:"a:extLst"`
|
2022-10-28 00:31:55 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// xlsxCTColor holds the actual color values that are to be applied to a given
|
|
|
|
// diagram and how those colors are to be applied.
|
|
|
|
type xlsxCTColor struct {
|
2023-10-20 00:04:31 +08:00
|
|
|
ScrgbClr *xlsxInnerXML `xml:"a:scrgbClr"`
|
|
|
|
SrgbClr *attrValString `xml:"a:srgbClr"`
|
|
|
|
HslClr *xlsxInnerXML `xml:"a:hslClr"`
|
|
|
|
SysClr *xlsxSysClr `xml:"a:sysClr"`
|
|
|
|
SchemeClr *xlsxInnerXML `xml:"a:schemeClr"`
|
|
|
|
PrstClr *xlsxInnerXML `xml:"a:prstClr"`
|
2022-10-28 00:31:55 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// xlsxColorScheme defines a set of colors for the theme. The set of colors
|
|
|
|
// consists of twelve color slots that can each hold a color of choice.
|
|
|
|
type xlsxColorScheme struct {
|
|
|
|
Name string `xml:"name,attr"`
|
2023-10-20 00:04:31 +08:00
|
|
|
Dk1 xlsxCTColor `xml:"a:dk1"`
|
|
|
|
Lt1 xlsxCTColor `xml:"a:lt1"`
|
|
|
|
Dk2 xlsxCTColor `xml:"a:dk2"`
|
|
|
|
Lt2 xlsxCTColor `xml:"a:lt2"`
|
|
|
|
Accent1 xlsxCTColor `xml:"a:accent1"`
|
|
|
|
Accent2 xlsxCTColor `xml:"a:accent2"`
|
|
|
|
Accent3 xlsxCTColor `xml:"a:accent3"`
|
|
|
|
Accent4 xlsxCTColor `xml:"a:accent4"`
|
|
|
|
Accent5 xlsxCTColor `xml:"a:accent5"`
|
|
|
|
Accent6 xlsxCTColor `xml:"a:accent6"`
|
|
|
|
Hlink xlsxCTColor `xml:"a:hlink"`
|
|
|
|
FolHlink xlsxCTColor `xml:"a:folHlink"`
|
|
|
|
ExtLst *xlsxExtLst `xml:"a:extLst"`
|
2022-10-28 00:31:55 +08:00
|
|
|
}
|
|
|
|
|
2018-07-07 15:59:48 +08:00
|
|
|
// objectDefaults element allows for the definition of default shape, line,
|
|
|
|
// and textbox formatting properties. An application can use this information
|
|
|
|
// to format a shape (or text) initially on insertion into a document.
|
|
|
|
type xlsxObjectDefaults struct {
|
|
|
|
ObjectDefaults string `xml:",innerxml"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// xlsxExtraClrSchemeLst element is a container for the list of extra color
|
|
|
|
// schemes present in a document.
|
|
|
|
type xlsxExtraClrSchemeLst struct {
|
|
|
|
ExtraClrSchemeLst string `xml:",innerxml"`
|
|
|
|
}
|
|
|
|
|
2022-10-28 00:31:55 +08:00
|
|
|
// xlsxCTSupplementalFont defines an additional font that is used for language
|
|
|
|
// specific fonts in themes. For example, one can specify a font that gets used
|
|
|
|
// only within the Japanese language context.
|
|
|
|
type xlsxCTSupplementalFont struct {
|
|
|
|
Script string `xml:"script,attr"`
|
|
|
|
Typeface string `xml:"typeface,attr"`
|
2018-07-07 15:59:48 +08:00
|
|
|
}
|
|
|
|
|
2022-10-28 00:31:55 +08:00
|
|
|
// xlsxFontCollection defines a major and minor font which is used in the font
|
|
|
|
// scheme. A font collection consists of a font definition for Latin, East
|
|
|
|
// Asian, and complex script. On top of these three definitions, one can also
|
|
|
|
// define a font for use in a specific language or languages.
|
|
|
|
type xlsxFontCollection struct {
|
2023-10-20 00:04:31 +08:00
|
|
|
Latin *xlsxCTTextFont `xml:"a:latin"`
|
|
|
|
Ea *xlsxCTTextFont `xml:"a:ea"`
|
|
|
|
Cs *xlsxCTTextFont `xml:"a:cs"`
|
|
|
|
Font []xlsxCTSupplementalFont `xml:"a:font"`
|
|
|
|
ExtLst *xlsxExtLst `xml:"a:extLst"`
|
2018-07-07 15:59:48 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// xlsxFontScheme element defines the font scheme within the theme. The font
|
|
|
|
// scheme consists of a pair of major and minor fonts for which to use in a
|
|
|
|
// document. The major font corresponds well with the heading areas of a
|
|
|
|
// document, and the minor font corresponds well with the normal text or
|
|
|
|
// paragraph areas.
|
|
|
|
type xlsxFontScheme struct {
|
2022-10-28 00:31:55 +08:00
|
|
|
Name string `xml:"name,attr"`
|
2023-10-20 00:04:31 +08:00
|
|
|
MajorFont xlsxFontCollection `xml:"a:majorFont"`
|
|
|
|
MinorFont xlsxFontCollection `xml:"a:minorFont"`
|
|
|
|
ExtLst *xlsxExtLst `xml:"a:extLst"`
|
2022-10-28 00:31:55 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// xlsxStyleMatrix defines a set of formatting options, which can be referenced
|
|
|
|
// by documents that apply a certain style to a given part of an object. For
|
|
|
|
// example, in a given shape, say a rectangle, one can reference a themed line
|
|
|
|
// style, themed effect, and themed fill that would be theme specific and
|
|
|
|
// change when the theme is changed.
|
|
|
|
type xlsxStyleMatrix struct {
|
|
|
|
Name string `xml:"name,attr,omitempty"`
|
2023-10-20 00:04:31 +08:00
|
|
|
FillStyleLst xlsxFillStyleLst `xml:"a:fillStyleLst"`
|
|
|
|
LnStyleLst xlsxLnStyleLst `xml:"a:lnStyleLst"`
|
|
|
|
EffectStyleLst xlsxEffectStyleLst `xml:"a:effectStyleLst"`
|
|
|
|
BgFillStyleLst xlsxBgFillStyleLst `xml:"a:bgFillStyleLst"`
|
2018-07-07 15:59:48 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// xlsxFillStyleLst element defines a set of three fill styles that are used
|
|
|
|
// within a theme. The three fill styles are arranged in order from subtle to
|
|
|
|
// moderate to intense.
|
|
|
|
type xlsxFillStyleLst struct {
|
|
|
|
FillStyleLst string `xml:",innerxml"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// xlsxLnStyleLst element defines a list of three line styles for use within a
|
|
|
|
// theme. The three line styles are arranged in order from subtle to moderate
|
|
|
|
// to intense versions of lines. This list makes up part of the style matrix.
|
|
|
|
type xlsxLnStyleLst struct {
|
|
|
|
LnStyleLst string `xml:",innerxml"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// xlsxEffectStyleLst element defines a set of three effect styles that create
|
|
|
|
// the effect style list for a theme. The effect styles are arranged in order
|
|
|
|
// of subtle to moderate to intense.
|
|
|
|
type xlsxEffectStyleLst struct {
|
|
|
|
EffectStyleLst string `xml:",innerxml"`
|
|
|
|
}
|
|
|
|
|
2024-07-23 21:48:17 +08:00
|
|
|
// xlsxBgFillStyleLst element defines a list of background fills that are
|
2018-07-07 15:59:48 +08:00
|
|
|
// used within a theme. The background fills consist of three fills, arranged
|
|
|
|
// in order from subtle to moderate to intense.
|
|
|
|
type xlsxBgFillStyleLst struct {
|
|
|
|
BgFillStyleLst string `xml:",innerxml"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// xlsxSysClr element specifies a color bound to predefined operating system
|
|
|
|
// elements.
|
|
|
|
type xlsxSysClr struct {
|
|
|
|
Val string `xml:"val,attr"`
|
|
|
|
LastClr string `xml:"lastClr,attr"`
|
|
|
|
}
|
2023-10-20 00:04:31 +08:00
|
|
|
|
|
|
|
// decodeTheme defines the structure used to parse the a:theme element for the
|
|
|
|
// theme.
|
|
|
|
type decodeTheme struct {
|
|
|
|
XMLName xml.Name `xml:"http://schemas.openxmlformats.org/drawingml/2006/main theme"`
|
|
|
|
Name string `xml:"name,attr"`
|
|
|
|
ThemeElements decodeBaseStyles `xml:"themeElements"`
|
|
|
|
ObjectDefaults xlsxObjectDefaults `xml:"objectDefaults"`
|
|
|
|
ExtraClrSchemeLst xlsxExtraClrSchemeLst `xml:"extraClrSchemeLst"`
|
|
|
|
CustClrLst *xlsxInnerXML `xml:"custClrLst"`
|
|
|
|
ExtLst *xlsxExtLst `xml:"extLst"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// decodeBaseStyles defines the structure used to parse the theme elements for a
|
|
|
|
// theme, and is the workhorse of the theme.
|
|
|
|
type decodeBaseStyles struct {
|
|
|
|
ClrScheme decodeColorScheme `xml:"clrScheme"`
|
|
|
|
FontScheme decodeFontScheme `xml:"fontScheme"`
|
|
|
|
FmtScheme decodeStyleMatrix `xml:"fmtScheme"`
|
|
|
|
ExtLst *xlsxExtLst `xml:"extLst"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// decodeColorScheme defines the structure used to parse a set of colors for the
|
|
|
|
// theme.
|
|
|
|
type decodeColorScheme struct {
|
|
|
|
Name string `xml:"name,attr"`
|
|
|
|
Dk1 decodeCTColor `xml:"dk1"`
|
|
|
|
Lt1 decodeCTColor `xml:"lt1"`
|
|
|
|
Dk2 decodeCTColor `xml:"dk2"`
|
|
|
|
Lt2 decodeCTColor `xml:"lt2"`
|
|
|
|
Accent1 decodeCTColor `xml:"accent1"`
|
|
|
|
Accent2 decodeCTColor `xml:"accent2"`
|
|
|
|
Accent3 decodeCTColor `xml:"accent3"`
|
|
|
|
Accent4 decodeCTColor `xml:"accent4"`
|
|
|
|
Accent5 decodeCTColor `xml:"accent5"`
|
|
|
|
Accent6 decodeCTColor `xml:"accent6"`
|
|
|
|
Hlink decodeCTColor `xml:"hlink"`
|
|
|
|
FolHlink decodeCTColor `xml:"folHlink"`
|
|
|
|
ExtLst *xlsxExtLst `xml:"extLst"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// decodeFontScheme defines the structure used to parse font scheme within the
|
|
|
|
// theme.
|
|
|
|
type decodeFontScheme struct {
|
|
|
|
Name string `xml:"name,attr"`
|
|
|
|
MajorFont decodeFontCollection `xml:"majorFont"`
|
|
|
|
MinorFont decodeFontCollection `xml:"minorFont"`
|
|
|
|
ExtLst *xlsxExtLst `xml:"extLst"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// decodeFontCollection defines the structure used to parse a major and minor
|
|
|
|
// font which is used in the font scheme.
|
|
|
|
type decodeFontCollection struct {
|
|
|
|
Latin *xlsxCTTextFont `xml:"latin"`
|
|
|
|
Ea *xlsxCTTextFont `xml:"ea"`
|
|
|
|
Cs *xlsxCTTextFont `xml:"cs"`
|
|
|
|
Font []xlsxCTSupplementalFont `xml:"font"`
|
|
|
|
ExtLst *xlsxExtLst `xml:"extLst"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// decodeCTColor defines the structure used to parse the actual color values
|
|
|
|
// that are to be applied to a given diagram and how those colors are to be
|
|
|
|
// applied.
|
|
|
|
type decodeCTColor struct {
|
|
|
|
ScrgbClr *xlsxInnerXML `xml:"scrgbClr"`
|
|
|
|
SrgbClr *attrValString `xml:"srgbClr"`
|
|
|
|
HslClr *xlsxInnerXML `xml:"hslClr"`
|
|
|
|
SysClr *xlsxSysClr `xml:"sysClr"`
|
|
|
|
SchemeClr *xlsxInnerXML `xml:"schemeClr"`
|
|
|
|
PrstClr *xlsxInnerXML `xml:"prstClr"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// decodeStyleMatrix defines the structure used to parse a set of formatting
|
|
|
|
// options, which can be referenced by documents that apply a certain style to
|
|
|
|
// a given part of an object.
|
|
|
|
type decodeStyleMatrix struct {
|
|
|
|
Name string `xml:"name,attr,omitempty"`
|
|
|
|
FillStyleLst xlsxFillStyleLst `xml:"fillStyleLst"`
|
|
|
|
LnStyleLst xlsxLnStyleLst `xml:"lnStyleLst"`
|
|
|
|
EffectStyleLst xlsxEffectStyleLst `xml:"effectStyleLst"`
|
|
|
|
BgFillStyleLst xlsxBgFillStyleLst `xml:"bgFillStyleLst"`
|
|
|
|
}
|