樞紐分析表
樞紐分析表是一種交互式的表,是計算、匯總和分析資料的強大工具,可助你瞭解資料中的對比情況、模式和趨勢。
PivotTableOptions
定義了樞紐分析表的屬性。
type PivotTableOptions struct {
DataRange string
PivotTableRange string
Rows []PivotTableField
Columns []PivotTableField
Data []PivotTableField
Filter []PivotTableField
RowGrandTotals bool
ColGrandTotals bool
ShowDrill bool
UseAutoFormatting bool
PageOverThenDown bool
MergeItem bool
CompactData bool
ShowError bool
ShowRowHeaders bool
ShowColHeaders bool
ShowRowStripes bool
ShowColStripes bool
ShowLastColumn bool
PivotTableStyleName string
// 還包含其他已過濾或未導出的欄位
}
PivotTableStyleName
: 支援的樞紐分析表樣式:
PivotStyleLight1 - PivotStyleLight28
PivotStyleMedium1 - PivotStyleMedium28
PivotStyleDark1 - PivotStyleDark28
PivotTableField 定義了樞紐分析表的欄位屬性。
type PivotTableField struct {
Compact bool
Data string
Name string
Outline bool
Subtotal string
DefaultSubtotal bool
}
Subtotal 指定適用於數值欄位的聚合函式。默認值為 Sum
。該屬性的可選值如下:
可選值 |
---|
Average |
Count |
CountNums |
Max |
Min |
Product |
StdDev |
StdDevp |
Sum |
Var |
Varp |
Name 用以指定數值欄位的名稱,最大長度為 255
個字符,超出部分的字符將不會被保留。
創建樞紐分析表
func (f *File) AddPivotTable(opts *PivotTableOptions) error
根據給定的屬性創建樞紐分析表。
例如,以 Sheet1!$G$2:$M$34
作為資料源,在 Sheet1!$A$1:$E$31
選區創建樞紐分析表,並按照銷售資料匯總加總:
package main
import (
"fmt"
"math/rand"
"github.com/xuri/excelize/v2"
)
func main() {
f := excelize.NewFile()
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
// 在工作表中添加資料
month := []string{"Jan", "Feb", "Mar", "Apr", "May",
"Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}
year := []int{2017, 2018, 2019}
types := []string{"Meat", "Dairy", "Beverages", "Produce"}
region := []string{"East", "West", "North", "South"}
f.SetSheetRow("Sheet1", "A1", &[]string{"Month", "Year", "Type", "Sales", "Region"})
for row := 2; row < 32; row++ {
f.SetCellValue("Sheet1", fmt.Sprintf("A%d", row), month[rand.Intn(12)])
f.SetCellValue("Sheet1", fmt.Sprintf("B%d", row), year[rand.Intn(3)])
f.SetCellValue("Sheet1", fmt.Sprintf("C%d", row), types[rand.Intn(4)])
f.SetCellValue("Sheet1", fmt.Sprintf("D%d", row), rand.Intn(5000))
f.SetCellValue("Sheet1", fmt.Sprintf("E%d", row), region[rand.Intn(4)])
}
if err := f.AddPivotTable(&excelize.PivotTableOptions{
DataRange: "Sheet1!A1:E31",
PivotTableRange: "Sheet1!G2:M34",
Rows: []excelize.PivotTableField{
{Data: "Month", DefaultSubtotal: true}, {Data: "Year"}},
Filter: []excelize.PivotTableField{
{Data: "Region"}},
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)
return
}
if err := f.SaveAs("Book1.xlsx"); err != nil {
fmt.Println(err)
}
}
獲取樞紐分析表
func (f *File) GetPivotTables(sheet string) ([]PivotTableOptions, error)
根據給定的工作表名稱返回該工作表中的全部樞紐分析表屬性。
刪除樞紐分析表
func (f *File) DeletePivotTable(sheet, name string) error
根據給定的工作表名稱和樞紐分析表名稱刪除指定樞紐分析表。請注意,該函數不會清除樞紐分析表區域內存儲格的值。