瀏覽代碼

Prepare pivot table support, add pivot table definition struct

xuri 6 年之前
父節點
當前提交
b30c642e2b
共有 1 個文件被更改,包括 289 次插入0 次删除
  1. 289 0
      xmlPivotTable.go

+ 289 - 0
xmlPivotTable.go

@@ -0,0 +1,289 @@
+// 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.10 or later.
+
+package excelize
+
+import "encoding/xml"
+
+// xlsxPivotTableDefinition represents the PivotTable root element for
+// non-null PivotTables. There exists one pivotTableDefinition for each
+// PivotTableDefinition part
+type xlsxPivotTableDefinition struct {
+	XMLName                xml.Name                 `xml:"http://schemas.openxmlformats.org/spreadsheetml/2006/main pivotTableDefinition"`
+	Name                   string                   `xml:"name,attr"`
+	CacheID                int                      `xml:"cacheId,attr"`
+	DataOnRows             bool                     `xml:"dataOnRows,attr"`
+	DataPosition           int                      `xml:"dataPosition,attr"`
+	DataCaption            string                   `xml:"dataCaption,attr"`
+	GrandTotalCaption      string                   `xml:"grandTotalCaption,attr"`
+	ErrorCaption           string                   `xml:"errorCaption,attr"`
+	ShowError              bool                     `xml:"showError,attr"`
+	MissingCaption         string                   `xml:"missingCaption,attr"`
+	ShowMissing            bool                     `xml:"showMissing,attr"`
+	PageStyle              string                   `xml:"pageStyle,attr"`
+	PivotTableStyle        string                   `xml:"pivotTableStyle,attr"`
+	VacatedStyle           string                   `xml:"vacatedStyle,attr"`
+	Tag                    string                   `xml:"tag,attr"`
+	UpdatedVersion         int                      `xml:"updatedVersion,attr"`
+	MinRefreshableVersion  int                      `xml:"minRefreshableVersion,attr"`
+	AsteriskTotals         bool                     `xml:"asteriskTotals,attr"`
+	ShowItems              bool                     `xml:"showItems,attr"`
+	EditData               bool                     `xml:"editData,attr"`
+	DisableFieldList       bool                     `xml:"disableFieldList,attr"`
+	ShowCalcMbrs           bool                     `xml:"showCalcMbrs,attr"`
+	VisualTotals           bool                     `xml:"visualTotals,attr"`
+	ShowMultipleLabel      bool                     `xml:"showMultipleLabel,attr"`
+	ShowDataDropDown       bool                     `xml:"showDataDropDown,attr"`
+	ShowDrill              bool                     `xml:"showDrill,attr"`
+	PrintDrill             bool                     `xml:"printDrill,attr"`
+	ShowMemberPropertyTips bool                     `xml:"showMemberPropertyTips,attr"`
+	ShowDataTips           bool                     `xml:"showDataTips,attr"`
+	EnableWizard           bool                     `xml:"enableWizard,attr"`
+	EnableDrill            bool                     `xml:"enableDrill,attr"`
+	EnableFieldProperties  bool                     `xml:"enableFieldProperties,attr"`
+	PreserveFormatting     bool                     `xml:"preserveFormatting,attr"`
+	UseAutoFormatting      bool                     `xml:"useAutoFormatting,attr"`
+	PageWrap               int                      `xml:"pageWrap,attr"`
+	PageOverThenDown       bool                     `xml:"pageOverThenDown,attr"`
+	SubtotalHiddenItems    bool                     `xml:"subtotalHiddenItems,attr"`
+	RowGrandTotals         bool                     `xml:"rowGrandTotals,attr"`
+	ColGrandTotals         bool                     `xml:"colGrandTotals,attr"`
+	FieldPrintTitles       bool                     `xml:"fieldPrintTitles,attr"`
+	ItemPrintTitles        bool                     `xml:"itemPrintTitles,attr"`
+	MergeItem              bool                     `xml:"mergeItem,attr"`
+	ShowDropZones          bool                     `xml:"showDropZones,attr"`
+	CreatedVersion         int                      `xml:"createdVersion,attr"`
+	Indent                 int                      `xml:"indent,attr"`
+	ShowEmptyRow           bool                     `xml:"showEmptyRow,attr"`
+	ShowEmptyCol           bool                     `xml:"showEmptyCol,attr"`
+	ShowHeaders            bool                     `xml:"showHeaders,attr"`
+	Compact                bool                     `xml:"compact,attr"`
+	Outline                bool                     `xml:"outline,attr"`
+	OutlineData            bool                     `xml:"outlineData,attr"`
+	CompactData            bool                     `xml:"compactData,attr"`
+	Published              bool                     `xml:"published,attr"`
+	GridDropZones          bool                     `xml:"gridDropZones,attr"`
+	Immersive              bool                     `xml:"immersive,attr"`
+	MultipleFieldFilters   bool                     `xml:"multipleFieldFilters,attr"`
+	ChartFormat            int                      `xml:"chartFormat,attr"`
+	RowHeaderCaption       string                   `xml:"rowHeaderCaption,attr"`
+	ColHeaderCaption       string                   `xml:"colHeaderCaption,attr"`
+	FieldListSortAscending bool                     `xml:"fieldListSortAscending,attr"`
+	MdxSubqueries          bool                     `xml:"mdxSubqueries,attr"`
+	CustomListSort         bool                     `xml:"customListSort,attr"`
+	Location               *xlsxLocation            `xml:"location"`
+	PivotFields            *xlsxPivotFields         `xml:"pivotFields"`
+	RowFields              *xlsxRowFields           `xml:"rowFields"`
+	RowItems               *xlsxRowItems            `xml:"rowItems"`
+	ColFields              *xlsxColFields           `xml:"colFields"`
+	ColItems               *xlsxColItems            `xml:"colItems"`
+	PageFields             *xlsxPageFields          `xml:"pageFields"`
+	DataFields             *xlsxDataFields          `xml:"dataFields"`
+	ConditionalFormats     *xlsxConditionalFormats  `xml:"conditionalFormats"`
+	PivotTableStyleInfo    *xlsxPivotTableStyleInfo `xml:"pivotTableStyleInfo"`
+}
+
+// xlsxLocation represents location information for the PivotTable.
+type xlsxLocation struct {
+	Ref            string `xml:"ref,attr"`
+	FirstHeaderRow int    `xml:"firstHeaderRow,attr"`
+	FirstDataRow   int    `xml:"firstDataRow,attr"`
+	FirstDataCol   int    `xml:"firstDataCol,attr"`
+	RowPageCount   int    `xml:"rowPageCount,attr"`
+	ColPageCount   int    `xml:"colPageCount,attr"`
+}
+
+// xlsxPivotFields represents the collection of fields that appear on the
+// PivotTable.
+type xlsxPivotFields struct {
+	Count      int               `xml:"count,attr"`
+	PivotField []*xlsxPivotField `xml:"pivotField"`
+}
+
+// xlsxPivotField represents a single field in the PivotTable. This element
+// contains information about the field, including the collection of items in
+// the field.
+type xlsxPivotField struct {
+	Name                         string             `xml:"name,attr"`
+	Axis                         string             `xml:"axis,attr,omitempty"`
+	DataField                    bool               `xml:"dataField,attr"`
+	SubtotalCaption              string             `xml:"subtotalCaption,attr"`
+	ShowDropDowns                bool               `xml:"showDropDowns,attr"`
+	HiddenLevel                  bool               `xml:"hiddenLevel,attr"`
+	UniqueMemberProperty         string             `xml:"uniqueMemberProperty,attr"`
+	Compact                      bool               `xml:"compact,attr"`
+	AllDrilled                   bool               `xml:"allDrilled,attr"`
+	NumFmtId                     string             `xml:"numFmtId,attr,omitempty"`
+	Outline                      bool               `xml:"outline,attr"`
+	SubtotalTop                  bool               `xml:"subtotalTop,attr"`
+	DragToRow                    bool               `xml:"dragToRow,attr"`
+	DragToCol                    bool               `xml:"dragToCol,attr"`
+	MultipleItemSelectionAllowed bool               `xml:"multipleItemSelectionAllowed,attr"`
+	DragToPage                   bool               `xml:"dragToPage,attr"`
+	DragToData                   bool               `xml:"dragToData,attr"`
+	DragOff                      bool               `xml:"dragOff,attr"`
+	ShowAll                      bool               `xml:"showAll,attr"`
+	InsertBlankRow               bool               `xml:"insertBlankRow,attr"`
+	ServerField                  bool               `xml:"serverField,attr"`
+	InsertPageBreak              bool               `xml:"insertPageBreak,attr"`
+	AutoShow                     bool               `xml:"autoShow,attr"`
+	TopAutoShow                  bool               `xml:"topAutoShow,attr"`
+	HideNewItems                 bool               `xml:"hideNewItems,attr"`
+	MeasureFilter                bool               `xml:"measureFilter,attr"`
+	IncludeNewItemsInFilter      bool               `xml:"includeNewItemsInFilter,attr"`
+	ItemPageCount                int                `xml:"itemPageCount,attr"`
+	SortType                     string             `xml:"sortType,attr"`
+	DataSourceSort               bool               `xml:"dataSourceSort,attr,omitempty"`
+	NonAutoSortDefault           bool               `xml:"nonAutoSortDefault,attr"`
+	RankBy                       int                `xml:"rankBy,attr,omitempty"`
+	DefaultSubtotal              bool               `xml:"defaultSubtotal,attr"`
+	SumSubtotal                  bool               `xml:"sumSubtotal,attr"`
+	CountASubtotal               bool               `xml:"countASubtotal,attr"`
+	AvgSubtotal                  bool               `xml:"avgSubtotal,attr"`
+	MaxSubtotal                  bool               `xml:"maxSubtotal,attr"`
+	MinSubtotal                  bool               `xml:"minSubtotal,attr"`
+	ProductSubtotal              bool               `xml:"productSubtotal,attr"`
+	CountSubtotal                bool               `xml:"countSubtotal,attr"`
+	StdDevSubtotal               bool               `xml:"stdDevSubtotal,attr"`
+	StdDevPSubtotal              bool               `xml:"stdDevPSubtotal,attr"`
+	VarSubtotal                  bool               `xml:"varSubtotal,attr"`
+	VarPSubtotal                 bool               `xml:"varPSubtotal,attr"`
+	ShowPropCell                 bool               `xml:"showPropCell,attr,omitempty"`
+	ShowPropTip                  bool               `xml:"showPropTip,attr,omitempty"`
+	ShowPropAsCaption            bool               `xml:"showPropAsCaption,attr,omitempty"`
+	DefaultAttributeDrillState   bool               `xml:"defaultAttributeDrillState,attr,omitempty"`
+	Items                        *xlsxItems         `xml:"items"`
+	AutoSortScope                *xlsxAutoSortScope `xml:"autoSortScope"`
+	ExtLst                       *xlsxExtLst        `xml:"extLst"`
+}
+
+// xlsxItems represents the collection of items in a PivotTable field. The
+// items in the collection are ordered by index. Items represent the unique
+// entries from the field in the source data.
+type xlsxItems struct {
+	Count int         `xml:"count,attr"`
+	Item  []*xlsxItem `xml:"item"`
+}
+
+// xlsxItem represents a single item in PivotTable field.
+type xlsxItem struct {
+	N  string `xml:"n,attr"`
+	T  string `xml:"t,attr"`
+	H  bool   `xml:"h,attr"`
+	S  bool   `xml:"s,attr"`
+	SD bool   `xml:"sd,attr"`
+	F  bool   `xml:"f,attr"`
+	M  bool   `xml:"m,attr"`
+	C  bool   `xml:"c,attr"`
+	X  int    `xml:"x,attr,omitempty"`
+	D  bool   `xml:"d,attr"`
+	E  bool   `xml:"e,attr"`
+}
+
+// xlsxAutoSortScope represents the sorting scope for the PivotTable.
+type xlsxAutoSortScope struct {
+}
+
+// xlsxRowFields represents the collection of row fields for the PivotTable.
+type xlsxRowFields struct {
+	Count  int          `xml:"count,attr"`
+	Fields []*xlsxField `xml:"fields"`
+}
+
+// xlsxField represents a generic field that can appear either on the column
+// or the row region of the PivotTable. There areas many <x> elements as there
+// are item values in any particular column or row.
+type xlsxField struct {
+	X int `xml:"x,attr"`
+}
+
+// xlsxRowItems represents the collection of items in row axis of the
+// PivotTable.
+type xlsxRowItems struct {
+	Count int      `xml:"count,attr"`
+	I     []*xlsxI `xml:"i"`
+}
+
+// xlsxI represents the collection of items in the row region of the
+// PivotTable.
+type xlsxI struct {
+	X []*xlsxX `xml:"x"`
+}
+
+// xlsxX represents an array of indexes to cached shared item values.
+type xlsxX struct {
+	XMLName xml.Name `xml:"x"`
+}
+
+// xlsxColFields represents the collection of fields that are on the column
+// axis of the PivotTable.
+type xlsxColFields struct {
+	Count  int          `xml:"count,attr"`
+	Fields []*xlsxField `xml:"fields"`
+}
+
+// xlsxColItems represents the collection of column items of the PivotTable.
+type xlsxColItems struct {
+	Count int      `xml:"count,attr"`
+	I     []*xlsxI `xml:"i"`
+}
+
+// xlsxPageFields represents the collection of items in the page or report
+// filter region of the PivotTable.
+type xlsxPageFields struct {
+	Count     int              `xml:"count,attr"`
+	PageField []*xlsxPageField `xml:"pageField"`
+}
+
+// xlsxPageField represents a field on the page or report filter of the
+// PivotTable.
+type xlsxPageField struct {
+	Fld    int         `xml:"fld,attr"`
+	Item   int         `xml:"item,attr,omitempty"`
+	Hier   int         `xml:"hier,attr"`
+	Name   string      `xml:"name,attr"`
+	Cap    string      `xml:"cap,attr"`
+	ExtLst *xlsxExtLst `xml:"extLst"`
+}
+
+// xlsxDataFields represents the collection of items in the data region of the
+// PivotTable.
+type xlsxDataFields struct {
+	Count     int            `xml:"count,attr"`
+	DataField *xlsxDataField `xml:"dataField"`
+}
+
+// xlsxDataField represents a field from a source list, table, or database
+// that contains data that is summarized in a PivotTable.
+type xlsxDataField struct {
+	Name       string      `xml:"name,attr,omitempty"`
+	Fld        int         `xml:"fld,attr"`
+	Subtotal   string      `xml:"subtotal,attr"`
+	ShowDataAs string      `xml:"showDataAs,attr"`
+	BaseField  int         `xml:"baseField,attr"`
+	BaseItem   int64       `xml:"baseItem,attr"`
+	NumFmtId   string      `xml:"numFmtId,attr,omitempty"`
+	ExtLst     *xlsxExtLst `xml:"extLst"`
+}
+
+// xlsxConditionalFormats represents the collection of conditional formats
+// applied to a PivotTable.
+type xlsxConditionalFormats struct {
+}
+
+// xlsxPivotTableStyleInfo represent information on style applied to the
+// PivotTable.
+type xlsxPivotTableStyleInfo struct {
+	Name           string `xml:"name,attr"`
+	ShowRowHeaders bool   `xml:"showRowHeaders,attr"`
+	ShowColHeaders bool   `xml:"showColHeaders,attr"`
+	ShowRowStripes bool   `xml:"showRowStripes,attr"`
+	ShowColStripes bool   `xml:"showColStripes,attr"`
+	ShowLastColumn bool   `xml:"showLastColumn,attr,omitempty"`
+}