Сводная таблица
Сводная таблица - это таблица статистики, которая суммирует данные более обширной таблицы (например, из базы данных, электронной таблицы или программы бизнес-аналитики). Эта сводка может включать суммы, средние значения или другие статистические данные, которые сводная таблица группирует значимым образом.
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
AddPivotTable предоставляет метод для добавления сводной таблицы с помощью заданных опций сводной таблицы.
Например, создайте сводную таблицу в области 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)
GetPivotTables возвращает все определения сводных таблиц на листе по заданному имени листа.
Удалить сводную таблицу
func (f *File) DeletePivotTable(sheet, name string) error
DeletePivotTable удалите сводную таблицу, указав имя рабочего листа и имя сводной таблицы. Обратите внимание, что эта функция не очищает значения ячеек в диапазоне сводной таблицы.