Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xuri
excelize
提交
96917e46
excelize
项目概览
xuri
/
excelize
通知
13
Star
2
Fork
4
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
excelize
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
已验证
提交
96917e46
编写于
9月 15, 2020
作者:
xurime
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update docs and test case for the pivot table
上级
97bffe60
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
98 addition
and
35 deletion
+98
-35
pivotTable.go
pivotTable.go
+9
-4
pivotTable_test.go
pivotTable_test.go
+89
-31
未找到文件。
pivotTable.go
浏览文件 @
96917e46
...
...
@@ -101,10 +101,16 @@ type PivotTableField struct {
// if err := f.AddPivotTable(&excelize.PivotTableOption{
// DataRange: "Sheet1!$A$1:$E$31",
// PivotTableRange: "Sheet1!$G$2:$M$34",
// Rows: []excelize.PivotTableField{{Data: "Month"}, {Data: "Year"}},
// Rows: []excelize.PivotTableField{{Data: "Month"
, DefaultSubtotal: true
}, {Data: "Year"}},
// Filter: []excelize.PivotTableField{{Data: "Region"}},
// Columns: []excelize.PivotTableField{{Data: "Type"}},
// Columns: []excelize.PivotTableField{{Data: "Type"
, DefaultSubtotal: true
}},
// Data: []excelize.PivotTableField{{Data: "Sales", Name: "Summarize", Subtotal: "Sum"}},
// RowGrandTotals: true,
// ColGrandTotals: true,
// ShowDrill: true,
// ShowRowHeaders: true,
// ShowColHeaders: true,
// ShowLastColumn: true,
// }); err != nil {
// fmt.Println(err)
// }
...
...
@@ -289,9 +295,8 @@ func (f *File) addPivotTable(cacheID, pivotTableID int, pivotTableXML string, op
pivotTableStyle
:=
func
()
string
{
if
opt
.
PivotTableStyleName
==
""
{
return
"PivotStyleLight16"
}
else
{
return
opt
.
PivotTableStyleName
}
return
opt
.
PivotTableStyleName
}
pt
:=
xlsxPivotTableDefinition
{
Name
:
fmt
.
Sprintf
(
"Pivot Table%d"
,
pivotTableID
),
...
...
pivotTable_test.go
浏览文件 @
96917e46
...
...
@@ -28,54 +28,112 @@ func TestAddPivotTable(t *testing.T) {
assert
.
NoError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"Sheet1!$A$1:$E$31"
,
PivotTableRange
:
"Sheet1!$G$2:$M$34"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
},
{
Data
:
"Year"
}},
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Filter
:
[]
PivotTableField
{{
Data
:
"Region"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
,
DefaultSubtotal
:
true
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
,
Subtotal
:
"Sum"
,
Name
:
"Summarize by Sum"
}},
RowGrandTotals
:
true
,
ColGrandTotals
:
true
,
ShowDrill
:
true
,
ShowRowHeaders
:
true
,
ShowColHeaders
:
true
,
ShowLastColumn
:
true
,
}))
// Use different order of coordinate tests
assert
.
NoError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"Sheet1!$A$1:$E$31"
,
PivotTableRange
:
"Sheet1!$U$34:$O$2"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
}},
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
,
DefaultSubtotal
:
true
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
,
Subtotal
:
"Average"
,
Name
:
"Summarize by Average"
}},
RowGrandTotals
:
true
,
ColGrandTotals
:
true
,
ShowDrill
:
true
,
ShowRowHeaders
:
true
,
ShowColHeaders
:
true
,
ShowLastColumn
:
true
,
}))
assert
.
NoError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"Sheet1!$A$1:$E$31"
,
PivotTableRange
:
"Sheet1!$W$2:$AC$34"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
},
{
Data
:
"Year"
}},
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Region"
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
,
Subtotal
:
"Count"
,
Name
:
"Summarize by Count"
}},
RowGrandTotals
:
true
,
ColGrandTotals
:
true
,
ShowDrill
:
true
,
ShowRowHeaders
:
true
,
ShowColHeaders
:
true
,
ShowLastColumn
:
true
,
}))
assert
.
NoError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"Sheet1!$A$1:$E$31"
,
PivotTableRange
:
"Sheet1!$G$37:$W$50"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Region"
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Region"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
,
Subtotal
:
"CountNums"
,
Name
:
"Summarize by CountNums"
}},
RowGrandTotals
:
true
,
ColGrandTotals
:
true
,
ShowDrill
:
true
,
ShowRowHeaders
:
true
,
ShowColHeaders
:
true
,
ShowLastColumn
:
true
,
}))
assert
.
NoError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"Sheet1!$A$1:$E$31"
,
PivotTableRange
:
"Sheet1!$AE$2:$AG$33"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
},
{
Data
:
"Year"
}},
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
,
Subtotal
:
"Max"
,
Name
:
"Summarize by Max"
}},
RowGrandTotals
:
true
,
ColGrandTotals
:
true
,
ShowDrill
:
true
,
ShowRowHeaders
:
true
,
ShowColHeaders
:
true
,
ShowLastColumn
:
true
,
}))
// Create pivot table with empty subtotal field name and specified style
assert
.
NoError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"Sheet1!$A$1:$E$31"
,
PivotTableRange
:
"Sheet1!$AJ$2:$AP1$35"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Filter
:
[]
PivotTableField
{{
Data
:
"Region"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
,
DefaultSubtotal
:
true
}},
Data
:
[]
PivotTableField
{{
Subtotal
:
"Sum"
,
Name
:
"Summarize by Sum"
}},
RowGrandTotals
:
true
,
ColGrandTotals
:
true
,
ShowDrill
:
true
,
ShowRowHeaders
:
true
,
ShowColHeaders
:
true
,
ShowLastColumn
:
true
,
PivotTableStyleName
:
"PivotStyleLight19"
,
}))
f
.
NewSheet
(
"Sheet2"
)
assert
.
NoError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"Sheet1!$A$1:$E$31"
,
PivotTableRange
:
"Sheet2!$A$1:$AR$15"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Region"
},
{
Data
:
"Type"
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Region"
,
DefaultSubtotal
:
true
},
{
Data
:
"Type"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
,
Subtotal
:
"Min"
,
Name
:
"Summarize by Min"
}},
RowGrandTotals
:
true
,
ColGrandTotals
:
true
,
ShowDrill
:
true
,
ShowRowHeaders
:
true
,
ShowColHeaders
:
true
,
ShowLastColumn
:
true
,
}))
assert
.
NoError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"Sheet1!$A$1:$E$31"
,
PivotTableRange
:
"Sheet2!$A$18:$AR$54"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
},
{
Data
:
"Type"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Region"
},
{
Data
:
"Year"
}},
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Type"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Region"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
,
Subtotal
:
"Product"
,
Name
:
"Summarize by Product"
}},
RowGrandTotals
:
true
,
ColGrandTotals
:
true
,
ShowDrill
:
true
,
ShowRowHeaders
:
true
,
ShowColHeaders
:
true
,
ShowLastColumn
:
true
,
}))
// Test empty pivot table options
...
...
@@ -84,56 +142,56 @@ func TestAddPivotTable(t *testing.T) {
assert
.
EqualError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"Sheet1!$A$1:$A$1"
,
PivotTableRange
:
"Sheet1!$U$34:$O$2"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
}},
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
,
DefaultSubtotal
:
true
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
}},
}),
`parameter 'DataRange' parsing error: parameter is invalid`
)
// Test the data range of the worksheet that is not declared
assert
.
EqualError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"$A$1:$E$31"
,
PivotTableRange
:
"Sheet1!$U$34:$O$2"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
}},
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
,
DefaultSubtotal
:
true
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
}},
}),
`parameter 'DataRange' parsing error: parameter is invalid`
)
// Test the worksheet declared in the data range does not exist
assert
.
EqualError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"SheetN!$A$1:$E$31"
,
PivotTableRange
:
"Sheet1!$U$34:$O$2"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
}},
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
,
DefaultSubtotal
:
true
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
}},
}),
"sheet SheetN is not exist"
)
// Test the pivot table range of the worksheet that is not declared
assert
.
EqualError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"Sheet1!$A$1:$E$31"
,
PivotTableRange
:
"$U$34:$O$2"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
}},
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
,
DefaultSubtotal
:
true
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
}},
}),
`parameter 'PivotTableRange' parsing error: parameter is invalid`
)
// Test the worksheet declared in the pivot table range does not exist
assert
.
EqualError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"Sheet1!$A$1:$E$31"
,
PivotTableRange
:
"SheetN!$U$34:$O$2"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
}},
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
,
DefaultSubtotal
:
true
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
}},
}),
"sheet SheetN is not exist"
)
// Test not exists worksheet in data range
assert
.
EqualError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"SheetN!$A$1:$E$31"
,
PivotTableRange
:
"Sheet1!$U$34:$O$2"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
}},
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
,
DefaultSubtotal
:
true
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
}},
}),
"sheet SheetN is not exist"
)
// Test invalid row number in data range
assert
.
EqualError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"Sheet1!$A$0:$E$31"
,
PivotTableRange
:
"Sheet1!$U$34:$O$2"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
}},
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
,
DefaultSubtotal
:
true
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
}},
}),
`parameter 'DataRange' parsing error: cannot convert cell "A0" to coordinates: invalid cell name "A0"`
)
assert
.
NoError
(
t
,
f
.
SaveAs
(
filepath
.
Join
(
"test"
,
"TestAddPivotTable1.xlsx"
)))
...
...
@@ -141,8 +199,8 @@ func TestAddPivotTable(t *testing.T) {
assert
.
NoError
(
t
,
f
.
AddPivotTable
(
&
PivotTableOption
{
DataRange
:
"Sheet1!$A$1:$E$31"
,
PivotTableRange
:
"Sheet1!$G$2:$M$34"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
}},
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
,
DefaultSubtotal
:
true
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
,
Subtotal
:
"-"
,
Name
:
strings
.
Repeat
(
"s"
,
256
)}},
}))
...
...
@@ -158,8 +216,8 @@ func TestAddPivotTable(t *testing.T) {
assert
.
EqualError
(
t
,
f
.
addPivotCache
(
0
,
""
,
&
PivotTableOption
{
DataRange
:
"$A$1:$E$31"
,
PivotTableRange
:
"Sheet1!$U$34:$O$2"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
}},
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
,
DefaultSubtotal
:
true
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
}},
},
nil
),
"parameter 'DataRange' parsing error: parameter is invalid"
)
// Test add pivot table with empty options
...
...
@@ -170,8 +228,8 @@ func TestAddPivotTable(t *testing.T) {
assert
.
EqualError
(
t
,
f
.
addPivotFields
(
nil
,
&
PivotTableOption
{
DataRange
:
"$A$1:$E$31"
,
PivotTableRange
:
"Sheet1!$U$34:$O$2"
,
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
}},
Rows
:
[]
PivotTableField
{{
Data
:
"Month"
,
DefaultSubtotal
:
true
},
{
Data
:
"Year"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
,
DefaultSubtotal
:
true
}},
Data
:
[]
PivotTableField
{{
Data
:
"Sales"
}},
}),
`parameter 'DataRange' parsing error: parameter is invalid`
)
// Test get pivot fields index with empty data range
...
...
@@ -208,7 +266,7 @@ func TestAddPivotColFields(t *testing.T) {
// Test invalid data range
assert
.
EqualError
(
t
,
f
.
addPivotColFields
(
&
xlsxPivotTableDefinition
{},
&
PivotTableOption
{
DataRange
:
"Sheet1!$A$1:$A$1"
,
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
}},
Columns
:
[]
PivotTableField
{{
Data
:
"Type"
,
DefaultSubtotal
:
true
}},
}),
`parameter 'DataRange' parsing error: parameter is invalid`
)
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录