summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cell.go3
-rw-r--r--pivotTable.go29
-rw-r--r--pivotTable_test.go1
-rw-r--r--xmlPivotTable.go6
4 files changed, 35 insertions, 4 deletions
diff --git a/cell.go b/cell.go
index 95cfbbf..8e7ede1 100644
--- a/cell.go
+++ b/cell.go
@@ -458,7 +458,8 @@ func (f *File) SetCellHyperLink(sheet, axis, link, linkType string) error {
}
// SetCellRichText provides a function to set cell with rich text by given
-// worksheet. For example:
+// worksheet. For example, set rich text on the A1 cell of the worksheet named
+// Sheet1:
//
// package main
//
diff --git a/pivotTable.go b/pivotTable.go
index b7dc859..7061bfe 100644
--- a/pivotTable.go
+++ b/pivotTable.go
@@ -25,6 +25,7 @@ type PivotTableOption struct {
Rows []PivotTableField
Columns []PivotTableField
Data []PivotTableField
+ Filter []PivotTableField
}
// PivotTableField directly maps the field settings of the pivot table.
@@ -86,6 +87,7 @@ type PivotTableField struct {
// DataRange: "Sheet1!$A$1:$E$31",
// PivotTableRange: "Sheet1!$G$2:$M$34",
// Rows: []excelize.PivotTableField{{Data: "Month"}, {Data: "Year"}},
+// Filter: []excelize.PivotTableField{{Data: "Region"}},
// Columns: []excelize.PivotTableField{{Data: "Type"}},
// Data: []excelize.PivotTableField{{Data: "Sales", Name: "Summarize", Subtotal: "Sum"}},
// }); err != nil {
@@ -283,6 +285,7 @@ func (f *File) addPivotTable(cacheID, pivotTableID int, pivotTableXML string, op
Count: 1,
I: []*xlsxI{{}},
},
+ PageFields: &xlsxPageFields{},
DataFields: &xlsxDataFields{},
PivotTableStyleInfo: &xlsxPivotTableStyleInfo{
Name: "PivotStyleLight16",
@@ -320,6 +323,19 @@ func (f *File) addPivotTable(cacheID, pivotTableID int, pivotTableXML string, op
return err
}
+ // page fields
+ pageFieldsIndex, err := f.getPivotFieldsIndex(opt.Filter, opt)
+ if err != nil {
+ return err
+ }
+ pageFieldsName := f.getPivotTableFieldsName(opt.Filter)
+ for idx, pageField := range pageFieldsIndex {
+ pt.PageFields.PageField = append(pt.PageFields.PageField, &xlsxPageField{
+ Name: pageFieldsName[idx],
+ Fld: pageField,
+ })
+ }
+
// data fields
dataFieldsIndex, err := f.getPivotFieldsIndex(opt.Data, opt)
if err != nil {
@@ -412,6 +428,19 @@ func (f *File) addPivotFields(pt *xlsxPivotTableDefinition, opt *PivotTableOptio
})
continue
}
+ if inPivotTableField(opt.Filter, name) != -1 {
+ pt.PivotFields.PivotField = append(pt.PivotFields.PivotField, &xlsxPivotField{
+ Axis: "axisPage",
+ Name: f.getPivotTableFieldName(name, opt.Columns),
+ Items: &xlsxItems{
+ Count: 1,
+ Item: []*xlsxItem{
+ {T: "default"},
+ },
+ },
+ })
+ continue
+ }
if inPivotTableField(opt.Columns, name) != -1 {
pt.PivotFields.PivotField = append(pt.PivotFields.PivotField, &xlsxPivotField{
Axis: "axisCol",
diff --git a/pivotTable_test.go b/pivotTable_test.go
index 4379538..767206b 100644
--- a/pivotTable_test.go
+++ b/pivotTable_test.go
@@ -29,6 +29,7 @@ func TestAddPivotTable(t *testing.T) {
DataRange: "Sheet1!$A$1:$E$31",
PivotTableRange: "Sheet1!$G$2:$M$34",
Rows: []PivotTableField{{Data: "Month"}, {Data: "Year"}},
+ Filter: []PivotTableField{{Data: "Region"}},
Columns: []PivotTableField{{Data: "Type"}},
Data: []PivotTableField{{Data: "Sales", Subtotal: "Sum", Name: "Summarize by Sum"}},
}))
diff --git a/xmlPivotTable.go b/xmlPivotTable.go
index 82bbf27..2eff026 100644
--- a/xmlPivotTable.go
+++ b/xmlPivotTable.go
@@ -251,9 +251,9 @@ type xlsxPageFields struct {
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"`
+ Hier int `xml:"hier,attr,omitempty"`
+ Name string `xml:"name,attr,omitempty"`
+ Cap string `xml:"cap,attr,omitempty"`
ExtLst *xlsxExtLst `xml:"extLst"`
}