Сводная таблица

Сводная таблица - это таблица статистики, которая суммирует данные более обширной таблицы (например, из базы данных, электронной таблицы или программы бизнес-аналитики). Эта сводка может включать суммы, средние значения или другие статистические данные, которые сводная таблица группирует значимым образом.

PivotTableOptions напрямую отображает настройки формата сводной таблицы.

type PivotTableOptions struct {
    DataRange           string
    PivotTableRange     string
    Name                string
    Rows                []PivotTableField
    Columns             []PivotTableField
    Data                []PivotTableField
    Filter              []PivotTableField
    RowGrandTotals      bool
    ColGrandTotals      bool
    ShowDrill           bool
    UseAutoFormatting   bool
    PageOverThenDown    bool
    MergeItem           bool
    ClassicLayout       bool
    CompactData         bool
    ShowError           bool
    ShowRowHeaders      bool
    ShowColHeaders      bool
    ShowRowStripes      bool
    ShowColStripes      bool
    ShowLastColumn      bool
    FieldPrintTitles    bool
    ItemPrintTitles     bool
    PivotTableStyleName string
    // содержит отфильтрованные или неэкспортированные поля
}

PivotTableStyleName: Имена стилей встроенных сводных таблиц:

PivotStyleLight1 - PivotStyleLight28
PivotStyleMedium1 - PivotStyleMedium28
PivotStyleDark1 - PivotStyleDark28

PivotTableShowValuesAsType это тип вычисления для отображения значений в сводной таблице.

type PivotTableShowValuesAsType byte

PivotTableShowValuesAsType определяет перечисление типов вычислений.

const (
    PivotTableShowValuesAsNoCalculation PivotTableShowValuesAsType = iota
    PivotTableShowValuesAsPercentOfGrandTotal
    PivotTableShowValuesAsPercentOfColumnTotal
    PivotTableShowValuesAsPercentOfRowTotal
    PivotTableShowValuesAsPercentOf
    PivotTableShowValuesAsPercentOfParentRowTotal
    PivotTableShowValuesAsPercentOfParentColumnTotal
    PivotTableShowValuesAsPercentOfParentTotal
    PivotTableShowValuesAsDifferenceFrom
    PivotTableShowValuesAsPercentDifferenceFrom
    PivotTableShowValuesAsRunningTotalIn
    PivotTableShowValuesAsPercentRunningTotalIn
    PivotTableShowValuesAsRankSmallestToLargest
    PivotTableShowValuesAsRankLargestToSmallest
    PivotTableShowValuesAsIndex
)

PivotTableShowValuesAs напрямую сопоставляет настройки отображения значений сводной таблицы.

type PivotTableShowValuesAs struct {
    Type      PivotTableShowValuesAsType
    BaseField string
    BaseItem  string
}

PivotTableField непосредственно привязки параметров поля сводной таблицы.

type PivotTableField struct {
    Compact         bool
    Data            string
    Name            string
    Outline         bool
    ShowAll         bool
    InsertBlankRow  bool
    Subtotal        string
    DefaultSubtotal bool
    NumFmt          int
    SelectedItems   []string
    ShowValuesAs    PivotTableShowValuesAs
}

Subtotal указывает функцию агрегирования, которая применяется к этому полю данных. Значением по умолчанию является Sum. Возможные значения для этого атрибута:

Необязательное значение
Average
Count
CountNums
Max
Min
Product
StdDev
StdDevp
Sum
Var
Varp

Name указывает имя поля данных. В имени поля данных допускается максимум 255 символов, лишние символы будут обрезаны.

Параметр SelectedItems задает элементы, выбранные по умолчанию в поле сводной таблицы. Выбранные элементы должны быть значениями в диапазоне ячеек, на который ссылается это поле.

ShowValuesAs задаёт тип вычисления для отображения значений в полях значений сводной таблицы. Допустимые значения поля Type для ShowValuesAs:

Допустимое значение
PivotTableShowValuesAsPercentOfGrandTotal
PivotTableShowValuesAsPercentOfColumnTotal
PivotTableShowValuesAsPercentOfRowTotal
PivotTableShowValuesAsPercentOf
PivotTableShowValuesAsPercentOfParentRowTotal
PivotTableShowValuesAsPercentOfParentColumnTotal
PivotTableShowValuesAsPercentOfParentTotal
PivotTableShowValuesAsDifferenceFrom
PivotTableShowValuesAsPercentDifferenceFrom
PivotTableShowValuesAsRunningTotalIn
PivotTableShowValuesAsPercentRunningTotalIn
PivotTableShowValuesAsRankSmallestToLargest
PivotTableShowValuesAsRankLargestToSmallest
PivotTableShowValuesAsIndex

Обратите внимание, что настройки базового поля и базового элемента ShowValuesAs требуются только для некоторых типов вычислений. Типы вычислений, требующие настройки базового поля:

Типы вычислений
PivotTableShowValuesAsPercentOf
PivotTableShowValuesAsPercentOfParentTotal
PivotTableShowValuesAsDifferenceFrom
PivotTableShowValuesAsPercentDifferenceFrom
PivotTableShowValuesAsRunningTotalIn
PivotTableShowValuesAsPercentRunningTotalIn
PivotTableShowValuesAsRankSmallestToLargest
PivotTableShowValuesAsRankLargestToSmallest

Поддерживаемые типы вычислений, требующие настройки базового элемента:

Типы вычислений
PivotTableShowValuesAsPercentOf
PivotTableShowValuesAsDifferenceFrom
PivotTableShowValuesAsPercentDifferenceFrom

Создать сводную таблицу

func (f *File) AddPivotTable(opts *PivotTableOptions) error

AddPivotTable предоставляет метод для добавления сводной таблицы с помощью заданных опций сводной таблицы.

Например, создайте сводную таблицу в области Лист1!G4:M30 с регионом Лист1!A1:E31 в качестве источника данных, суммируйте по сумме продаж:

создать сводную таблицу с Excelize с помощью Go

package main

import (
    "fmt"

    "github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()
    defer func() {
        if err := f.Close(); err != nil {
            fmt.Println(err)
        }
    }()
    if err := f.SetSheetName("Sheet1", "Лист1"); err != nil {
        fmt.Println(err)
        return
    }
    // Создать некоторые данные на листе
    month := []string{"январь", "февраль", "март", "апрель", "май", "июнь",
        "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь"}
    year := []int{2017, 2018, 2019}
    types := []string{"Мясо", "Молочные продукты", "Напитки", "Продукты питания"}
    revenue := []int{3217, 4512, 3891, 4738, 3054, 4265, 3643, 4901, 3378, 4126}
    region := []string{"Восток", "Запад", "Север", "Юг"}
    if err := f.SetSheetRow(
        "Лист1", "A1", &[]string{"Месяц", "Год", "Тип", "Доход", "Регион"},
    ); err != nil {
        fmt.Println(err)
        return
    }
    for row := 2; row < 32; row++ {
        f.SetCellValue("Лист1", fmt.Sprintf("A%d", row), month[(row-2)%len(month)])
        f.SetCellValue("Лист1", fmt.Sprintf("B%d", row), year[(row-2)%len(year)])
        f.SetCellValue("Лист1", fmt.Sprintf("C%d", row), types[(row-2)%len(types)])
        f.SetCellValue("Лист1", fmt.Sprintf("D%d", row), revenue[(row-2)%len(revenue)])
        f.SetCellValue("Лист1", fmt.Sprintf("E%d", row), region[(row-2)%len(region)])
    }
    if err := f.AddPivotTable(&excelize.PivotTableOptions{
        DataRange:       "Лист1!A1:E31",
        PivotTableRange: "Лист1!G4:M30",
        Rows: []excelize.PivotTableField{
            {Data: "Месяц", DefaultSubtotal: true}, {Data: "Год"},
        },
        Filter: []excelize.PivotTableField{
            {Data: "Регион"},
        },
        Columns: []excelize.PivotTableField{
            {Data: "Тип", DefaultSubtotal: true},
        },
        Data: []excelize.PivotTableField{
            {Data: "Доход", Name: "Подведите итоги", Subtotal: "Sum"},
        },
        RowGrandTotals: true,
        ColGrandTotals: true,
        ShowDrill:      true,
        ShowRowHeaders: true,
        ShowColHeaders: true,
        ShowLastColumn: true,
    }); err != nil {
        fmt.Println(err)
        return
    }
    if err := f.SaveAs("Книга1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

Получить сводные таблицы

func (f *File) GetPivotTables(sheet string) ([]PivotTableOptions, error)

GetPivotTables возвращает все определения сводных таблиц на листе по заданному имени листа.

Удалить сводную таблицу

func (f *File) DeletePivotTable(sheet, name string) error

DeletePivotTable удалите сводную таблицу, указав имя рабочего листа и имя сводной таблицы. Обратите внимание, что эта функция не очищает значения ячеек в диапазоне сводной таблицы.

results matching ""

    No results matching ""