2019-09-20 00:20:30 +08:00
package excelize
import (
"fmt"
"math/rand"
"path/filepath"
2020-02-21 23:07:43 +08:00
"strings"
2019-09-20 00:20:30 +08:00
"testing"
"github.com/stretchr/testify/assert"
)
2023-09-08 00:09:41 +08:00
func TestPivotTable ( t * testing . T ) {
2019-09-20 00:20:30 +08:00
f := NewFile ( )
// Create some data in a sheet
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" }
2019-12-24 01:09:28 +08:00
assert . NoError ( t , f . SetSheetRow ( "Sheet1" , "A1" , & [ ] string { "Month" , "Year" , "Type" , "Sales" , "Region" } ) )
2022-05-26 00:15:28 +08:00
for row := 2 ; row < 32 ; row ++ {
assert . NoError ( t , f . SetCellValue ( "Sheet1" , fmt . Sprintf ( "A%d" , row ) , month [ rand . Intn ( 12 ) ] ) )
assert . NoError ( t , f . SetCellValue ( "Sheet1" , fmt . Sprintf ( "B%d" , row ) , year [ rand . Intn ( 3 ) ] ) )
assert . NoError ( t , f . SetCellValue ( "Sheet1" , fmt . Sprintf ( "C%d" , row ) , types [ rand . Intn ( 4 ) ] ) )
assert . NoError ( t , f . SetCellValue ( "Sheet1" , fmt . Sprintf ( "D%d" , row ) , rand . Intn ( 5000 ) ) )
assert . NoError ( t , f . SetCellValue ( "Sheet1" , fmt . Sprintf ( "E%d" , row ) , region [ rand . Intn ( 4 ) ] ) )
2019-09-20 00:20:30 +08:00
}
2023-09-08 00:09:41 +08:00
expected := & PivotTableOptions {
2023-09-27 00:05:59 +08:00
pivotTableXML : "xl/pivotTables/pivotTable1.xml" ,
pivotCacheXML : "xl/pivotCache/pivotCacheDefinition1.xml" ,
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:E31" ,
PivotTableRange : "Sheet1!G2:M34" ,
Name : "PivotTable1" ,
2024-09-01 12:10:01 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , ShowAll : true , DefaultSubtotal : true } , { Data : "Year" } } ,
2023-09-08 00:09:41 +08:00
Filter : [ ] PivotTableField { { Data : "Region" } } ,
2024-09-01 12:10:01 +08:00
Columns : [ ] PivotTableField { { Data : "Type" , ShowAll : true , InsertBlankRow : true , DefaultSubtotal : true } } ,
2024-08-18 00:18:02 +08:00
Data : [ ] PivotTableField { { Data : "Sales" , Subtotal : "Sum" , Name : "Summarize by Sum" , NumFmt : 38 } } ,
2023-09-08 00:09:41 +08:00
RowGrandTotals : true ,
ColGrandTotals : true ,
ShowDrill : true ,
2024-09-21 15:39:36 +08:00
ClassicLayout : true ,
ShowError : true ,
2023-09-08 00:09:41 +08:00
ShowRowHeaders : true ,
ShowColHeaders : true ,
ShowLastColumn : true ,
2024-09-01 12:10:01 +08:00
FieldPrintTitles : true ,
2024-09-21 15:39:36 +08:00
ItemPrintTitles : true ,
2023-09-08 00:09:41 +08:00
PivotTableStyleName : "PivotStyleLight16" ,
}
assert . NoError ( t , f . AddPivotTable ( expected ) )
// Test get pivot table
pivotTables , err := f . GetPivotTables ( "Sheet1" )
assert . NoError ( t , err )
assert . Len ( t , pivotTables , 1 )
assert . Equal ( t , * expected , pivotTables [ 0 ] )
2019-09-20 00:20:30 +08:00
// Use different order of coordinate tests
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes:
Motivation and Context
When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was:
- There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure.
- Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories
- Nested properties cannot proceed modify easily
Introduce 5 new export data types:
`HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions`
Rename 4 exported data types:
- Rename `PivotTableOption` to `PivotTableOptions`
- Rename `FormatHeaderFooter` to `HeaderFooterOptions`
- Rename `FormatSheetProtection` to `SheetProtectionOptions`
- Rename `SparklineOption` to `SparklineOptions`
Remove 54 exported types:
`AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale`
Remove 2 exported constants:
`OrientationPortrait` and `OrientationLandscape`
Change 8 functions:
- Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error`
- Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)`
- Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error`
- Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)`
- Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error`
- Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)`
- Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error`
- Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)`
Introduce new function to instead of existing functions:
- New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
2022-09-29 22:00:21 +08:00
assert . NoError ( t , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:E31" ,
PivotTableRange : "Sheet1!U34:O2" ,
2020-09-15 23:31:24 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } , { Data : "Year" } } ,
Columns : [ ] PivotTableField { { Data : "Type" , DefaultSubtotal : true } } ,
2020-02-26 18:53:50 +08:00
Data : [ ] PivotTableField { { Data : "Sales" , Subtotal : "Average" , Name : "Summarize by Average" } } ,
2020-09-15 23:31:24 +08:00
RowGrandTotals : true ,
ColGrandTotals : true ,
ShowDrill : true ,
ShowRowHeaders : true ,
ShowColHeaders : true ,
ShowLastColumn : true ,
2019-09-20 00:20:30 +08:00
} ) )
2023-09-08 00:09:41 +08:00
// Test get pivot table with default style name
pivotTables , err = f . GetPivotTables ( "Sheet1" )
assert . NoError ( t , err )
assert . Len ( t , pivotTables , 2 )
assert . Equal ( t , "PivotStyleLight16" , pivotTables [ 1 ] . PivotTableStyleName )
2019-09-20 00:20:30 +08:00
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes:
Motivation and Context
When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was:
- There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure.
- Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories
- Nested properties cannot proceed modify easily
Introduce 5 new export data types:
`HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions`
Rename 4 exported data types:
- Rename `PivotTableOption` to `PivotTableOptions`
- Rename `FormatHeaderFooter` to `HeaderFooterOptions`
- Rename `FormatSheetProtection` to `SheetProtectionOptions`
- Rename `SparklineOption` to `SparklineOptions`
Remove 54 exported types:
`AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale`
Remove 2 exported constants:
`OrientationPortrait` and `OrientationLandscape`
Change 8 functions:
- Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error`
- Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)`
- Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error`
- Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)`
- Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error`
- Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)`
- Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error`
- Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)`
Introduce new function to instead of existing functions:
- New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
2022-09-29 22:00:21 +08:00
assert . NoError ( t , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:E31" ,
PivotTableRange : "Sheet1!W2:AC34" ,
2020-09-15 23:31:24 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } , { Data : "Year" } } ,
2020-02-26 18:53:50 +08:00
Columns : [ ] PivotTableField { { Data : "Region" } } ,
Data : [ ] PivotTableField { { Data : "Sales" , Subtotal : "Count" , Name : "Summarize by Count" } } ,
2020-09-15 23:31:24 +08:00
RowGrandTotals : true ,
ColGrandTotals : true ,
ShowDrill : true ,
ShowRowHeaders : true ,
ShowColHeaders : true ,
ShowLastColumn : true ,
2019-09-20 00:20:30 +08:00
} ) )
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes:
Motivation and Context
When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was:
- There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure.
- Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories
- Nested properties cannot proceed modify easily
Introduce 5 new export data types:
`HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions`
Rename 4 exported data types:
- Rename `PivotTableOption` to `PivotTableOptions`
- Rename `FormatHeaderFooter` to `HeaderFooterOptions`
- Rename `FormatSheetProtection` to `SheetProtectionOptions`
- Rename `SparklineOption` to `SparklineOptions`
Remove 54 exported types:
`AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale`
Remove 2 exported constants:
`OrientationPortrait` and `OrientationLandscape`
Change 8 functions:
- Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error`
- Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)`
- Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error`
- Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)`
- Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error`
- Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)`
- Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error`
- Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)`
Introduce new function to instead of existing functions:
- New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
2022-09-29 22:00:21 +08:00
assert . NoError ( t , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:E31" ,
PivotTableRange : "Sheet1!G42:W55" ,
2020-02-26 18:53:50 +08:00
Rows : [ ] PivotTableField { { Data : "Month" } } ,
2020-09-15 23:31:24 +08:00
Columns : [ ] PivotTableField { { Data : "Region" , DefaultSubtotal : true } , { Data : "Year" } } ,
2020-02-26 18:53:50 +08:00
Data : [ ] PivotTableField { { Data : "Sales" , Subtotal : "CountNums" , Name : "Summarize by CountNums" } } ,
2020-09-15 23:31:24 +08:00
RowGrandTotals : true ,
ColGrandTotals : true ,
ShowDrill : true ,
ShowRowHeaders : true ,
ShowColHeaders : true ,
ShowLastColumn : true ,
2019-09-20 00:20:30 +08:00
} ) )
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes:
Motivation and Context
When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was:
- There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure.
- Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories
- Nested properties cannot proceed modify easily
Introduce 5 new export data types:
`HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions`
Rename 4 exported data types:
- Rename `PivotTableOption` to `PivotTableOptions`
- Rename `FormatHeaderFooter` to `HeaderFooterOptions`
- Rename `FormatSheetProtection` to `SheetProtectionOptions`
- Rename `SparklineOption` to `SparklineOptions`
Remove 54 exported types:
`AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale`
Remove 2 exported constants:
`OrientationPortrait` and `OrientationLandscape`
Change 8 functions:
- Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error`
- Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)`
- Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error`
- Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)`
- Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error`
- Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)`
- Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error`
- Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)`
Introduce new function to instead of existing functions:
- New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
2022-09-29 22:00:21 +08:00
assert . NoError ( t , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:E31" ,
PivotTableRange : "Sheet1!AE2:AG33" ,
2020-09-15 23:31:24 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } , { Data : "Year" } } ,
2020-09-27 13:34:39 +08:00
Data : [ ] PivotTableField { { Data : "Sales" , Subtotal : "Max" , Name : "Summarize by Max" } , { Data : "Sales" , Subtotal : "Average" , Name : "Average of Sales" } } ,
2020-09-15 23:31:24 +08:00
RowGrandTotals : true ,
ColGrandTotals : true ,
ShowDrill : true ,
ShowRowHeaders : true ,
ShowColHeaders : true ,
ShowLastColumn : true ,
} ) )
// Create pivot table with empty subtotal field name and specified style
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes:
Motivation and Context
When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was:
- There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure.
- Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories
- Nested properties cannot proceed modify easily
Introduce 5 new export data types:
`HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions`
Rename 4 exported data types:
- Rename `PivotTableOption` to `PivotTableOptions`
- Rename `FormatHeaderFooter` to `HeaderFooterOptions`
- Rename `FormatSheetProtection` to `SheetProtectionOptions`
- Rename `SparklineOption` to `SparklineOptions`
Remove 54 exported types:
`AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale`
Remove 2 exported constants:
`OrientationPortrait` and `OrientationLandscape`
Change 8 functions:
- Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error`
- Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)`
- Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error`
- Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)`
- Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error`
- Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)`
- Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error`
- Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)`
Introduce new function to instead of existing functions:
- New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
2022-09-29 22:00:21 +08:00
assert . NoError ( t , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:E31" ,
PivotTableRange : "Sheet1!AJ2:AP135" ,
2020-09-15 23:31:24 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } , { Data : "Year" } } ,
Filter : [ ] PivotTableField { { Data : "Region" } } ,
2020-09-27 13:34:39 +08:00
Columns : [ ] PivotTableField { } ,
2020-09-15 23:31:24 +08:00
Data : [ ] PivotTableField { { Subtotal : "Sum" , Name : "Summarize by Sum" } } ,
RowGrandTotals : true ,
ColGrandTotals : true ,
ShowDrill : true ,
ShowRowHeaders : true ,
ShowColHeaders : true ,
ShowLastColumn : true ,
PivotTableStyleName : "PivotStyleLight19" ,
2019-10-24 23:18:02 +08:00
} ) )
2023-09-08 00:09:41 +08:00
_ , err = f . NewSheet ( "Sheet2" )
Breaking change: changed the function signature for 11 exported functions
* Change
`func (f *File) NewConditionalStyle(style string) (int, error)`
to
`func (f *File) NewConditionalStyle(style *Style) (int, error)`
* Change
`func (f *File) NewStyle(style interface{}) (int, error)`
to
`func (f *File) NewStyle(style *Style) (int, error)`
* Change
`func (f *File) AddChart(sheet, cell, opts string, combo ...string) error`
to
`func (f *File) AddChart(sheet, cell string, chart *ChartOptions, combo ...*ChartOptions) error`
* Change
`func (f *File) AddChartSheet(sheet, opts string, combo ...string) error`
to
`func (f *File) AddChartSheet(sheet string, chart *ChartOptions, combo ...*ChartOptions) error`
* Change
`func (f *File) AddShape(sheet, cell, opts string) error`
to
`func (f *File) AddShape(sheet, cell string, opts *Shape) error`
* Change
`func (f *File) AddPictureFromBytes(sheet, cell, opts, name, extension string, file []byte) error`
to
`func (f *File) AddPictureFromBytes(sheet, cell, name, extension string, file []byte, opts *PictureOptions) error`
* Change
`func (f *File) AddTable(sheet, hCell, vCell, opts string) error`
to
`func (f *File) AddTable(sheet, reference string, opts *TableOptions) error`
* Change
`func (sw *StreamWriter) AddTable(hCell, vCell, opts string) error`
to
`func (sw *StreamWriter) AddTable(reference string, opts *TableOptions) error`
* Change
`func (f *File) AutoFilter(sheet, hCell, vCell, opts string) error`
to
`func (f *File) AutoFilter(sheet, reference string, opts *AutoFilterOptions) error`
* Change
`func (f *File) SetPanes(sheet, panes string) error`
to
`func (f *File) SetPanes(sheet string, panes *Panes) error`
* Change
`func (sw *StreamWriter) AddTable(hCell, vCell, opts string) error`
to
`func (sw *StreamWriter) AddTable(reference string, opts *TableOptions) error`
* Change
`func (f *File) SetConditionalFormat(sheet, reference, opts string) error`
to
`func (f *File) SetConditionalFormat(sheet, reference string, opts []ConditionalFormatOptions) error`
* Add exported types:
* AutoFilterListOptions
* AutoFilterOptions
* Chart
* ChartAxis
* ChartDimension
* ChartLegend
* ChartLine
* ChartMarker
* ChartPlotArea
* ChartSeries
* ChartTitle
* ConditionalFormatOptions
* PaneOptions
* Panes
* PictureOptions
* Shape
* ShapeColor
* ShapeLine
* ShapeParagraph
* TableOptions
* This added support for set sheet visible as very hidden
* Return error when missing required parameters for set defined name
* Update unit test and comments
2022-12-30 00:50:08 +08:00
assert . NoError ( t , err )
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes:
Motivation and Context
When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was:
- There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure.
- Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories
- Nested properties cannot proceed modify easily
Introduce 5 new export data types:
`HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions`
Rename 4 exported data types:
- Rename `PivotTableOption` to `PivotTableOptions`
- Rename `FormatHeaderFooter` to `HeaderFooterOptions`
- Rename `FormatSheetProtection` to `SheetProtectionOptions`
- Rename `SparklineOption` to `SparklineOptions`
Remove 54 exported types:
`AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale`
Remove 2 exported constants:
`OrientationPortrait` and `OrientationLandscape`
Change 8 functions:
- Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error`
- Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)`
- Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error`
- Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)`
- Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error`
- Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)`
- Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error`
- Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)`
Introduce new function to instead of existing functions:
- New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
2022-09-29 22:00:21 +08:00
assert . NoError ( t , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:E31" ,
PivotTableRange : "Sheet2!A1:AN17" ,
2020-02-26 18:53:50 +08:00
Rows : [ ] PivotTableField { { Data : "Month" } } ,
2020-09-15 23:31:24 +08:00
Columns : [ ] PivotTableField { { Data : "Region" , DefaultSubtotal : true } , { Data : "Type" , DefaultSubtotal : true } , { Data : "Year" } } ,
2024-08-18 00:18:02 +08:00
Data : [ ] PivotTableField { { Data : "Sales" , Subtotal : "Min" , Name : "Summarize by Min" , NumFmt : 32 } } ,
2020-09-15 23:31:24 +08:00
RowGrandTotals : true ,
ColGrandTotals : true ,
ShowDrill : true ,
ShowRowHeaders : true ,
ShowColHeaders : true ,
ShowLastColumn : true ,
2019-09-20 00:20:30 +08:00
} ) )
2024-07-06 09:25:09 +08:00
// Test get pivot table with across worksheet data range
pivotTables , err = f . GetPivotTables ( "Sheet2" )
assert . NoError ( t , err )
assert . Len ( t , pivotTables , 1 )
assert . Equal ( t , "Sheet1!A1:E31" , pivotTables [ 0 ] . DataRange )
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes:
Motivation and Context
When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was:
- There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure.
- Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories
- Nested properties cannot proceed modify easily
Introduce 5 new export data types:
`HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions`
Rename 4 exported data types:
- Rename `PivotTableOption` to `PivotTableOptions`
- Rename `FormatHeaderFooter` to `HeaderFooterOptions`
- Rename `FormatSheetProtection` to `SheetProtectionOptions`
- Rename `SparklineOption` to `SparklineOptions`
Remove 54 exported types:
`AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale`
Remove 2 exported constants:
`OrientationPortrait` and `OrientationLandscape`
Change 8 functions:
- Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error`
- Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)`
- Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error`
- Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)`
- Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error`
- Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)`
- Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error`
- Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)`
Introduce new function to instead of existing functions:
- New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
2022-09-29 22:00:21 +08:00
assert . NoError ( t , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:E31" ,
PivotTableRange : "Sheet2!A20:AR60" ,
2020-09-15 23:31:24 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } , { Data : "Type" } } ,
Columns : [ ] PivotTableField { { Data : "Region" , DefaultSubtotal : true } , { Data : "Year" } } ,
2024-08-18 00:18:02 +08:00
Data : [ ] PivotTableField { { Data : "Sales" , Subtotal : "Product" , Name : "Summarize by Product" , NumFmt : 32 } } ,
2020-09-15 23:31:24 +08:00
RowGrandTotals : true ,
ColGrandTotals : true ,
ShowDrill : true ,
ShowRowHeaders : true ,
ShowColHeaders : true ,
ShowLastColumn : true ,
2019-09-20 00:20:30 +08:00
} ) )
2021-06-29 22:26:55 +08:00
// Create pivot table with many data, many rows, many cols and defined name
2021-07-05 00:03:56 +08:00
assert . NoError ( t , f . SetDefinedName ( & DefinedName {
2021-06-29 22:26:55 +08:00
Name : "dataRange" ,
2023-09-08 00:09:41 +08:00
RefersTo : "Sheet1!A1:E31" ,
2021-06-29 22:26:55 +08:00
Comment : "Pivot Table Data Range" ,
Scope : "Sheet2" ,
2021-07-05 00:03:56 +08:00
} ) )
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes:
Motivation and Context
When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was:
- There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure.
- Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories
- Nested properties cannot proceed modify easily
Introduce 5 new export data types:
`HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions`
Rename 4 exported data types:
- Rename `PivotTableOption` to `PivotTableOptions`
- Rename `FormatHeaderFooter` to `HeaderFooterOptions`
- Rename `FormatSheetProtection` to `SheetProtectionOptions`
- Rename `SparklineOption` to `SparklineOptions`
Remove 54 exported types:
`AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale`
Remove 2 exported constants:
`OrientationPortrait` and `OrientationLandscape`
Change 8 functions:
- Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error`
- Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)`
- Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error`
- Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)`
- Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error`
- Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)`
- Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error`
- Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)`
Introduce new function to instead of existing functions:
- New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
2022-09-29 22:00:21 +08:00
assert . NoError ( t , f . AddPivotTable ( & PivotTableOptions {
2021-06-29 22:26:55 +08:00
DataRange : "dataRange" ,
2023-09-08 00:09:41 +08:00
PivotTableRange : "Sheet2!A65:AJ100" ,
2020-10-01 00:20:11 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } , { Data : "Year" } } ,
Columns : [ ] PivotTableField { { Data : "Region" , DefaultSubtotal : true } , { Data : "Type" } } ,
2024-08-18 00:18:02 +08:00
Data : [ ] PivotTableField { { Data : "Sales" , Subtotal : "Sum" , Name : "Sum of Sales" , NumFmt : - 1 } , { Data : "Sales" , Subtotal : "Average" , Name : "Average of Sales" , NumFmt : 38 } } ,
2020-10-01 00:20:11 +08:00
RowGrandTotals : true ,
ColGrandTotals : true ,
ShowDrill : true ,
ShowRowHeaders : true ,
ShowColHeaders : true ,
ShowLastColumn : true ,
} ) )
2019-09-20 00:20:30 +08:00
// Test empty pivot table options
2023-11-11 00:04:05 +08:00
assert . Equal ( t , ErrParameterRequired , f . AddPivotTable ( nil ) )
2023-09-08 00:09:41 +08:00
// Test add pivot table with custom name which exceeds the max characters limit
assert . Equal ( t , ErrNameLength , f . AddPivotTable ( & PivotTableOptions {
DataRange : "dataRange" ,
PivotTableRange : "Sheet2!A65:AJ100" ,
Name : strings . Repeat ( "c" , MaxFieldLength + 1 ) ,
} ) )
2019-09-20 00:20:30 +08:00
// Test invalid data range
2023-09-28 08:53:54 +08:00
assert . Equal ( t , newPivotTableDataRangeError ( "parameter is invalid" ) , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:A1" ,
PivotTableRange : "Sheet1!U34:O2" ,
2020-09-15 23:31:24 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } , { Data : "Year" } } ,
Columns : [ ] PivotTableField { { Data : "Type" , DefaultSubtotal : true } } ,
2020-02-26 18:53:50 +08:00
Data : [ ] PivotTableField { { Data : "Sales" } } ,
2023-09-28 08:53:54 +08:00
} ) )
2019-09-20 00:20:30 +08:00
// Test the data range of the worksheet that is not declared
2023-09-28 08:53:54 +08:00
assert . Equal ( t , newPivotTableDataRangeError ( "parameter is invalid" ) , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "A1:E31" ,
PivotTableRange : "Sheet1!U34:O2" ,
2020-09-15 23:31:24 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } , { Data : "Year" } } ,
Columns : [ ] PivotTableField { { Data : "Type" , DefaultSubtotal : true } } ,
2020-02-26 18:53:50 +08:00
Data : [ ] PivotTableField { { Data : "Sales" } } ,
2023-09-28 08:53:54 +08:00
} ) )
2019-09-20 00:20:30 +08:00
// Test the worksheet declared in the data range does not exist
2023-09-28 08:53:54 +08:00
assert . Equal ( t , ErrSheetNotExist { "SheetN" } , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "SheetN!A1:E31" ,
PivotTableRange : "Sheet1!U34:O2" ,
2020-09-15 23:31:24 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } , { Data : "Year" } } ,
Columns : [ ] PivotTableField { { Data : "Type" , DefaultSubtotal : true } } ,
2020-02-26 18:53:50 +08:00
Data : [ ] PivotTableField { { Data : "Sales" } } ,
2023-09-28 08:53:54 +08:00
} ) )
2019-09-20 00:20:30 +08:00
// Test the pivot table range of the worksheet that is not declared
2023-09-28 08:53:54 +08:00
assert . Equal ( t , newPivotTableRangeError ( "parameter is invalid" ) , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:E31" ,
PivotTableRange : "U34:O2" ,
2020-09-15 23:31:24 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } , { Data : "Year" } } ,
Columns : [ ] PivotTableField { { Data : "Type" , DefaultSubtotal : true } } ,
2020-02-26 18:53:50 +08:00
Data : [ ] PivotTableField { { Data : "Sales" } } ,
2023-09-28 08:53:54 +08:00
} ) )
2019-09-20 00:20:30 +08:00
// Test the worksheet declared in the pivot table range does not exist
2023-09-28 08:53:54 +08:00
assert . Equal ( t , ErrSheetNotExist { "SheetN" } , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:E31" ,
PivotTableRange : "SheetN!U34:O2" ,
2020-09-15 23:31:24 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } , { Data : "Year" } } ,
Columns : [ ] PivotTableField { { Data : "Type" , DefaultSubtotal : true } } ,
2020-02-26 18:53:50 +08:00
Data : [ ] PivotTableField { { Data : "Sales" } } ,
2023-09-28 08:53:54 +08:00
} ) )
2019-09-20 00:20:30 +08:00
// Test not exists worksheet in data range
2023-09-28 08:53:54 +08:00
assert . Equal ( t , ErrSheetNotExist { "SheetN" } , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "SheetN!A1:E31" ,
PivotTableRange : "Sheet1!U34:O2" ,
2020-09-15 23:31:24 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } , { Data : "Year" } } ,
Columns : [ ] PivotTableField { { Data : "Type" , DefaultSubtotal : true } } ,
2020-02-26 18:53:50 +08:00
Data : [ ] PivotTableField { { Data : "Sales" } } ,
2023-09-28 08:53:54 +08:00
} ) )
2019-09-20 00:20:30 +08:00
// Test invalid row number in data range
2023-09-28 08:53:54 +08:00
assert . Equal ( t , newPivotTableDataRangeError ( newCellNameToCoordinatesError ( "A0" , newInvalidCellNameError ( "A0" ) ) . Error ( ) ) , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A0:E31" ,
PivotTableRange : "Sheet1!U34:O2" ,
2020-09-15 23:31:24 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } , { Data : "Year" } } ,
Columns : [ ] PivotTableField { { Data : "Type" , DefaultSubtotal : true } } ,
2020-02-26 18:53:50 +08:00
Data : [ ] PivotTableField { { Data : "Sales" } } ,
2023-09-28 08:53:54 +08:00
} ) )
2019-09-20 00:20:30 +08:00
assert . NoError ( t , f . SaveAs ( filepath . Join ( "test" , "TestAddPivotTable1.xlsx" ) ) )
2020-02-21 23:07:43 +08:00
// Test with field names that exceed the length limit and invalid subtotal
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes:
Motivation and Context
When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was:
- There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure.
- Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories
- Nested properties cannot proceed modify easily
Introduce 5 new export data types:
`HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions`
Rename 4 exported data types:
- Rename `PivotTableOption` to `PivotTableOptions`
- Rename `FormatHeaderFooter` to `HeaderFooterOptions`
- Rename `FormatSheetProtection` to `SheetProtectionOptions`
- Rename `SparklineOption` to `SparklineOptions`
Remove 54 exported types:
`AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale`
Remove 2 exported constants:
`OrientationPortrait` and `OrientationLandscape`
Change 8 functions:
- Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error`
- Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)`
- Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error`
- Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)`
- Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error`
- Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)`
- Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error`
- Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)`
Introduce new function to instead of existing functions:
- New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
2022-09-29 22:00:21 +08:00
assert . NoError ( t , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:E31" ,
PivotTableRange : "Sheet1!G2:M34" ,
2020-09-15 23:31:24 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } , { Data : "Year" } } ,
Columns : [ ] PivotTableField { { Data : "Type" , DefaultSubtotal : true } } ,
2022-01-08 10:32:13 +08:00
Data : [ ] PivotTableField { { Data : "Sales" , Subtotal : "-" , Name : strings . Repeat ( "s" , MaxFieldLength + 1 ) } } ,
2020-02-21 23:07:43 +08:00
} ) )
2023-10-03 00:59:31 +08:00
// Test delete pivot table
pivotTables , err = f . GetPivotTables ( "Sheet1" )
assert . Len ( t , pivotTables , 7 )
assert . NoError ( t , err )
assert . NoError ( t , f . DeletePivotTable ( "Sheet1" , "PivotTable1" ) )
pivotTables , err = f . GetPivotTables ( "Sheet1" )
assert . Len ( t , pivotTables , 6 )
assert . NoError ( t , err )
2019-09-20 00:20:30 +08:00
This closes #1425, breaking changes for sheet name (#1426)
- Checking and return error for invalid sheet name instead of trim invalid characters
- Add error return for the 4 functions: `DeleteSheet`, `GetSheetIndex`, `GetSheetVisible` and `SetSheetName`
- Export new error 4 constants: `ErrSheetNameBlank`, `ErrSheetNameInvalid`, `ErrSheetNameLength` and `ErrSheetNameSingleQuote`
- Rename exported error constant `ErrExistsWorksheet` to `ErrExistsSheet`
- Update unit tests for 90 functions: `AddChart`, `AddChartSheet`, `AddComment`, `AddDataValidation`, `AddPicture`, `AddPictureFromBytes`, `AddPivotTable`, `AddShape`, `AddSparkline`, `AddTable`, `AutoFilter`, `CalcCellValue`, `Cols`, `DeleteChart`, `DeleteComment`, `DeleteDataValidation`, `DeletePicture`, `DeleteSheet`, `DuplicateRow`, `DuplicateRowTo`, `GetCellFormula`, `GetCellHyperLink`, `GetCellRichText`, `GetCellStyle`, `GetCellType`, `GetCellValue`, `GetColOutlineLevel`, `GetCols`, `GetColStyle`, `GetColVisible`, `GetColWidth`, `GetConditionalFormats`, `GetDataValidations`, `GetMergeCells`, `GetPageLayout`, `GetPageMargins`, `GetPicture`, `GetRowHeight`, `GetRowOutlineLevel`, `GetRows`, `GetRowVisible`, `GetSheetIndex`, `GetSheetProps`, `GetSheetVisible`, `GroupSheets`, `InsertCol`, `InsertPageBreak`, `InsertRows`, `MergeCell`, `NewSheet`, `NewStreamWriter`, `ProtectSheet`, `RemoveCol`, `RemovePageBreak`, `RemoveRow`, `Rows`, `SearchSheet`, `SetCellBool`, `SetCellDefault`, `SetCellFloat`, `SetCellFormula`, `SetCellHyperLink`, `SetCellInt`, `SetCellRichText`, `SetCellStr`, `SetCellStyle`, `SetCellValue`, `SetColOutlineLevel`, `SetColStyle`, `SetColVisible`, `SetColWidth`, `SetConditionalFormat`, `SetHeaderFooter`, `SetPageLayout`, `SetPageMargins`, `SetPanes`, `SetRowHeight`, `SetRowOutlineLevel`, `SetRowStyle`, `SetRowVisible`, `SetSheetBackground`, `SetSheetBackgroundFromBytes`, `SetSheetCol`, `SetSheetName`, `SetSheetProps`, `SetSheetRow`, `SetSheetVisible`, `UnmergeCell`, `UnprotectSheet` and
`UnsetConditionalFormat`
- Update documentation of the set style functions
Co-authored-by: guoweikuang <weikuang.guo@shopee.com>
2022-12-23 00:54:40 +08:00
// Test add pivot table with invalid sheet name
2024-09-21 15:39:36 +08:00
assert . Error ( t , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet:1!A1:E31" ,
PivotTableRange : "Sheet:1!G2:M34" ,
This closes #1425, breaking changes for sheet name (#1426)
- Checking and return error for invalid sheet name instead of trim invalid characters
- Add error return for the 4 functions: `DeleteSheet`, `GetSheetIndex`, `GetSheetVisible` and `SetSheetName`
- Export new error 4 constants: `ErrSheetNameBlank`, `ErrSheetNameInvalid`, `ErrSheetNameLength` and `ErrSheetNameSingleQuote`
- Rename exported error constant `ErrExistsWorksheet` to `ErrExistsSheet`
- Update unit tests for 90 functions: `AddChart`, `AddChartSheet`, `AddComment`, `AddDataValidation`, `AddPicture`, `AddPictureFromBytes`, `AddPivotTable`, `AddShape`, `AddSparkline`, `AddTable`, `AutoFilter`, `CalcCellValue`, `Cols`, `DeleteChart`, `DeleteComment`, `DeleteDataValidation`, `DeletePicture`, `DeleteSheet`, `DuplicateRow`, `DuplicateRowTo`, `GetCellFormula`, `GetCellHyperLink`, `GetCellRichText`, `GetCellStyle`, `GetCellType`, `GetCellValue`, `GetColOutlineLevel`, `GetCols`, `GetColStyle`, `GetColVisible`, `GetColWidth`, `GetConditionalFormats`, `GetDataValidations`, `GetMergeCells`, `GetPageLayout`, `GetPageMargins`, `GetPicture`, `GetRowHeight`, `GetRowOutlineLevel`, `GetRows`, `GetRowVisible`, `GetSheetIndex`, `GetSheetProps`, `GetSheetVisible`, `GroupSheets`, `InsertCol`, `InsertPageBreak`, `InsertRows`, `MergeCell`, `NewSheet`, `NewStreamWriter`, `ProtectSheet`, `RemoveCol`, `RemovePageBreak`, `RemoveRow`, `Rows`, `SearchSheet`, `SetCellBool`, `SetCellDefault`, `SetCellFloat`, `SetCellFormula`, `SetCellHyperLink`, `SetCellInt`, `SetCellRichText`, `SetCellStr`, `SetCellStyle`, `SetCellValue`, `SetColOutlineLevel`, `SetColStyle`, `SetColVisible`, `SetColWidth`, `SetConditionalFormat`, `SetHeaderFooter`, `SetPageLayout`, `SetPageMargins`, `SetPanes`, `SetRowHeight`, `SetRowOutlineLevel`, `SetRowStyle`, `SetRowVisible`, `SetSheetBackground`, `SetSheetBackgroundFromBytes`, `SetSheetCol`, `SetSheetName`, `SetSheetProps`, `SetSheetRow`, `SetSheetVisible`, `UnmergeCell`, `UnprotectSheet` and
`UnsetConditionalFormat`
- Update documentation of the set style functions
Co-authored-by: guoweikuang <weikuang.guo@shopee.com>
2022-12-23 00:54:40 +08:00
Rows : [ ] PivotTableField { { Data : "Year" } } ,
2024-09-21 15:39:36 +08:00
} ) , ErrSheetNameInvalid )
// Test add pivot table with enable ClassicLayout and CompactData in the same time
assert . Error ( t , f . AddPivotTable ( & PivotTableOptions {
DataRange : "Sheet1!A1:E31" ,
PivotTableRange : "Sheet1!G2:M34" ,
CompactData : true ,
ClassicLayout : true ,
} ) , ErrPivotTableClassicLayout )
2023-10-03 00:59:31 +08:00
// Test delete pivot table with not exists worksheet
assert . EqualError ( t , f . DeletePivotTable ( "SheetN" , "PivotTable1" ) , "sheet SheetN does not exist" )
// Test delete pivot table with not exists pivot table name
assert . EqualError ( t , f . DeletePivotTable ( "Sheet1" , "PivotTableN" ) , "table PivotTableN does not exist" )
2019-09-20 00:20:30 +08:00
// Test adjust range with invalid range
Breaking change: changed the function signature for 11 exported functions
* Change
`func (f *File) NewConditionalStyle(style string) (int, error)`
to
`func (f *File) NewConditionalStyle(style *Style) (int, error)`
* Change
`func (f *File) NewStyle(style interface{}) (int, error)`
to
`func (f *File) NewStyle(style *Style) (int, error)`
* Change
`func (f *File) AddChart(sheet, cell, opts string, combo ...string) error`
to
`func (f *File) AddChart(sheet, cell string, chart *ChartOptions, combo ...*ChartOptions) error`
* Change
`func (f *File) AddChartSheet(sheet, opts string, combo ...string) error`
to
`func (f *File) AddChartSheet(sheet string, chart *ChartOptions, combo ...*ChartOptions) error`
* Change
`func (f *File) AddShape(sheet, cell, opts string) error`
to
`func (f *File) AddShape(sheet, cell string, opts *Shape) error`
* Change
`func (f *File) AddPictureFromBytes(sheet, cell, opts, name, extension string, file []byte) error`
to
`func (f *File) AddPictureFromBytes(sheet, cell, name, extension string, file []byte, opts *PictureOptions) error`
* Change
`func (f *File) AddTable(sheet, hCell, vCell, opts string) error`
to
`func (f *File) AddTable(sheet, reference string, opts *TableOptions) error`
* Change
`func (sw *StreamWriter) AddTable(hCell, vCell, opts string) error`
to
`func (sw *StreamWriter) AddTable(reference string, opts *TableOptions) error`
* Change
`func (f *File) AutoFilter(sheet, hCell, vCell, opts string) error`
to
`func (f *File) AutoFilter(sheet, reference string, opts *AutoFilterOptions) error`
* Change
`func (f *File) SetPanes(sheet, panes string) error`
to
`func (f *File) SetPanes(sheet string, panes *Panes) error`
* Change
`func (sw *StreamWriter) AddTable(hCell, vCell, opts string) error`
to
`func (sw *StreamWriter) AddTable(reference string, opts *TableOptions) error`
* Change
`func (f *File) SetConditionalFormat(sheet, reference, opts string) error`
to
`func (f *File) SetConditionalFormat(sheet, reference string, opts []ConditionalFormatOptions) error`
* Add exported types:
* AutoFilterListOptions
* AutoFilterOptions
* Chart
* ChartAxis
* ChartDimension
* ChartLegend
* ChartLine
* ChartMarker
* ChartPlotArea
* ChartSeries
* ChartTitle
* ConditionalFormatOptions
* PaneOptions
* Panes
* PictureOptions
* Shape
* ShapeColor
* ShapeLine
* ShapeParagraph
* TableOptions
* This added support for set sheet visible as very hidden
* Return error when missing required parameters for set defined name
* Update unit test and comments
2022-12-30 00:50:08 +08:00
_ , _ , err = f . adjustRange ( "" )
2024-09-21 15:39:36 +08:00
assert . Error ( t , err , ErrParameterRequired )
2021-07-10 12:17:41 +08:00
// Test adjust range with incorrect range
_ , _ , err = f . adjustRange ( "sheet1!" )
assert . EqualError ( t , err , "parameter is invalid" )
2023-09-16 12:21:11 +08:00
// Test get table fields order with empty data range
2023-10-05 00:08:31 +08:00
_ , err = f . getTableFieldsOrder ( & PivotTableOptions { } )
2019-09-20 00:20:30 +08:00
assert . EqualError ( t , err , ` parameter 'DataRange' parsing error: parameter is required ` )
// Test add pivot cache with empty data range
2023-10-05 00:08:31 +08:00
assert . EqualError ( t , f . addPivotCache ( & PivotTableOptions { } ) , "parameter 'DataRange' parsing error: parameter is required" )
2019-09-20 00:20:30 +08:00
// Test add pivot table with empty options
2023-10-05 00:08:31 +08:00
assert . EqualError ( t , f . addPivotTable ( 0 , 0 , & PivotTableOptions { } ) , "parameter 'PivotTableRange' parsing error: parameter is required" )
2019-09-20 00:20:30 +08:00
// Test add pivot table with invalid data range
2023-10-05 00:08:31 +08:00
assert . EqualError ( t , f . addPivotTable ( 0 , 0 , & PivotTableOptions { } ) , "parameter 'PivotTableRange' parsing error: parameter is required" )
2019-09-20 00:20:30 +08:00
// Test add pivot fields with empty data range
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes:
Motivation and Context
When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was:
- There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure.
- Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories
- Nested properties cannot proceed modify easily
Introduce 5 new export data types:
`HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions`
Rename 4 exported data types:
- Rename `PivotTableOption` to `PivotTableOptions`
- Rename `FormatHeaderFooter` to `HeaderFooterOptions`
- Rename `FormatSheetProtection` to `SheetProtectionOptions`
- Rename `SparklineOption` to `SparklineOptions`
Remove 54 exported types:
`AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale`
Remove 2 exported constants:
`OrientationPortrait` and `OrientationLandscape`
Change 8 functions:
- Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error`
- Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)`
- Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error`
- Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)`
- Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error`
- Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)`
- Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error`
- Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)`
Introduce new function to instead of existing functions:
- New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
2022-09-29 22:00:21 +08:00
assert . EqualError ( t , f . addPivotFields ( nil , & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "A1:E31" ,
PivotTableRange : "Sheet1!U34:O2" ,
2020-09-15 23:31:24 +08:00
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } , { Data : "Year" } } ,
Columns : [ ] PivotTableField { { Data : "Type" , DefaultSubtotal : true } } ,
2020-02-26 18:53:50 +08:00
Data : [ ] PivotTableField { { Data : "Sales" } } ,
2019-09-20 00:20:30 +08:00
} ) , ` parameter 'DataRange' parsing error: parameter is invalid ` )
// Test get pivot fields index with empty data range
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes:
Motivation and Context
When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was:
- There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure.
- Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories
- Nested properties cannot proceed modify easily
Introduce 5 new export data types:
`HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions`
Rename 4 exported data types:
- Rename `PivotTableOption` to `PivotTableOptions`
- Rename `FormatHeaderFooter` to `HeaderFooterOptions`
- Rename `FormatSheetProtection` to `SheetProtectionOptions`
- Rename `SparklineOption` to `SparklineOptions`
Remove 54 exported types:
`AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale`
Remove 2 exported constants:
`OrientationPortrait` and `OrientationLandscape`
Change 8 functions:
- Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error`
- Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)`
- Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error`
- Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)`
- Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error`
- Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)`
- Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error`
- Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)`
Introduce new function to instead of existing functions:
- New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
2022-09-29 22:00:21 +08:00
_ , err = f . getPivotFieldsIndex ( [ ] PivotTableField { } , & PivotTableOptions { } )
2019-09-20 00:20:30 +08:00
assert . EqualError ( t , err , ` parameter 'DataRange' parsing error: parameter is required ` )
2022-11-13 00:40:04 +08:00
// Test add pivot table with unsupported charset content types.
f = NewFile ( )
2024-07-13 10:41:57 +08:00
assert . NoError ( t , f . SetSheetRow ( "Sheet1" , "A1" , & [ ] string { "Month" , "Year" , "Type" , "Sales" , "Region" } ) )
2022-11-13 00:40:04 +08:00
f . ContentTypes = nil
f . Pkg . Store ( defaultXMLPathContentTypes , MacintoshCyrillicCharset )
assert . EqualError ( t , f . AddPivotTable ( & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:E31" ,
PivotTableRange : "Sheet1!G2:M34" ,
2022-11-13 00:40:04 +08:00
Rows : [ ] PivotTableField { { Data : "Year" } } ,
} ) , "XML syntax error on line 1: invalid UTF-8" )
2023-09-08 00:09:41 +08:00
assert . NoError ( t , f . Close ( ) )
// Test get pivot table without pivot table
f = NewFile ( )
pivotTables , err = f . GetPivotTables ( "Sheet1" )
assert . NoError ( t , err )
assert . Len ( t , pivotTables , 0 )
// Test get pivot table with not exists worksheet
_ , err = f . GetPivotTables ( "SheetN" )
assert . EqualError ( t , err , "sheet SheetN does not exist" )
// Test get pivot table with unsupported charset worksheet relationships
f . Pkg . Store ( "xl/worksheets/_rels/sheet1.xml.rels" , MacintoshCyrillicCharset )
_ , err = f . GetPivotTables ( "Sheet1" )
assert . EqualError ( t , err , "XML syntax error on line 1: invalid UTF-8" )
assert . NoError ( t , f . Close ( ) )
// Test get pivot table with unsupported charset pivot cache definition
f , err = OpenFile ( filepath . Join ( "test" , "TestAddPivotTable1.xlsx" ) )
assert . NoError ( t , err )
f . Pkg . Store ( "xl/pivotCache/pivotCacheDefinition1.xml" , MacintoshCyrillicCharset )
_ , err = f . GetPivotTables ( "Sheet1" )
assert . EqualError ( t , err , "XML syntax error on line 1: invalid UTF-8" )
assert . NoError ( t , f . Close ( ) )
// Test get pivot table with unsupported charset pivot table relationships
f , err = OpenFile ( filepath . Join ( "test" , "TestAddPivotTable1.xlsx" ) )
assert . NoError ( t , err )
f . Pkg . Store ( "xl/pivotTables/_rels/pivotTable1.xml.rels" , MacintoshCyrillicCharset )
_ , err = f . GetPivotTables ( "Sheet1" )
assert . EqualError ( t , err , "XML syntax error on line 1: invalid UTF-8" )
assert . NoError ( t , f . Close ( ) )
// Test get pivot table with unsupported charset pivot table
f , err = OpenFile ( filepath . Join ( "test" , "TestAddPivotTable1.xlsx" ) )
assert . NoError ( t , err )
f . Pkg . Store ( "xl/pivotTables/pivotTable1.xml" , MacintoshCyrillicCharset )
_ , err = f . GetPivotTables ( "Sheet1" )
assert . EqualError ( t , err , "XML syntax error on line 1: invalid UTF-8" )
2024-08-23 10:47:47 +08:00
_ , err = f . getPivotTables ( )
assert . EqualError ( t , err , "XML syntax error on line 1: invalid UTF-8" )
2023-09-08 00:09:41 +08:00
assert . NoError ( t , f . Close ( ) )
2019-09-20 00:20:30 +08:00
}
2020-02-26 18:53:50 +08:00
2023-10-03 00:59:31 +08:00
func TestPivotTableDataRange ( t * testing . T ) {
f := NewFile ( )
// Create table in a worksheet
assert . NoError ( t , f . AddTable ( "Sheet1" , & Table {
Name : "Table1" ,
Range : "A1:D5" ,
} ) )
for row := 2 ; row < 6 ; row ++ {
assert . NoError ( t , f . SetCellValue ( "Sheet1" , fmt . Sprintf ( "A%d" , row ) , rand . Intn ( 10 ) ) )
assert . NoError ( t , f . SetCellValue ( "Sheet1" , fmt . Sprintf ( "B%d" , row ) , rand . Intn ( 10 ) ) )
assert . NoError ( t , f . SetCellValue ( "Sheet1" , fmt . Sprintf ( "C%d" , row ) , rand . Intn ( 10 ) ) )
assert . NoError ( t , f . SetCellValue ( "Sheet1" , fmt . Sprintf ( "D%d" , row ) , rand . Intn ( 10 ) ) )
}
// Test add pivot table with table data range
opts := PivotTableOptions {
DataRange : "Table1" ,
PivotTableRange : "Sheet1!G2:K7" ,
Rows : [ ] PivotTableField { { Data : "Column1" } } ,
Columns : [ ] PivotTableField { { Data : "Column2" } } ,
RowGrandTotals : true ,
ColGrandTotals : true ,
ShowDrill : true ,
ShowRowHeaders : true ,
ShowColHeaders : true ,
ShowLastColumn : true ,
ShowError : true ,
PivotTableStyleName : "PivotStyleLight16" ,
}
assert . NoError ( t , f . AddPivotTable ( & opts ) )
assert . NoError ( t , f . DeletePivotTable ( "Sheet1" , "PivotTable1" ) )
assert . NoError ( t , f . SaveAs ( filepath . Join ( "test" , "TestAddPivotTable2.xlsx" ) ) )
assert . NoError ( t , f . Close ( ) )
assert . NoError ( t , f . AddPivotTable ( & opts ) )
// Test delete pivot table with unsupported table relationships charset
f . Pkg . Store ( "xl/tables/table1.xml" , MacintoshCyrillicCharset )
assert . EqualError ( t , f . DeletePivotTable ( "Sheet1" , "PivotTable1" ) , "XML syntax error on line 1: invalid UTF-8" )
// Test delete pivot table with unsupported worksheet relationships charset
f . Relationships . Delete ( "xl/worksheets/_rels/sheet1.xml.rels" )
f . Pkg . Store ( "xl/worksheets/_rels/sheet1.xml.rels" , MacintoshCyrillicCharset )
assert . EqualError ( t , f . DeletePivotTable ( "Sheet1" , "PivotTable1" ) , "XML syntax error on line 1: invalid UTF-8" )
// Test delete pivot table without worksheet relationships
f . Relationships . Delete ( "xl/worksheets/_rels/sheet1.xml.rels" )
f . Pkg . Delete ( "xl/worksheets/_rels/sheet1.xml.rels" )
assert . EqualError ( t , f . DeletePivotTable ( "Sheet1" , "PivotTable1" ) , "table PivotTable1 does not exist" )
2024-07-13 10:41:57 +08:00
t . Run ( "data_range_with_empty_column" , func ( t * testing . T ) {
// Test add pivot table with data range doesn't organized as a list with labeled columns
f := NewFile ( )
// Create some data in a sheet
month := [ ] string { "Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec" }
types := [ ] string { "Meat" , "Dairy" , "Beverages" , "Produce" }
assert . NoError ( t , f . SetSheetRow ( "Sheet1" , "A1" , & [ ] string { "Month" , "" , "Type" } ) )
for row := 2 ; row < 32 ; row ++ {
assert . NoError ( t , f . SetCellValue ( "Sheet1" , fmt . Sprintf ( "A%d" , row ) , month [ rand . Intn ( 12 ) ] ) )
assert . NoError ( t , f . SetCellValue ( "Sheet1" , fmt . Sprintf ( "C%d" , row ) , types [ rand . Intn ( 4 ) ] ) )
}
assert . Equal ( t , newPivotTableDataRangeError ( "parameter is invalid" ) , f . AddPivotTable ( & PivotTableOptions {
DataRange : "Sheet1!A1:E31" ,
PivotTableRange : "Sheet1!G2:M34" ,
Rows : [ ] PivotTableField { { Data : "Month" , DefaultSubtotal : true } } ,
Data : [ ] PivotTableField { { Data : "Type" } } ,
} ) )
} )
2023-10-03 00:59:31 +08:00
}
func TestParseFormatPivotTableSet ( t * testing . T ) {
f := NewFile ( )
// Create table in a worksheet
assert . NoError ( t , f . AddTable ( "Sheet1" , & Table {
Name : "Table1" ,
Range : "A1:D5" ,
} ) )
// Test parse format pivot table options with unsupported table relationships charset
f . Pkg . Store ( "xl/tables/table1.xml" , MacintoshCyrillicCharset )
_ , _ , err := f . parseFormatPivotTableSet ( & PivotTableOptions {
DataRange : "Table1" ,
PivotTableRange : "Sheet1!G2:K7" ,
Rows : [ ] PivotTableField { { Data : "Column1" } } ,
} )
assert . EqualError ( t , err , "XML syntax error on line 1: invalid UTF-8" )
}
2020-04-10 00:04:23 +08:00
func TestAddPivotRowFields ( t * testing . T ) {
f := NewFile ( )
// Test invalid data range
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes:
Motivation and Context
When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was:
- There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure.
- Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories
- Nested properties cannot proceed modify easily
Introduce 5 new export data types:
`HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions`
Rename 4 exported data types:
- Rename `PivotTableOption` to `PivotTableOptions`
- Rename `FormatHeaderFooter` to `HeaderFooterOptions`
- Rename `FormatSheetProtection` to `SheetProtectionOptions`
- Rename `SparklineOption` to `SparklineOptions`
Remove 54 exported types:
`AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale`
Remove 2 exported constants:
`OrientationPortrait` and `OrientationLandscape`
Change 8 functions:
- Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error`
- Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)`
- Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error`
- Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)`
- Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error`
- Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)`
- Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error`
- Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)`
Introduce new function to instead of existing functions:
- New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
2022-09-29 22:00:21 +08:00
assert . EqualError ( t , f . addPivotRowFields ( & xlsxPivotTableDefinition { } , & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:A1" ,
2020-04-10 00:04:23 +08:00
} ) , ` parameter 'DataRange' parsing error: parameter is invalid ` )
}
func TestAddPivotPageFields ( t * testing . T ) {
f := NewFile ( )
// Test invalid data range
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes:
Motivation and Context
When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was:
- There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure.
- Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories
- Nested properties cannot proceed modify easily
Introduce 5 new export data types:
`HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions`
Rename 4 exported data types:
- Rename `PivotTableOption` to `PivotTableOptions`
- Rename `FormatHeaderFooter` to `HeaderFooterOptions`
- Rename `FormatSheetProtection` to `SheetProtectionOptions`
- Rename `SparklineOption` to `SparklineOptions`
Remove 54 exported types:
`AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale`
Remove 2 exported constants:
`OrientationPortrait` and `OrientationLandscape`
Change 8 functions:
- Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error`
- Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)`
- Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error`
- Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)`
- Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error`
- Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)`
- Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error`
- Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)`
Introduce new function to instead of existing functions:
- New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
2022-09-29 22:00:21 +08:00
assert . EqualError ( t , f . addPivotPageFields ( & xlsxPivotTableDefinition { } , & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:A1" ,
2020-04-10 00:04:23 +08:00
} ) , ` parameter 'DataRange' parsing error: parameter is invalid ` )
}
func TestAddPivotDataFields ( t * testing . T ) {
f := NewFile ( )
// Test invalid data range
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes:
Motivation and Context
When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was:
- There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure.
- Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories
- Nested properties cannot proceed modify easily
Introduce 5 new export data types:
`HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions`
Rename 4 exported data types:
- Rename `PivotTableOption` to `PivotTableOptions`
- Rename `FormatHeaderFooter` to `HeaderFooterOptions`
- Rename `FormatSheetProtection` to `SheetProtectionOptions`
- Rename `SparklineOption` to `SparklineOptions`
Remove 54 exported types:
`AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale`
Remove 2 exported constants:
`OrientationPortrait` and `OrientationLandscape`
Change 8 functions:
- Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error`
- Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)`
- Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error`
- Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)`
- Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error`
- Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)`
- Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error`
- Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)`
Introduce new function to instead of existing functions:
- New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
2022-09-29 22:00:21 +08:00
assert . EqualError ( t , f . addPivotDataFields ( & xlsxPivotTableDefinition { } , & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:A1" ,
2020-04-10 00:04:23 +08:00
} ) , ` parameter 'DataRange' parsing error: parameter is invalid ` )
}
func TestAddPivotColFields ( t * testing . T ) {
f := NewFile ( )
// Test invalid data range
This closes #1358, made a refactor with breaking changes, see details:
This made a refactor with breaking changes:
Motivation and Context
When I decided to add set horizontal centered support for this library to resolve #1358, the reason I made this huge breaking change was:
- There are too many exported types for set sheet view, properties, and format properties, although a function using the functional options pattern can be optimized by returning an anonymous function, these types or property set or get function has no binding categorization, so I change these functions like `SetAppProps` to accept a pointer of options structure.
- Users can not easily find out which properties should be in the `SetSheetPrOptions` or `SetSheetFormatPr` categories
- Nested properties cannot proceed modify easily
Introduce 5 new export data types:
`HeaderFooterOptions`, `PageLayoutMarginsOptions`, `PageLayoutOptions`, `SheetPropsOptions`, and `ViewOptions`
Rename 4 exported data types:
- Rename `PivotTableOption` to `PivotTableOptions`
- Rename `FormatHeaderFooter` to `HeaderFooterOptions`
- Rename `FormatSheetProtection` to `SheetProtectionOptions`
- Rename `SparklineOption` to `SparklineOptions`
Remove 54 exported types:
`AutoPageBreaks`, `BaseColWidth`, `BlackAndWhite`, `CodeName`, `CustomHeight`, `Date1904`, `DefaultColWidth`, `DefaultGridColor`, `DefaultRowHeight`, `EnableFormatConditionsCalculation`, `FilterPrivacy`, `FirstPageNumber`, `FitToHeight`, `FitToPage`, `FitToWidth`, `OutlineSummaryBelow`, `PageLayoutOption`, `PageLayoutOptionPtr`, `PageLayoutOrientation`, `PageLayoutPaperSize`, `PageLayoutScale`, `PageMarginBottom`, `PageMarginFooter`, `PageMarginHeader`, `PageMarginLeft`, `PageMarginRight`, `PageMarginsOptions`, `PageMarginsOptionsPtr`, `PageMarginTop`, `Published`, `RightToLeft`, `SheetFormatPrOptions`, `SheetFormatPrOptionsPtr`, `SheetPrOption`, `SheetPrOptionPtr`, `SheetViewOption`, `SheetViewOptionPtr`, `ShowFormulas`, `ShowGridLines`, `ShowRowColHeaders`, `ShowRuler`, `ShowZeros`, `TabColorIndexed`, `TabColorRGB`, `TabColorTheme`, `TabColorTint`, `ThickBottom`, `ThickTop`, `TopLeftCell`, `View`, `WorkbookPrOption`, `WorkbookPrOptionPtr`, `ZeroHeight` and `ZoomScale`
Remove 2 exported constants:
`OrientationPortrait` and `OrientationLandscape`
Change 8 functions:
- Change the `func (f *File) SetPageLayout(sheet string, opts ...PageLayoutOption) error` to `func (f *File) SetPageLayout(sheet string, opts *PageLayoutOptions) error`
- Change the `func (f *File) GetPageLayout(sheet string, opts ...PageLayoutOptionPtr) error` to `func (f *File) GetPageLayout(sheet string) (PageLayoutOptions, error)`
- Change the `func (f *File) SetPageMargins(sheet string, opts ...PageMarginsOptions) error` to `func (f *File) SetPageMargins(sheet string, opts *PageLayoutMarginsOptions) error`
- Change the `func (f *File) GetPageMargins(sheet string, opts ...PageMarginsOptionsPtr) error` to `func (f *File) GetPageMargins(sheet string) (PageLayoutMarginsOptions, error)`
- Change the `func (f *File) SetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOption) error` to `func (f *File) SetSheetView(sheet string, viewIndex int, opts *ViewOptions) error`
- Change the `func (f *File) GetSheetViewOptions(sheet string, viewIndex int, opts ...SheetViewOptionPtr) error` to `func (f *File) GetSheetView(sheet string, viewIndex int) (ViewOptions, error)`
- Change the `func (f *File) SetWorkbookPrOptions(opts ...WorkbookPrOption) error` to `func (f *File) SetWorkbookProps(opts *WorkbookPropsOptions) error`
- Change the `func (f *File) GetWorkbookPrOptions(opts ...WorkbookPrOptionPtr) error` to `func (f *File) GetWorkbookProps() (WorkbookPropsOptions, error)`
Introduce new function to instead of existing functions:
- New function `func (f *File) SetSheetProps(sheet string, opts *SheetPropsOptions) error` instead of `func (f *File) SetSheetPrOptions(sheet string, opts ...SheetPrOption) error` and `func (f *File) SetSheetFormatPr(sheet string, opts ...SheetFormatPrOption
2022-09-29 22:00:21 +08:00
assert . EqualError ( t , f . addPivotColFields ( & xlsxPivotTableDefinition { } , & PivotTableOptions {
2023-09-08 00:09:41 +08:00
DataRange : "Sheet1!A1:A1" ,
2020-09-15 23:31:24 +08:00
Columns : [ ] PivotTableField { { Data : "Type" , DefaultSubtotal : true } } ,
2020-04-10 00:04:23 +08:00
} ) , ` parameter 'DataRange' parsing error: parameter is invalid ` )
}
func TestGetPivotFieldsOrder ( t * testing . T ) {
f := NewFile ( )
2023-09-16 12:21:11 +08:00
// Test get table fields order with not exist worksheet
2023-10-05 00:08:31 +08:00
_ , err := f . getTableFieldsOrder ( & PivotTableOptions { DataRange : "SheetN!A1:E31" } )
2022-08-28 00:16:41 +08:00
assert . EqualError ( t , err , "sheet SheetN does not exist" )
2023-10-03 00:59:31 +08:00
// Create table in a worksheet
assert . NoError ( t , f . AddTable ( "Sheet1" , & Table {
Name : "Table1" ,
Range : "A1:D5" ,
} ) )
// Test get table fields order with unsupported table relationships charset
f . Pkg . Store ( "xl/tables/table1.xml" , MacintoshCyrillicCharset )
2023-10-05 00:08:31 +08:00
_ , err = f . getTableFieldsOrder ( & PivotTableOptions { DataRange : "Table" } )
2023-10-03 00:59:31 +08:00
assert . EqualError ( t , err , "XML syntax error on line 1: invalid UTF-8" )
2020-04-10 00:04:23 +08:00
}
2020-02-26 18:53:50 +08:00
func TestGetPivotTableFieldName ( t * testing . T ) {
f := NewFile ( )
2023-09-27 00:05:59 +08:00
assert . Empty ( t , f . getPivotTableFieldName ( "-" , [ ] PivotTableField { } ) )
}
func TestGetPivotTableFieldOptions ( t * testing . T ) {
f := NewFile ( )
_ , ok := f . getPivotTableFieldOptions ( "-" , [ ] PivotTableField { } )
assert . False ( t , ok )
}
func TestGenPivotCacheDefinitionID ( t * testing . T ) {
f := NewFile ( )
// Test generate pivot table cache definition ID with unsupported charset
f . Pkg . Store ( "xl/pivotCache/pivotCacheDefinition1.xml" , MacintoshCyrillicCharset )
assert . Equal ( t , 1 , f . genPivotCacheDefinitionID ( ) )
assert . NoError ( t , f . Close ( ) )
2020-02-26 18:53:50 +08:00
}
2023-10-03 00:59:31 +08:00
func TestDeleteWorkbookPivotCache ( t * testing . T ) {
f := NewFile ( )
// Test delete workbook pivot table cache with unsupported workbook charset
f . WorkBook = nil
2024-10-25 08:52:59 +08:00
f . Pkg . Store ( defaultXMLPathWorkbook , MacintoshCyrillicCharset )
2023-10-03 00:59:31 +08:00
assert . EqualError ( t , f . deleteWorkbookPivotCache ( PivotTableOptions { pivotCacheXML : "pivotCache/pivotCacheDefinition1.xml" } ) , "XML syntax error on line 1: invalid UTF-8" )
// Test delete workbook pivot table cache with unsupported workbook relationships charset
f . Relationships . Delete ( "xl/_rels/workbook.xml.rels" )
f . Pkg . Store ( "xl/_rels/workbook.xml.rels" , MacintoshCyrillicCharset )
assert . EqualError ( t , f . deleteWorkbookPivotCache ( PivotTableOptions { pivotCacheXML : "pivotCache/pivotCacheDefinition1.xml" } ) , "XML syntax error on line 1: invalid UTF-8" )
}