Add support to flip outline summaries

This adds outlinePr support, with the summaryBelow attribute
which defaults to true.

Closes #304

Signed-off-by: Michael Harris
This commit is contained in:
Harris 2018-12-13 13:01:36 -06:00
parent 4094e0019f
commit faa7285a4f
No known key found for this signature in database
GPG Key ID: 5DC4DA5EF2BC66D8
3 changed files with 35 additions and 0 deletions

View File

@ -31,8 +31,26 @@ type (
FitToPage bool FitToPage bool
// AutoPageBreaks is a SheetPrOption // AutoPageBreaks is a SheetPrOption
AutoPageBreaks bool AutoPageBreaks bool
// OutlineSummaryBelow is an outlinePr, within SheetPr option
OutlineSummaryBelow bool
) )
func (o OutlineSummaryBelow) setSheetPrOption(pr *xlsxSheetPr) {
if pr.OutlinePr == nil {
pr.OutlinePr = new(xlsxOutlinePr)
}
pr.OutlinePr.SummaryBelow = bool(o)
}
func (o *OutlineSummaryBelow) getSheetPrOption(pr *xlsxSheetPr) {
// Excel default: true
if pr == nil || pr.OutlinePr == nil {
*o = true
return
}
*o = OutlineSummaryBelow(defaultTrue(&pr.OutlinePr.SummaryBelow))
}
func (o CodeName) setSheetPrOption(pr *xlsxSheetPr) { func (o CodeName) setSheetPrOption(pr *xlsxSheetPr) {
pr.CodeName = string(o) pr.CodeName = string(o)
} }
@ -115,6 +133,7 @@ func (o *AutoPageBreaks) getSheetPrOption(pr *xlsxSheetPr) {
// Published(bool) // Published(bool)
// FitToPage(bool) // FitToPage(bool)
// AutoPageBreaks(bool) // AutoPageBreaks(bool)
// OutlineSummaryBelow(bool)
func (f *File) SetSheetPrOptions(name string, opts ...SheetPrOption) error { func (f *File) SetSheetPrOptions(name string, opts ...SheetPrOption) error {
sheet := f.workSheetReader(name) sheet := f.workSheetReader(name)
pr := sheet.SheetPr pr := sheet.SheetPr
@ -137,6 +156,7 @@ func (f *File) SetSheetPrOptions(name string, opts ...SheetPrOption) error {
// Published(bool) // Published(bool)
// FitToPage(bool) // FitToPage(bool)
// AutoPageBreaks(bool) // AutoPageBreaks(bool)
// OutlineSummaryBelow(bool)
func (f *File) GetSheetPrOptions(name string, opts ...SheetPrOptionPtr) error { func (f *File) GetSheetPrOptions(name string, opts ...SheetPrOptionPtr) error {
sheet := f.workSheetReader(name) sheet := f.workSheetReader(name)
pr := sheet.SheetPr pr := sheet.SheetPr

View File

@ -15,6 +15,7 @@ var _ = []excelize.SheetPrOption{
excelize.Published(false), excelize.Published(false),
excelize.FitToPage(true), excelize.FitToPage(true),
excelize.AutoPageBreaks(true), excelize.AutoPageBreaks(true),
excelize.OutlineSummaryBelow(true),
} }
var _ = []excelize.SheetPrOptionPtr{ var _ = []excelize.SheetPrOptionPtr{
@ -23,6 +24,7 @@ var _ = []excelize.SheetPrOptionPtr{
(*excelize.Published)(nil), (*excelize.Published)(nil),
(*excelize.FitToPage)(nil), (*excelize.FitToPage)(nil),
(*excelize.AutoPageBreaks)(nil), (*excelize.AutoPageBreaks)(nil),
(*excelize.OutlineSummaryBelow)(nil),
} }
func ExampleFile_SetSheetPrOptions() { func ExampleFile_SetSheetPrOptions() {
@ -35,6 +37,7 @@ func ExampleFile_SetSheetPrOptions() {
excelize.Published(false), excelize.Published(false),
excelize.FitToPage(true), excelize.FitToPage(true),
excelize.AutoPageBreaks(true), excelize.AutoPageBreaks(true),
excelize.OutlineSummaryBelow(false),
); err != nil { ); err != nil {
panic(err) panic(err)
} }
@ -51,6 +54,7 @@ func ExampleFile_GetSheetPrOptions() {
published excelize.Published published excelize.Published
fitToPage excelize.FitToPage fitToPage excelize.FitToPage
autoPageBreaks excelize.AutoPageBreaks autoPageBreaks excelize.AutoPageBreaks
outlineSummaryBelow excelize.OutlineSummaryBelow
) )
if err := xl.GetSheetPrOptions(sheet, if err := xl.GetSheetPrOptions(sheet,
@ -59,6 +63,7 @@ func ExampleFile_GetSheetPrOptions() {
&published, &published,
&fitToPage, &fitToPage,
&autoPageBreaks, &autoPageBreaks,
&outlineSummaryBelow,
); err != nil { ); err != nil {
panic(err) panic(err)
} }
@ -68,6 +73,7 @@ func ExampleFile_GetSheetPrOptions() {
fmt.Println("- published:", published) fmt.Println("- published:", published)
fmt.Println("- fitToPage:", fitToPage) fmt.Println("- fitToPage:", fitToPage)
fmt.Println("- autoPageBreaks:", autoPageBreaks) fmt.Println("- autoPageBreaks:", autoPageBreaks)
fmt.Println("- outlineSummaryBelow:", outlineSummaryBelow)
// Output: // Output:
// Defaults: // Defaults:
// - codeName: "" // - codeName: ""
@ -75,6 +81,7 @@ func ExampleFile_GetSheetPrOptions() {
// - published: true // - published: true
// - fitToPage: false // - fitToPage: false
// - autoPageBreaks: false // - autoPageBreaks: false
// - outlineSummaryBelow: true
} }
func TestSheetPrOptions(t *testing.T) { func TestSheetPrOptions(t *testing.T) {
@ -88,6 +95,7 @@ func TestSheetPrOptions(t *testing.T) {
{new(excelize.Published), excelize.Published(false)}, {new(excelize.Published), excelize.Published(false)},
{new(excelize.FitToPage), excelize.FitToPage(true)}, {new(excelize.FitToPage), excelize.FitToPage(true)},
{new(excelize.AutoPageBreaks), excelize.AutoPageBreaks(true)}, {new(excelize.AutoPageBreaks), excelize.AutoPageBreaks(true)},
{new(excelize.OutlineSummaryBelow), excelize.OutlineSummaryBelow(false)},
} { } {
opt := test.nonDefault opt := test.nonDefault
t.Logf("option %T", opt) t.Logf("option %T", opt)

View File

@ -211,6 +211,13 @@ type xlsxSheetPr struct {
TransitionEntry bool `xml:"transitionEntry,attr,omitempty"` TransitionEntry bool `xml:"transitionEntry,attr,omitempty"`
TabColor *xlsxTabColor `xml:"tabColor,omitempty"` TabColor *xlsxTabColor `xml:"tabColor,omitempty"`
PageSetUpPr *xlsxPageSetUpPr `xml:"pageSetUpPr,omitempty"` PageSetUpPr *xlsxPageSetUpPr `xml:"pageSetUpPr,omitempty"`
OutlinePr *xlsxOutlinePr `xml:"outlinePr,omitempty"`
}
// xlsxOutlinePr maps to the outlinePr element
// SummaryBelow allows you to adjust the direction of grouper controls
type xlsxOutlinePr struct {
SummaryBelow bool `xml:"summaryBelow,attr"`
} }
// xlsxPageSetUpPr directly maps the pageSetupPr element in the namespace // xlsxPageSetUpPr directly maps the pageSetupPr element in the namespace