| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 | // 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"// xlsxTable directly maps the table element. A table helps organize and provide// structure to lists of information in a worksheet. Tables have clearly labeled// columns, rows, and data regions. Tables make it easier for users to sort,// analyze, format, manage, add, and delete information. This element is the// root element for a table that is not a single cell XML table.type xlsxTable struct {	XMLName              xml.Name            `xml:"table"`	XMLNS                string              `xml:"xmlns,attr"`	DataCellStyle        string              `xml:"dataCellStyle,attr,omitempty"`	DataDxfID            int                 `xml:"dataDxfId,attr,omitempty"`	DisplayName          string              `xml:"displayName,attr,omitempty"`	HeaderRowBorderDxfID int                 `xml:"headerRowBorderDxfId,attr,omitempty"`	HeaderRowCellStyle   string              `xml:"headerRowCellStyle,attr,omitempty"`	HeaderRowCount       int                 `xml:"headerRowCount,attr,omitempty"`	HeaderRowDxfID       int                 `xml:"headerRowDxfId,attr,omitempty"`	ID                   int                 `xml:"id,attr"`	InsertRow            bool                `xml:"insertRow,attr,omitempty"`	InsertRowShift       bool                `xml:"insertRowShift,attr,omitempty"`	Name                 string              `xml:"name,attr"`	Published            bool                `xml:"published,attr,omitempty"`	Ref                  string              `xml:"ref,attr"`	TotalsRowCount       int                 `xml:"totalsRowCount,attr,omitempty"`	TotalsRowDxfID       int                 `xml:"totalsRowDxfId,attr,omitempty"`	TotalsRowShown       bool                `xml:"totalsRowShown,attr"`	AutoFilter           *xlsxAutoFilter     `xml:"autoFilter"`	TableColumns         *xlsxTableColumns   `xml:"tableColumns"`	TableStyleInfo       *xlsxTableStyleInfo `xml:"tableStyleInfo"`}// xlsxAutoFilter temporarily hides rows based on a filter criteria, which is// applied column by column to a table of data in the worksheet. This collection// expresses AutoFilter settings.type xlsxAutoFilter struct {	XMLName      xml.Name            `xml:"autoFilter"`	Ref          string              `xml:"ref,attr"`	FilterColumn []*xlsxFilterColumn `xml:"filterColumn"`}// xlsxFilterColumn directly maps the filterColumn element. The filterColumn// collection identifies a particular column in the AutoFilter range and// specifies filter information that has been applied to this column. If a// column in the AutoFilter range has no criteria specified, then there is no// corresponding filterColumn collection expressed for that column.type xlsxFilterColumn struct {	ColID         int                `xml:"colId,attr"`	HiddenButton  bool               `xml:"hiddenButton,attr,omitempty"`	ShowButton    bool               `xml:"showButton,attr,omitempty"`	CustomFilters *xlsxCustomFilters `xml:"customFilters"`	Filters       *xlsxFilters       `xml:"filters"`	ColorFilter   *xlsxColorFilter   `xml:"colorFilter"`	DynamicFilter *xlsxDynamicFilter `xml:"dynamicFilter"`	IconFilter    *xlsxIconFilter    `xml:"iconFilter"`	Top10         *xlsxTop10         `xml:"top10"`}// xlsxCustomFilters directly maps the customFilters element. When there is more// than one custom filter criteria to apply (an 'and' or 'or' joining two// criteria), then this element groups the customFilter elements together.type xlsxCustomFilters struct {	And          bool                `xml:"and,attr,omitempty"`	CustomFilter []*xlsxCustomFilter `xml:"customFilter"`}// xlsxCustomFilter directly maps the customFilter element. A custom AutoFilter// specifies an operator and a value. There can be at most two customFilters// specified, and in that case the parent element specifies whether the two// conditions are joined by 'and' or 'or'. For any cells whose values do not// meet the specified criteria, the corresponding rows shall be hidden from view// when the filter is applied.type xlsxCustomFilter struct {	Operator string `xml:"operator,attr,omitempty"`	Val      string `xml:"val,attr,omitempty"`}// xlsxFilters directly maps the filters (Filter Criteria) element. When// multiple values are chosen to filter by, or when a group of date values are// chosen to filter by, this element groups those criteria together.type xlsxFilters struct {	Blank         bool                 `xml:"blank,attr,omitempty"`	CalendarType  string               `xml:"calendarType,attr,omitempty"`	Filter        []*xlsxFilter        `xml:"filter"`	DateGroupItem []*xlsxDateGroupItem `xml:"dateGroupItem"`}// xlsxFilter directly maps the filter element. This element expresses a filter// criteria value.type xlsxFilter struct {	Val string `xml:"val,attr,omitempty"`}// xlsxColorFilter directly maps the colorFilter element. This element specifies// the color to filter by and whether to use the cell's fill or font color in// the filter criteria. If the cell's font or fill color does not match the// color specified in the criteria, the rows corresponding to those cells are// hidden from view.type xlsxColorFilter struct {	CellColor bool `xml:"cellColor,attr"`	DxfID     int  `xml:"dxfId,attr"`}// xlsxDynamicFilter directly maps the dynamicFilter element. This collection// specifies dynamic filter criteria. These criteria are considered dynamic// because they can change, either with the data itself (e.g., "above average")// or with the current system date (e.g., show values for "today"). For any// cells whose values do not meet the specified criteria, the corresponding rows// shall be hidden from view when the filter is applied.type xlsxDynamicFilter struct {	MaxValISO string  `xml:"maxValIso,attr,omitempty"`	Type      string  `xml:"type,attr,omitempty"`	Val       float64 `xml:"val,attr,omitempty"`	ValISO    string  `xml:"valIso,attr,omitempty"`}// xlsxIconFilter directly maps the iconFilter element. This element specifies// the icon set and particular icon within that set to filter by. For any cells// whose icon does not match the specified criteria, the corresponding rows// shall be hidden from view when the filter is applied.type xlsxIconFilter struct {	IconID  int    `xml:"iconId,attr"`	IconSet string `xml:"iconSet,attr,omitempty"`}// xlsxTop10 directly maps the top10 element. This element specifies the top N// (percent or number of items) to filter by.type xlsxTop10 struct {	FilterVal float64 `xml:"filterVal,attr,omitempty"`	Percent   bool    `xml:"percent,attr,omitempty"`	Top       bool    `xml:"top,attr"`	Val       float64 `xml:"val,attr,omitempty"`}// xlsxDateGroupItem directly maps the dateGroupItem element. This collection is// used to express a group of dates or times which are used in an AutoFilter// criteria. [Note: See parent element for an example. end note] Values are// always written in the calendar type of the first date encountered in the// filter range, so that all subsequent dates, even when formatted or// represented by other calendar types, can be correctly compared for the// purposes of filtering.type xlsxDateGroupItem struct {	DateTimeGrouping string `xml:"dateTimeGrouping,attr,omitempty"`	Day              int    `xml:"day,attr,omitempty"`	Hour             int    `xml:"hour,attr,omitempty"`	Minute           int    `xml:"minute,attr,omitempty"`	Month            int    `xml:"month,attr,omitempty"`	Second           int    `xml:"second,attr,omitempty"`	Year             int    `xml:"year,attr,omitempty"`}// xlsxTableColumns directly maps the element representing the collection of all// table columns for this table.type xlsxTableColumns struct {	Count       int                `xml:"count,attr"`	TableColumn []*xlsxTableColumn `xml:"tableColumn"`}// xlsxTableColumn directly maps the element representing a single column for// this table.type xlsxTableColumn struct {	DataCellStyle      string `xml:"dataCellStyle,attr,omitempty"`	DataDxfID          int    `xml:"dataDxfId,attr,omitempty"`	HeaderRowCellStyle string `xml:"headerRowCellStyle,attr,omitempty"`	HeaderRowDxfID     int    `xml:"headerRowDxfId,attr,omitempty"`	ID                 int    `xml:"id,attr"`	Name               string `xml:"name,attr"`	QueryTableFieldID  int    `xml:"queryTableFieldId,attr,omitempty"`	TotalsRowCellStyle string `xml:"totalsRowCellStyle,attr,omitempty"`	TotalsRowDxfID     int    `xml:"totalsRowDxfId,attr,omitempty"`	TotalsRowFunction  string `xml:"totalsRowFunction,attr,omitempty"`	TotalsRowLabel     string `xml:"totalsRowLabel,attr,omitempty"`	UniqueName         string `xml:"uniqueName,attr,omitempty"`}// xlsxTableStyleInfo directly maps the tableStyleInfo element. This element// describes which style is used to display this table, and specifies which// portions of the table have the style applied.type xlsxTableStyleInfo struct {	Name              string `xml:"name,attr,omitempty"`	ShowFirstColumn   bool   `xml:"showFirstColumn,attr"`	ShowLastColumn    bool   `xml:"showLastColumn,attr"`	ShowRowStripes    bool   `xml:"showRowStripes,attr"`	ShowColumnStripes bool   `xml:"showColumnStripes,attr"`}// formatTable directly maps the format settings of the table.type formatTable struct {	TableName         string `json:"table_name"`	TableStyle        string `json:"table_style"`	ShowFirstColumn   bool   `json:"show_first_column"`	ShowLastColumn    bool   `json:"show_last_column"`	ShowRowStripes    bool   `json:"show_row_stripes"`	ShowColumnStripes bool   `json:"show_column_stripes"`}// formatAutoFilter directly maps the auto filter settings.type formatAutoFilter struct {	Column     string `json:"column"`	Expression string `json:"expression"`	FilterList []struct {		Column string `json:"column"`		Value  []int  `json:"value"`	} `json:"filter_list"`}
 |