| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656 | // 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"// xlsxChartSpace directly maps the chartSpace element. The chart namespace in// DrawingML is for representing visualizations of numeric data with column// charts, pie charts, scatter charts, or other types of charts.type xlsxChartSpace struct {	XMLName        xml.Name        `xml:"http://schemas.openxmlformats.org/drawingml/2006/chart chartSpace"`	XMLNSa         string          `xml:"xmlns:a,attr"`	Date1904       *attrValBool    `xml:"date1904"`	Lang           *attrValString  `xml:"lang"`	RoundedCorners *attrValBool    `xml:"roundedCorners"`	Chart          cChart          `xml:"chart"`	SpPr           *cSpPr          `xml:"spPr"`	TxPr           *cTxPr          `xml:"txPr"`	PrintSettings  *cPrintSettings `xml:"printSettings"`}// cThicknessSpPr directly maps the element that specifies the thickness of// the walls or floor as a percentage of the largest dimension of the plot// volume and SpPr element.type cThicknessSpPr struct {	Thickness *attrValInt `xml:"thickness"`	SpPr      *cSpPr      `xml:"spPr"`}// cChart (Chart) directly maps the chart element. This element specifies a// title.type cChart struct {	Title            *cTitle            `xml:"title"`	AutoTitleDeleted *cAutoTitleDeleted `xml:"autoTitleDeleted"`	View3D           *cView3D           `xml:"view3D"`	Floor            *cThicknessSpPr    `xml:"floor"`	SideWall         *cThicknessSpPr    `xml:"sideWall"`	BackWall         *cThicknessSpPr    `xml:"backWall"`	PlotArea         *cPlotArea         `xml:"plotArea"`	Legend           *cLegend           `xml:"legend"`	PlotVisOnly      *attrValBool       `xml:"plotVisOnly"`	DispBlanksAs     *attrValString     `xml:"dispBlanksAs"`	ShowDLblsOverMax *attrValBool       `xml:"showDLblsOverMax"`}// cTitle (Title) directly maps the title element. This element specifies a// title.type cTitle struct {	Tx      cTx          `xml:"tx,omitempty"`	Layout  string       `xml:"layout,omitempty"`	Overlay *attrValBool `xml:"overlay"`	SpPr    cSpPr        `xml:"spPr,omitempty"`	TxPr    cTxPr        `xml:"txPr,omitempty"`}// cTx (Chart Text) directly maps the tx element. This element specifies text// to use on a chart, including rich text formatting.type cTx struct {	StrRef *cStrRef `xml:"strRef"`	Rich   *cRich   `xml:"rich,omitempty"`}// cRich (Rich Text) directly maps the rich element. This element contains a// string with rich text formatting.type cRich struct {	BodyPr   aBodyPr `xml:"a:bodyPr,omitempty"`	LstStyle string  `xml:"a:lstStyle,omitempty"`	P        aP      `xml:"a:p"`}// aBodyPr (Body Properties) directly maps the a:bodyPr element. This element// defines the body properties for the text body within a shape.type aBodyPr struct {	Anchor           string  `xml:"anchor,attr,omitempty"`	AnchorCtr        bool    `xml:"anchorCtr,attr"`	Rot              int     `xml:"rot,attr"`	BIns             float64 `xml:"bIns,attr,omitempty"`	CompatLnSpc      bool    `xml:"compatLnSpc,attr,omitempty"`	ForceAA          bool    `xml:"forceAA,attr,omitempty"`	FromWordArt      bool    `xml:"fromWordArt,attr,omitempty"`	HorzOverflow     string  `xml:"horzOverflow,attr,omitempty"`	LIns             float64 `xml:"lIns,attr,omitempty"`	NumCol           int     `xml:"numCol,attr,omitempty"`	RIns             float64 `xml:"rIns,attr,omitempty"`	RtlCol           bool    `xml:"rtlCol,attr,omitempty"`	SpcCol           int     `xml:"spcCol,attr,omitempty"`	SpcFirstLastPara bool    `xml:"spcFirstLastPara,attr"`	TIns             float64 `xml:"tIns,attr,omitempty"`	Upright          bool    `xml:"upright,attr,omitempty"`	Vert             string  `xml:"vert,attr,omitempty"`	VertOverflow     string  `xml:"vertOverflow,attr,omitempty"`	Wrap             string  `xml:"wrap,attr,omitempty"`}// aP (Paragraph) directly maps the a:p element. This element specifies a// paragraph of content in the document.type aP struct {	PPr        *aPPr        `xml:"a:pPr"`	R          *aR          `xml:"a:r"`	EndParaRPr *aEndParaRPr `xml:"a:endParaRPr"`}// aPPr (Paragraph Properties) directly maps the a:pPr element. This element// specifies a set of paragraph properties which shall be applied to the// contents of the parent paragraph after all style/numbering/table properties// have been applied to the text. These properties are defined as direct// formatting, since they are directly applied to the paragraph and supersede// any formatting from styles.type aPPr struct {	DefRPr aRPr `xml:"a:defRPr"`}// aSolidFill (Solid Fill) directly maps the solidFill element. This element// specifies a solid color fill. The shape is filled entirely with the specified// color.type aSolidFill struct {	SchemeClr *aSchemeClr    `xml:"a:schemeClr"`	SrgbClr   *attrValString `xml:"a:srgbClr"`}// aSchemeClr (Scheme Color) directly maps the a:schemeClr element. This// element specifies a color bound to a user's theme. As with all elements which// define a color, it is possible to apply a list of color transforms to the// base color defined.type aSchemeClr struct {	Val    string      `xml:"val,attr,omitempty"`	LumMod *attrValInt `xml:"a:lumMod"`	LumOff *attrValInt `xml:"a:lumOff"`}// attrValInt directly maps the val element with integer data type as an// attribute.type attrValInt struct {	Val *int `xml:"val,attr"`}// attrValFloat directly maps the val element with float64 data type as an// attribute.type attrValFloat struct {	Val *float64 `xml:"val,attr"`}// attrValBool directly maps the val element with boolean data type as an// attribute.type attrValBool struct {	Val *bool `xml:"val,attr"`}// attrValString directly maps the val element with string data type as an// attribute.type attrValString struct {	Val *string `xml:"val,attr"`}// aCs directly maps the a:cs element.type aCs struct {	Typeface string `xml:"typeface,attr"`}// aEa directly maps the a:ea element.type aEa struct {	Typeface string `xml:"typeface,attr"`}// aLatin (Latin Font) directly maps the a:latin element. This element// specifies that a Latin font be used for a specific run of text. This font is// specified with a typeface attribute much like the others but is specifically// classified as a Latin font.type aLatin struct {	Typeface string `xml:"typeface,attr"`}// aR directly maps the a:r element.type aR struct {	RPr aRPr   `xml:"a:rPr,omitempty"`	T   string `xml:"a:t,omitempty"`}// aRPr (Run Properties) directly maps the rPr element. This element// 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 aRPr struct {	AltLang    string      `xml:"altLang,attr,omitempty"`	B          bool        `xml:"b,attr"`	Baseline   int         `xml:"baseline,attr"`	Bmk        string      `xml:"bmk,attr,omitempty"`	Cap        string      `xml:"cap,attr,omitempty"`	Dirty      bool        `xml:"dirty,attr,omitempty"`	Err        bool        `xml:"err,attr,omitempty"`	I          bool        `xml:"i,attr"`	Kern       int         `xml:"kern,attr"`	Kumimoji   bool        `xml:"kumimoji,attr,omitempty"`	Lang       string      `xml:"lang,attr,omitempty"`	NoProof    bool        `xml:"noProof,attr,omitempty"`	NormalizeH bool        `xml:"normalizeH,attr,omitempty"`	SmtClean   bool        `xml:"smtClean,attr,omitempty"`	SmtID      uint64      `xml:"smtId,attr,omitempty"`	Spc        int         `xml:"spc,attr"`	Strike     string      `xml:"strike,attr,omitempty"`	Sz         float64     `xml:"sz,attr,omitempty"`	U          string      `xml:"u,attr,omitempty"`	SolidFill  *aSolidFill `xml:"a:solidFill"`	Latin      *aLatin     `xml:"a:latin"`	Ea         *aEa        `xml:"a:ea"`	Cs         *aCs        `xml:"a:cs"`}// cSpPr (Shape Properties) directly maps the spPr element. This element// specifies the visual shape properties that can be applied to a shape. These// properties include the shape fill, outline, geometry, effects, and 3D// orientation.type cSpPr struct {	NoFill    *string     `xml:"a:noFill"`	SolidFill *aSolidFill `xml:"a:solidFill"`	Ln        *aLn        `xml:"a:ln"`	Sp3D      *aSp3D      `xml:"a:sp3d"`	EffectLst *string     `xml:"a:effectLst"`}// aSp3D (3-D Shape Properties) directly maps the a:sp3d element. This element// defines the 3D properties associated with a particular shape in DrawingML.// The 3D properties which can be applied to a shape are top and bottom bevels,// a contour and an extrusion.type aSp3D struct {	ContourW   int          `xml:"contourW,attr"`	ContourClr *aContourClr `xml:"a:contourClr"`}// aContourClr (Contour Color) directly maps the a:contourClr element. This// element defines the color for the contour on a shape. The contour of a shape// is a solid filled line which surrounds the outer edges of the shape.type aContourClr struct {	SchemeClr *aSchemeClr `xml:"a:schemeClr"`}// aLn (Outline) directly maps the a:ln element. This element specifies an// outline style that can be applied to a number of different objects such as// shapes and text. The line allows for the specifying of many different types// of outlines including even line dashes and bevels.type aLn struct {	Algn      string      `xml:"algn,attr,omitempty"`	Cap       string      `xml:"cap,attr,omitempty"`	Cmpd      string      `xml:"cmpd,attr,omitempty"`	W         int         `xml:"w,attr,omitempty"`	NoFill    string      `xml:"a:noFill,omitempty"`	Round     string      `xml:"a:round,omitempty"`	SolidFill *aSolidFill `xml:"a:solidFill"`}// cTxPr (Text Properties) directly maps the txPr element. This element// specifies text formatting. The lstStyle element is not supported.type cTxPr struct {	BodyPr   aBodyPr `xml:"a:bodyPr,omitempty"`	LstStyle string  `xml:"a:lstStyle,omitempty"`	P        aP      `xml:"a:p,omitempty"`}// aEndParaRPr (End Paragraph Run Properties) directly maps the a:endParaRPr// element. This element specifies the text run properties that are to be used// if another run is inserted after the last run specified. This effectively// saves the run property state so that it can be applied when the user enters// additional text. If this element is omitted, then the application can// determine which default properties to apply. It is recommended that this// element be specified at the end of the list of text runs within the paragraph// so that an orderly list is maintained.type aEndParaRPr struct {	Lang    string `xml:"lang,attr"`	AltLang string `xml:"altLang,attr,omitempty"`	Sz      int    `xml:"sz,attr,omitempty"`}// cAutoTitleDeleted (Auto Title Is Deleted) directly maps the// autoTitleDeleted element. This element specifies the title shall not be// shown for this chart.type cAutoTitleDeleted struct {	Val bool `xml:"val,attr"`}// cView3D (View In 3D) directly maps the view3D element. This element// specifies the 3-D view of the chart.type cView3D struct {	RotX         *attrValInt `xml:"rotX"`	RotY         *attrValInt `xml:"rotY"`	RAngAx       *attrValInt `xml:"rAngAx"`	DepthPercent *attrValInt `xml:"depthPercent"`	Perspective  *attrValInt `xml:"perspective"`	ExtLst       *xlsxExtLst `xml:"extLst"`}// cPlotArea directly maps the plotArea element. This element specifies the// plot area of the chart.type cPlotArea struct {	Layout         *string  `xml:"layout"`	AreaChart      *cCharts `xml:"areaChart"`	Area3DChart    *cCharts `xml:"area3DChart"`	BarChart       *cCharts `xml:"barChart"`	Bar3DChart     *cCharts `xml:"bar3DChart"`	BubbleChart    *cCharts `xml:"bubbleChart"`	DoughnutChart  *cCharts `xml:"doughnutChart"`	LineChart      *cCharts `xml:"lineChart"`	PieChart       *cCharts `xml:"pieChart"`	Pie3DChart     *cCharts `xml:"pie3DChart"`	OfPieChart     *cCharts `xml:"ofPieChart"`	RadarChart     *cCharts `xml:"radarChart"`	ScatterChart   *cCharts `xml:"scatterChart"`	Surface3DChart *cCharts `xml:"surface3DChart"`	SurfaceChart   *cCharts `xml:"surfaceChart"`	CatAx          []*cAxs  `xml:"catAx"`	ValAx          []*cAxs  `xml:"valAx"`	SerAx          []*cAxs  `xml:"serAx"`	SpPr           *cSpPr   `xml:"spPr"`}// cCharts specifies the common element of the chart.type cCharts struct {	BarDir       *attrValString `xml:"barDir"`	BubbleScale  *attrValFloat  `xml:"bubbleScale"`	Grouping     *attrValString `xml:"grouping"`	RadarStyle   *attrValString `xml:"radarStyle"`	ScatterStyle *attrValString `xml:"scatterStyle"`	OfPieType    *attrValString `xml:"ofPieType"`	VaryColors   *attrValBool   `xml:"varyColors"`	Wireframe    *attrValBool   `xml:"wireframe"`	Ser          *[]cSer        `xml:"ser"`	SerLines     *attrValString `xml:"serLines"`	DLbls        *cDLbls        `xml:"dLbls"`	Shape        *attrValString `xml:"shape"`	HoleSize     *attrValInt    `xml:"holeSize"`	Smooth       *attrValBool   `xml:"smooth"`	Overlap      *attrValInt    `xml:"overlap"`	AxID         []*attrValInt  `xml:"axId"`}// cAxs directly maps the catAx and valAx element.type cAxs struct {	AxID           *attrValInt    `xml:"axId"`	Scaling        *cScaling      `xml:"scaling"`	Delete         *attrValBool   `xml:"delete"`	AxPos          *attrValString `xml:"axPos"`	MajorGridlines *cChartLines   `xml:"majorGridlines"`	MinorGridlines *cChartLines   `xml:"minorGridlines"`	NumFmt         *cNumFmt       `xml:"numFmt"`	MajorTickMark  *attrValString `xml:"majorTickMark"`	MinorTickMark  *attrValString `xml:"minorTickMark"`	TickLblPos     *attrValString `xml:"tickLblPos"`	SpPr           *cSpPr         `xml:"spPr"`	TxPr           *cTxPr         `xml:"txPr"`	CrossAx        *attrValInt    `xml:"crossAx"`	Crosses        *attrValString `xml:"crosses"`	CrossBetween   *attrValString `xml:"crossBetween"`	MajorUnit      *attrValFloat  `xml:"majorUnit"`	MinorUnit      *attrValFloat  `xml:"minorUnit"`	Auto           *attrValBool   `xml:"auto"`	LblAlgn        *attrValString `xml:"lblAlgn"`	LblOffset      *attrValInt    `xml:"lblOffset"`	TickLblSkip    *attrValInt    `xml:"tickLblSkip"`	TickMarkSkip   *attrValInt    `xml:"tickMarkSkip"`	NoMultiLvlLbl  *attrValBool   `xml:"noMultiLvlLbl"`}// cChartLines directly maps the chart lines content model.type cChartLines struct {	SpPr *cSpPr `xml:"spPr"`}// cScaling directly maps the scaling element. This element contains// additional axis settings.type cScaling struct {	LogBase     *attrValFloat  `xml:"logBase"`	Orientation *attrValString `xml:"orientation"`	Max         *attrValFloat  `xml:"max"`	Min         *attrValFloat  `xml:"min"`}// cNumFmt (Numbering Format) directly maps the numFmt element. This element// specifies number formatting for the parent element.type cNumFmt struct {	FormatCode   string `xml:"formatCode,attr"`	SourceLinked bool   `xml:"sourceLinked,attr"`}// cSer directly maps the ser element. This element specifies a series on a// chart.type cSer struct {	IDx              *attrValInt  `xml:"idx"`	Order            *attrValInt  `xml:"order"`	Tx               *cTx         `xml:"tx"`	SpPr             *cSpPr       `xml:"spPr"`	DPt              []*cDPt      `xml:"dPt"`	DLbls            *cDLbls      `xml:"dLbls"`	Marker           *cMarker     `xml:"marker"`	InvertIfNegative *attrValBool `xml:"invertIfNegative"`	Cat              *cCat        `xml:"cat"`	Val              *cVal        `xml:"val"`	XVal             *cCat        `xml:"xVal"`	YVal             *cVal        `xml:"yVal"`	Smooth           *attrValBool `xml:"smooth"`	BubbleSize       *cVal        `xml:"bubbleSize"`	Bubble3D         *attrValBool `xml:"bubble3D"`}// cMarker (Marker) directly maps the marker element. This element specifies a// data marker.type cMarker struct {	Symbol *attrValString `xml:"symbol"`	Size   *attrValInt    `xml:"size"`	SpPr   *cSpPr         `xml:"spPr"`}// cDPt (Data Point) directly maps the dPt element. This element specifies a// single data point.type cDPt struct {	IDx      *attrValInt  `xml:"idx"`	Bubble3D *attrValBool `xml:"bubble3D"`	SpPr     *cSpPr       `xml:"spPr"`}// cCat (Category Axis Data) directly maps the cat element. This element// specifies the data used for the category axis.type cCat struct {	StrRef *cStrRef `xml:"strRef"`}// cStrRef (String Reference) directly maps the strRef element. This element// specifies a reference to data for a single data label or title with a cache// of the last values used.type cStrRef struct {	F        string     `xml:"f"`	StrCache *cStrCache `xml:"strCache"`}// cStrCache (String Cache) directly maps the strCache element. This element// specifies the last string data used for a chart.type cStrCache struct {	Pt      []*cPt      `xml:"pt"`	PtCount *attrValInt `xml:"ptCount"`}// cPt directly maps the pt element. This element specifies data for a// particular data point.type cPt struct {	IDx int     `xml:"idx,attr"`	V   *string `xml:"v"`}// cVal directly maps the val element. This element specifies the data values// which shall be used to define the location of data markers on a chart.type cVal struct {	NumRef *cNumRef `xml:"numRef"`}// cNumRef directly maps the numRef element. This element specifies a// reference to numeric data with a cache of the last values used.type cNumRef struct {	F        string     `xml:"f"`	NumCache *cNumCache `xml:"numCache"`}// cNumCache directly maps the numCache element. This element specifies the// last data shown on the chart for a series.type cNumCache struct {	FormatCode string      `xml:"formatCode"`	Pt         []*cPt      `xml:"pt"`	PtCount    *attrValInt `xml:"ptCount"`}// cDLbls (Data Lables) directly maps the dLbls element. This element serves// as a root element that specifies the settings for the data labels for an// entire series or the entire chart. It contains child elements that specify// the specific formatting and positioning settings.type cDLbls struct {	ShowLegendKey   *attrValBool `xml:"showLegendKey"`	ShowVal         *attrValBool `xml:"showVal"`	ShowCatName     *attrValBool `xml:"showCatName"`	ShowSerName     *attrValBool `xml:"showSerName"`	ShowPercent     *attrValBool `xml:"showPercent"`	ShowBubbleSize  *attrValBool `xml:"showBubbleSize"`	ShowLeaderLines *attrValBool `xml:"showLeaderLines"`}// cLegend (Legend) directly maps the legend element. This element specifies// the legend.type cLegend struct {	Layout    *string        `xml:"layout"`	LegendPos *attrValString `xml:"legendPos"`	Overlay   *attrValBool   `xml:"overlay"`	SpPr      *cSpPr         `xml:"spPr"`	TxPr      *cTxPr         `xml:"txPr"`}// cPrintSettings directly maps the printSettings element. This element// specifies the print settings for the chart.type cPrintSettings struct {	HeaderFooter *string       `xml:"headerFooter"`	PageMargins  *cPageMargins `xml:"pageMargins"`	PageSetup    *string       `xml:"pageSetup"`}// cPageMargins directly maps the pageMargins element. This element specifies// the page margins for a chart.type cPageMargins struct {	B      float64 `xml:"b,attr"`	Footer float64 `xml:"footer,attr"`	Header float64 `xml:"header,attr"`	L      float64 `xml:"l,attr"`	R      float64 `xml:"r,attr"`	T      float64 `xml:"t,attr"`}// formatChartAxis directly maps the format settings of the chart axis.type formatChartAxis struct {	None                bool    `json:"none"`	Crossing            string  `json:"crossing"`	MajorGridlines      bool    `json:"major_grid_lines"`	MinorGridlines      bool    `json:"minor_grid_lines"`	MajorTickMark       string  `json:"major_tick_mark"`	MinorTickMark       string  `json:"minor_tick_mark"`	MinorUnitType       string  `json:"minor_unit_type"`	MajorUnit           float64 `json:"major_unit"`	MajorUnitType       string  `json:"major_unit_type"`	TickLabelSkip       int     `json:"tick_label_skip"`	DisplayUnits        string  `json:"display_units"`	DisplayUnitsVisible bool    `json:"display_units_visible"`	DateAxis            bool    `json:"date_axis"`	ReverseOrder        bool    `json:"reverse_order"`	Maximum             float64 `json:"maximum"`	Minimum             float64 `json:"minimum"`	NumFormat           string  `json:"num_format"`	NumFont             struct {		Color     string `json:"color"`		Bold      bool   `json:"bold"`		Italic    bool   `json:"italic"`		Underline bool   `json:"underline"`	} `json:"num_font"`	LogBase    float64      `json:"logbase"`	NameLayout formatLayout `json:"name_layout"`}type formatChartDimension struct {	Width  int `json:"width"`	Height int `json:"height"`}// formatChart directly maps the format settings of the chart.type formatChart struct {	Type       string               `json:"type"`	Series     []formatChartSeries  `json:"series"`	Format     formatPicture        `json:"format"`	Dimension  formatChartDimension `json:"dimension"`	Legend     formatChartLegend    `json:"legend"`	Title      formatChartTitle     `json:"title"`	VaryColors bool                 `json:"vary_colors"`	XAxis      formatChartAxis      `json:"x_axis"`	YAxis      formatChartAxis      `json:"y_axis"`	Chartarea  struct {		Border struct {			None bool `json:"none"`		} `json:"border"`		Fill struct {			Color string `json:"color"`		} `json:"fill"`		Pattern struct {			Pattern string `json:"pattern"`			FgColor string `json:"fg_color"`			BgColor string `json:"bg_color"`		} `json:"pattern"`	} `json:"chartarea"`	Plotarea struct {		ShowBubbleSize  bool `json:"show_bubble_size"`		ShowCatName     bool `json:"show_cat_name"`		ShowLeaderLines bool `json:"show_leader_lines"`		ShowPercent     bool `json:"show_percent"`		ShowSerName     bool `json:"show_series_name"`		ShowVal         bool `json:"show_val"`		Gradient        struct {			Colors []string `json:"colors"`		} `json:"gradient"`		Border struct {			Color    string `json:"color"`			Width    int    `json:"width"`			DashType string `json:"dash_type"`		} `json:"border"`		Fill struct {			Color string `json:"color"`		} `json:"fill"`		Layout formatLayout `json:"layout"`	} `json:"plotarea"`	ShowBlanksAs   string `json:"show_blanks_as"`	ShowHiddenData bool   `json:"show_hidden_data"`	SetRotation    int    `json:"set_rotation"`	SetHoleSize    int    `json:"set_hole_size"`	order          int}// formatChartLegend directly maps the format settings of the chart legend.type formatChartLegend struct {	None            bool         `json:"none"`	DeleteSeries    []int        `json:"delete_series"`	Font            Font         `json:"font"`	Layout          formatLayout `json:"layout"`	Position        string       `json:"position"`	ShowLegendEntry bool         `json:"show_legend_entry"`	ShowLegendKey   bool         `json:"show_legend_key"`}// formatChartSeries directly maps the format settings of the chart series.type formatChartSeries struct {	Name       string `json:"name"`	Categories string `json:"categories"`	Values     string `json:"values"`	Line       struct {		None  bool    `json:"none"`		Color string  `json:"color"`		Width float64 `json:"width"`	} `json:"line"`	Marker struct {		Symbol string  `json:"symbol"`		Size   int     `json:"size"`		Width  float64 `json:"width"`		Border struct {			Color string `json:"color"`			None  bool   `json:"none"`		} `json:"border"`		Fill struct {			Color string `json:"color"`			None  bool   `json:"none"`		} `json:"fill"`	} `json:"marker"`}// formatChartTitle directly maps the format settings of the chart title.type formatChartTitle struct {	None    bool         `json:"none"`	Name    string       `json:"name"`	Overlay bool         `json:"overlay"`	Layout  formatLayout `json:"layout"`}// formatLayout directly maps the format settings of the element layout.type formatLayout struct {	X      float64 `json:"x"`	Y      float64 `json:"y"`	Width  float64 `json:"width"`	Height float64 `json:"height"`}
 |