Skip to content

Commit 96917e4

Browse files
committed
Update docs and test case for the pivot table
1 parent 97bffe6 commit 96917e4

File tree

2 files changed

+98
-35
lines changed

2 files changed

+98
-35
lines changed

pivotTable.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,16 @@ type PivotTableField struct {
101101
// if err := f.AddPivotTable(&excelize.PivotTableOption{
102102
// DataRange: "Sheet1!$A$1:$E$31",
103103
// PivotTableRange: "Sheet1!$G$2:$M$34",
104-
// Rows: []excelize.PivotTableField{{Data: "Month"}, {Data: "Year"}},
104+
// Rows: []excelize.PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
105105
// Filter: []excelize.PivotTableField{{Data: "Region"}},
106-
// Columns: []excelize.PivotTableField{{Data: "Type"}},
106+
// Columns: []excelize.PivotTableField{{Data: "Type", DefaultSubtotal: true}},
107107
// Data: []excelize.PivotTableField{{Data: "Sales", Name: "Summarize", Subtotal: "Sum"}},
108+
// RowGrandTotals: true,
109+
// ColGrandTotals: true,
110+
// ShowDrill: true,
111+
// ShowRowHeaders: true,
112+
// ShowColHeaders: true,
113+
// ShowLastColumn: true,
108114
// }); err != nil {
109115
// fmt.Println(err)
110116
// }
@@ -289,9 +295,8 @@ func (f *File) addPivotTable(cacheID, pivotTableID int, pivotTableXML string, op
289295
pivotTableStyle := func() string {
290296
if opt.PivotTableStyleName == "" {
291297
return "PivotStyleLight16"
292-
} else {
293-
return opt.PivotTableStyleName
294298
}
299+
return opt.PivotTableStyleName
295300
}
296301
pt := xlsxPivotTableDefinition{
297302
Name: fmt.Sprintf("Pivot Table%d", pivotTableID),

pivotTable_test.go

Lines changed: 89 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -28,54 +28,112 @@ func TestAddPivotTable(t *testing.T) {
2828
assert.NoError(t, f.AddPivotTable(&PivotTableOption{
2929
DataRange: "Sheet1!$A$1:$E$31",
3030
PivotTableRange: "Sheet1!$G$2:$M$34",
31-
Rows: []PivotTableField{{Data: "Month"}, {Data: "Year"}},
31+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
3232
Filter: []PivotTableField{{Data: "Region"}},
33-
Columns: []PivotTableField{{Data: "Type"}},
33+
Columns: []PivotTableField{{Data: "Type", DefaultSubtotal: true}},
3434
Data: []PivotTableField{{Data: "Sales", Subtotal: "Sum", Name: "Summarize by Sum"}},
35+
RowGrandTotals: true,
36+
ColGrandTotals: true,
37+
ShowDrill: true,
38+
ShowRowHeaders: true,
39+
ShowColHeaders: true,
40+
ShowLastColumn: true,
3541
}))
3642
// Use different order of coordinate tests
3743
assert.NoError(t, f.AddPivotTable(&PivotTableOption{
3844
DataRange: "Sheet1!$A$1:$E$31",
3945
PivotTableRange: "Sheet1!$U$34:$O$2",
40-
Rows: []PivotTableField{{Data: "Month"}, {Data: "Year"}},
41-
Columns: []PivotTableField{{Data: "Type"}},
46+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
47+
Columns: []PivotTableField{{Data: "Type", DefaultSubtotal: true}},
4248
Data: []PivotTableField{{Data: "Sales", Subtotal: "Average", Name: "Summarize by Average"}},
49+
RowGrandTotals: true,
50+
ColGrandTotals: true,
51+
ShowDrill: true,
52+
ShowRowHeaders: true,
53+
ShowColHeaders: true,
54+
ShowLastColumn: true,
4355
}))
4456

4557
assert.NoError(t, f.AddPivotTable(&PivotTableOption{
4658
DataRange: "Sheet1!$A$1:$E$31",
4759
PivotTableRange: "Sheet1!$W$2:$AC$34",
48-
Rows: []PivotTableField{{Data: "Month"}, {Data: "Year"}},
60+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
4961
Columns: []PivotTableField{{Data: "Region"}},
5062
Data: []PivotTableField{{Data: "Sales", Subtotal: "Count", Name: "Summarize by Count"}},
63+
RowGrandTotals: true,
64+
ColGrandTotals: true,
65+
ShowDrill: true,
66+
ShowRowHeaders: true,
67+
ShowColHeaders: true,
68+
ShowLastColumn: true,
5169
}))
5270
assert.NoError(t, f.AddPivotTable(&PivotTableOption{
5371
DataRange: "Sheet1!$A$1:$E$31",
5472
PivotTableRange: "Sheet1!$G$37:$W$50",
5573
Rows: []PivotTableField{{Data: "Month"}},
56-
Columns: []PivotTableField{{Data: "Region"}, {Data: "Year"}},
74+
Columns: []PivotTableField{{Data: "Region", DefaultSubtotal: true}, {Data: "Year"}},
5775
Data: []PivotTableField{{Data: "Sales", Subtotal: "CountNums", Name: "Summarize by CountNums"}},
76+
RowGrandTotals: true,
77+
ColGrandTotals: true,
78+
ShowDrill: true,
79+
ShowRowHeaders: true,
80+
ShowColHeaders: true,
81+
ShowLastColumn: true,
5882
}))
5983
assert.NoError(t, f.AddPivotTable(&PivotTableOption{
6084
DataRange: "Sheet1!$A$1:$E$31",
6185
PivotTableRange: "Sheet1!$AE$2:$AG$33",
62-
Rows: []PivotTableField{{Data: "Month"}, {Data: "Year"}},
86+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
6387
Data: []PivotTableField{{Data: "Sales", Subtotal: "Max", Name: "Summarize by Max"}},
88+
RowGrandTotals: true,
89+
ColGrandTotals: true,
90+
ShowDrill: true,
91+
ShowRowHeaders: true,
92+
ShowColHeaders: true,
93+
ShowLastColumn: true,
94+
}))
95+
// Create pivot table with empty subtotal field name and specified style
96+
assert.NoError(t, f.AddPivotTable(&PivotTableOption{
97+
DataRange: "Sheet1!$A$1:$E$31",
98+
PivotTableRange: "Sheet1!$AJ$2:$AP1$35",
99+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
100+
Filter: []PivotTableField{{Data: "Region"}},
101+
Columns: []PivotTableField{{Data: "Type", DefaultSubtotal: true}},
102+
Data: []PivotTableField{{Subtotal: "Sum", Name: "Summarize by Sum"}},
103+
RowGrandTotals: true,
104+
ColGrandTotals: true,
105+
ShowDrill: true,
106+
ShowRowHeaders: true,
107+
ShowColHeaders: true,
108+
ShowLastColumn: true,
109+
PivotTableStyleName: "PivotStyleLight19",
64110
}))
65111
f.NewSheet("Sheet2")
66112
assert.NoError(t, f.AddPivotTable(&PivotTableOption{
67113
DataRange: "Sheet1!$A$1:$E$31",
68114
PivotTableRange: "Sheet2!$A$1:$AR$15",
69115
Rows: []PivotTableField{{Data: "Month"}},
70-
Columns: []PivotTableField{{Data: "Region"}, {Data: "Type"}, {Data: "Year"}},
116+
Columns: []PivotTableField{{Data: "Region", DefaultSubtotal: true}, {Data: "Type", DefaultSubtotal: true}, {Data: "Year"}},
71117
Data: []PivotTableField{{Data: "Sales", Subtotal: "Min", Name: "Summarize by Min"}},
118+
RowGrandTotals: true,
119+
ColGrandTotals: true,
120+
ShowDrill: true,
121+
ShowRowHeaders: true,
122+
ShowColHeaders: true,
123+
ShowLastColumn: true,
72124
}))
73125
assert.NoError(t, f.AddPivotTable(&PivotTableOption{
74126
DataRange: "Sheet1!$A$1:$E$31",
75127
PivotTableRange: "Sheet2!$A$18:$AR$54",
76-
Rows: []PivotTableField{{Data: "Month"}, {Data: "Type"}},
77-
Columns: []PivotTableField{{Data: "Region"}, {Data: "Year"}},
128+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Type"}},
129+
Columns: []PivotTableField{{Data: "Region", DefaultSubtotal: true}, {Data: "Year"}},
78130
Data: []PivotTableField{{Data: "Sales", Subtotal: "Product", Name: "Summarize by Product"}},
131+
RowGrandTotals: true,
132+
ColGrandTotals: true,
133+
ShowDrill: true,
134+
ShowRowHeaders: true,
135+
ShowColHeaders: true,
136+
ShowLastColumn: true,
79137
}))
80138

81139
// Test empty pivot table options
@@ -84,65 +142,65 @@ func TestAddPivotTable(t *testing.T) {
84142
assert.EqualError(t, f.AddPivotTable(&PivotTableOption{
85143
DataRange: "Sheet1!$A$1:$A$1",
86144
PivotTableRange: "Sheet1!$U$34:$O$2",
87-
Rows: []PivotTableField{{Data: "Month"}, {Data: "Year"}},
88-
Columns: []PivotTableField{{Data: "Type"}},
145+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
146+
Columns: []PivotTableField{{Data: "Type", DefaultSubtotal: true}},
89147
Data: []PivotTableField{{Data: "Sales"}},
90148
}), `parameter 'DataRange' parsing error: parameter is invalid`)
91149
// Test the data range of the worksheet that is not declared
92150
assert.EqualError(t, f.AddPivotTable(&PivotTableOption{
93151
DataRange: "$A$1:$E$31",
94152
PivotTableRange: "Sheet1!$U$34:$O$2",
95-
Rows: []PivotTableField{{Data: "Month"}, {Data: "Year"}},
96-
Columns: []PivotTableField{{Data: "Type"}},
153+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
154+
Columns: []PivotTableField{{Data: "Type", DefaultSubtotal: true}},
97155
Data: []PivotTableField{{Data: "Sales"}},
98156
}), `parameter 'DataRange' parsing error: parameter is invalid`)
99157
// Test the worksheet declared in the data range does not exist
100158
assert.EqualError(t, f.AddPivotTable(&PivotTableOption{
101159
DataRange: "SheetN!$A$1:$E$31",
102160
PivotTableRange: "Sheet1!$U$34:$O$2",
103-
Rows: []PivotTableField{{Data: "Month"}, {Data: "Year"}},
104-
Columns: []PivotTableField{{Data: "Type"}},
161+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
162+
Columns: []PivotTableField{{Data: "Type", DefaultSubtotal: true}},
105163
Data: []PivotTableField{{Data: "Sales"}},
106164
}), "sheet SheetN is not exist")
107165
// Test the pivot table range of the worksheet that is not declared
108166
assert.EqualError(t, f.AddPivotTable(&PivotTableOption{
109167
DataRange: "Sheet1!$A$1:$E$31",
110168
PivotTableRange: "$U$34:$O$2",
111-
Rows: []PivotTableField{{Data: "Month"}, {Data: "Year"}},
112-
Columns: []PivotTableField{{Data: "Type"}},
169+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
170+
Columns: []PivotTableField{{Data: "Type", DefaultSubtotal: true}},
113171
Data: []PivotTableField{{Data: "Sales"}},
114172
}), `parameter 'PivotTableRange' parsing error: parameter is invalid`)
115173
// Test the worksheet declared in the pivot table range does not exist
116174
assert.EqualError(t, f.AddPivotTable(&PivotTableOption{
117175
DataRange: "Sheet1!$A$1:$E$31",
118176
PivotTableRange: "SheetN!$U$34:$O$2",
119-
Rows: []PivotTableField{{Data: "Month"}, {Data: "Year"}},
120-
Columns: []PivotTableField{{Data: "Type"}},
177+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
178+
Columns: []PivotTableField{{Data: "Type", DefaultSubtotal: true}},
121179
Data: []PivotTableField{{Data: "Sales"}},
122180
}), "sheet SheetN is not exist")
123181
// Test not exists worksheet in data range
124182
assert.EqualError(t, f.AddPivotTable(&PivotTableOption{
125183
DataRange: "SheetN!$A$1:$E$31",
126184
PivotTableRange: "Sheet1!$U$34:$O$2",
127-
Rows: []PivotTableField{{Data: "Month"}, {Data: "Year"}},
128-
Columns: []PivotTableField{{Data: "Type"}},
185+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
186+
Columns: []PivotTableField{{Data: "Type", DefaultSubtotal: true}},
129187
Data: []PivotTableField{{Data: "Sales"}},
130188
}), "sheet SheetN is not exist")
131189
// Test invalid row number in data range
132190
assert.EqualError(t, f.AddPivotTable(&PivotTableOption{
133191
DataRange: "Sheet1!$A$0:$E$31",
134192
PivotTableRange: "Sheet1!$U$34:$O$2",
135-
Rows: []PivotTableField{{Data: "Month"}, {Data: "Year"}},
136-
Columns: []PivotTableField{{Data: "Type"}},
193+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
194+
Columns: []PivotTableField{{Data: "Type", DefaultSubtotal: true}},
137195
Data: []PivotTableField{{Data: "Sales"}},
138196
}), `parameter 'DataRange' parsing error: cannot convert cell "A0" to coordinates: invalid cell name "A0"`)
139197
assert.NoError(t, f.SaveAs(filepath.Join("test", "TestAddPivotTable1.xlsx")))
140198
// Test with field names that exceed the length limit and invalid subtotal
141199
assert.NoError(t, f.AddPivotTable(&PivotTableOption{
142200
DataRange: "Sheet1!$A$1:$E$31",
143201
PivotTableRange: "Sheet1!$G$2:$M$34",
144-
Rows: []PivotTableField{{Data: "Month"}, {Data: "Year"}},
145-
Columns: []PivotTableField{{Data: "Type"}},
202+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
203+
Columns: []PivotTableField{{Data: "Type", DefaultSubtotal: true}},
146204
Data: []PivotTableField{{Data: "Sales", Subtotal: "-", Name: strings.Repeat("s", 256)}},
147205
}))
148206

@@ -158,8 +216,8 @@ func TestAddPivotTable(t *testing.T) {
158216
assert.EqualError(t, f.addPivotCache(0, "", &PivotTableOption{
159217
DataRange: "$A$1:$E$31",
160218
PivotTableRange: "Sheet1!$U$34:$O$2",
161-
Rows: []PivotTableField{{Data: "Month"}, {Data: "Year"}},
162-
Columns: []PivotTableField{{Data: "Type"}},
219+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
220+
Columns: []PivotTableField{{Data: "Type", DefaultSubtotal: true}},
163221
Data: []PivotTableField{{Data: "Sales"}},
164222
}, nil), "parameter 'DataRange' parsing error: parameter is invalid")
165223
// Test add pivot table with empty options
@@ -170,8 +228,8 @@ func TestAddPivotTable(t *testing.T) {
170228
assert.EqualError(t, f.addPivotFields(nil, &PivotTableOption{
171229
DataRange: "$A$1:$E$31",
172230
PivotTableRange: "Sheet1!$U$34:$O$2",
173-
Rows: []PivotTableField{{Data: "Month"}, {Data: "Year"}},
174-
Columns: []PivotTableField{{Data: "Type"}},
231+
Rows: []PivotTableField{{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
232+
Columns: []PivotTableField{{Data: "Type", DefaultSubtotal: true}},
175233
Data: []PivotTableField{{Data: "Sales"}},
176234
}), `parameter 'DataRange' parsing error: parameter is invalid`)
177235
// Test get pivot fields index with empty data range
@@ -208,7 +266,7 @@ func TestAddPivotColFields(t *testing.T) {
208266
// Test invalid data range
209267
assert.EqualError(t, f.addPivotColFields(&xlsxPivotTableDefinition{}, &PivotTableOption{
210268
DataRange: "Sheet1!$A$1:$A$1",
211-
Columns: []PivotTableField{{Data: "Type"}},
269+
Columns: []PivotTableField{{Data: "Type", DefaultSubtotal: true}},
212270
}), `parameter 'DataRange' parsing error: parameter is invalid`)
213271
}
214272

0 commit comments

Comments
 (0)