2023-01-02 11:47:31 +08:00
|
|
|
|
// Copyright 2016 - 2023 The excelize Authors. All rights reserved. Use of
|
2018-09-14 00:44:23 +08:00
|
|
|
|
// this source code is governed by a BSD-style license that can be found in
|
|
|
|
|
// the LICENSE file.
|
|
|
|
|
//
|
2022-02-17 00:09:11 +08:00
|
|
|
|
// Package excelize providing a set of functions that allow you to write to and
|
|
|
|
|
// read from XLAM / XLSM / XLSX / XLTM / XLTX files. Supports reading and
|
|
|
|
|
// writing spreadsheet documents generated by Microsoft Excel™ 2007 and later.
|
|
|
|
|
// Supports complex components by high compatibility, and provided streaming
|
|
|
|
|
// API for generating or reading data from a worksheet with huge amounts of
|
2023-01-02 11:47:31 +08:00
|
|
|
|
// data. This library needs Go version 1.16 or later.
|
2018-09-14 00:58:48 +08:00
|
|
|
|
|
2017-03-06 12:05:41 +08:00
|
|
|
|
package excelize
|
|
|
|
|
|
|
|
|
|
import (
|
2019-12-20 00:30:48 +08:00
|
|
|
|
"bytes"
|
2017-03-06 12:05:41 +08:00
|
|
|
|
"encoding/xml"
|
2017-05-05 14:40:28 +08:00
|
|
|
|
"fmt"
|
2019-12-20 00:30:48 +08:00
|
|
|
|
"io"
|
2017-05-05 14:40:28 +08:00
|
|
|
|
"math"
|
2020-05-24 20:20:22 +08:00
|
|
|
|
"reflect"
|
2023-02-08 00:03:45 +08:00
|
|
|
|
"sort"
|
2017-03-06 12:05:41 +08:00
|
|
|
|
"strconv"
|
|
|
|
|
"strings"
|
|
|
|
|
)
|
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// stylesReader provides a function to get the pointer to the structure after
|
2017-06-29 13:28:44 +08:00
|
|
|
|
// deserialization of xl/styles.xml.
|
2022-11-12 00:02:11 +08:00
|
|
|
|
func (f *File) stylesReader() (*xlsxStyleSheet, error) {
|
2017-06-26 18:44:19 +08:00
|
|
|
|
if f.Styles == nil {
|
2019-12-20 00:30:48 +08:00
|
|
|
|
f.Styles = new(xlsxStyleSheet)
|
2022-02-08 00:08:06 +08:00
|
|
|
|
if err := f.xmlNewDecoder(bytes.NewReader(namespaceStrictToTransitional(f.readXML(defaultXMLPathStyles)))).
|
2019-12-20 00:30:48 +08:00
|
|
|
|
Decode(f.Styles); err != nil && err != io.EOF {
|
2022-11-12 00:02:11 +08:00
|
|
|
|
return f.Styles, err
|
2019-12-20 00:30:48 +08:00
|
|
|
|
}
|
2017-06-26 18:44:19 +08:00
|
|
|
|
}
|
2022-11-12 00:02:11 +08:00
|
|
|
|
return f.Styles, nil
|
2017-06-26 18:44:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// styleSheetWriter provides a function to save xl/styles.xml after serialize
|
2017-06-26 18:44:19 +08:00
|
|
|
|
// structure.
|
|
|
|
|
func (f *File) styleSheetWriter() {
|
|
|
|
|
if f.Styles != nil {
|
|
|
|
|
output, _ := xml.Marshal(f.Styles)
|
2021-12-27 23:34:14 +08:00
|
|
|
|
f.saveFileList(defaultXMLPathStyles, f.replaceNameSpaceBytes(defaultXMLPathStyles, output))
|
2017-06-26 18:44:19 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-28 00:31:55 +08:00
|
|
|
|
// themeWriter provides a function to save xl/theme/theme1.xml after serialize
|
|
|
|
|
// structure.
|
|
|
|
|
func (f *File) themeWriter() {
|
2023-10-20 00:04:31 +08:00
|
|
|
|
newColor := func(c *decodeCTColor) xlsxCTColor {
|
|
|
|
|
return xlsxCTColor{
|
|
|
|
|
ScrgbClr: c.ScrgbClr,
|
|
|
|
|
SrgbClr: c.SrgbClr,
|
|
|
|
|
HslClr: c.HslClr,
|
|
|
|
|
SysClr: c.SysClr,
|
|
|
|
|
SchemeClr: c.SchemeClr,
|
|
|
|
|
PrstClr: c.PrstClr,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
newFontScheme := func(c *decodeFontCollection) xlsxFontCollection {
|
|
|
|
|
return xlsxFontCollection{
|
|
|
|
|
Latin: c.Latin,
|
|
|
|
|
Ea: c.Ea,
|
|
|
|
|
Cs: c.Cs,
|
|
|
|
|
Font: c.Font,
|
|
|
|
|
ExtLst: c.ExtLst,
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-10-28 00:31:55 +08:00
|
|
|
|
if f.Theme != nil {
|
2023-10-20 00:04:31 +08:00
|
|
|
|
output, _ := xml.Marshal(xlsxTheme{
|
|
|
|
|
XMLNSa: NameSpaceDrawingML.Value,
|
|
|
|
|
XMLNSr: SourceRelationship.Value,
|
|
|
|
|
Name: f.Theme.Name,
|
|
|
|
|
ThemeElements: xlsxBaseStyles{
|
|
|
|
|
ClrScheme: xlsxColorScheme{
|
|
|
|
|
Name: f.Theme.ThemeElements.ClrScheme.Name,
|
|
|
|
|
Dk1: newColor(&f.Theme.ThemeElements.ClrScheme.Dk1),
|
|
|
|
|
Lt1: newColor(&f.Theme.ThemeElements.ClrScheme.Lt1),
|
|
|
|
|
Dk2: newColor(&f.Theme.ThemeElements.ClrScheme.Dk2),
|
|
|
|
|
Lt2: newColor(&f.Theme.ThemeElements.ClrScheme.Lt2),
|
|
|
|
|
Accent1: newColor(&f.Theme.ThemeElements.ClrScheme.Accent1),
|
|
|
|
|
Accent2: newColor(&f.Theme.ThemeElements.ClrScheme.Accent2),
|
|
|
|
|
Accent3: newColor(&f.Theme.ThemeElements.ClrScheme.Accent3),
|
|
|
|
|
Accent4: newColor(&f.Theme.ThemeElements.ClrScheme.Accent4),
|
|
|
|
|
Accent5: newColor(&f.Theme.ThemeElements.ClrScheme.Accent5),
|
|
|
|
|
Accent6: newColor(&f.Theme.ThemeElements.ClrScheme.Accent6),
|
|
|
|
|
Hlink: newColor(&f.Theme.ThemeElements.ClrScheme.Hlink),
|
|
|
|
|
FolHlink: newColor(&f.Theme.ThemeElements.ClrScheme.FolHlink),
|
|
|
|
|
ExtLst: f.Theme.ThemeElements.ClrScheme.ExtLst,
|
|
|
|
|
},
|
|
|
|
|
FontScheme: xlsxFontScheme{
|
|
|
|
|
Name: f.Theme.ThemeElements.FontScheme.Name,
|
|
|
|
|
MajorFont: newFontScheme(&f.Theme.ThemeElements.FontScheme.MajorFont),
|
|
|
|
|
MinorFont: newFontScheme(&f.Theme.ThemeElements.FontScheme.MinorFont),
|
|
|
|
|
ExtLst: f.Theme.ThemeElements.FontScheme.ExtLst,
|
|
|
|
|
},
|
|
|
|
|
FmtScheme: xlsxStyleMatrix{
|
|
|
|
|
Name: f.Theme.ThemeElements.FmtScheme.Name,
|
|
|
|
|
FillStyleLst: f.Theme.ThemeElements.FmtScheme.FillStyleLst,
|
|
|
|
|
LnStyleLst: f.Theme.ThemeElements.FmtScheme.LnStyleLst,
|
|
|
|
|
EffectStyleLst: f.Theme.ThemeElements.FmtScheme.EffectStyleLst,
|
|
|
|
|
BgFillStyleLst: f.Theme.ThemeElements.FmtScheme.BgFillStyleLst,
|
|
|
|
|
},
|
|
|
|
|
ExtLst: f.Theme.ThemeElements.ExtLst,
|
|
|
|
|
},
|
|
|
|
|
ObjectDefaults: f.Theme.ObjectDefaults,
|
|
|
|
|
ExtraClrSchemeLst: f.Theme.ExtraClrSchemeLst,
|
|
|
|
|
CustClrLst: f.Theme.CustClrLst,
|
|
|
|
|
ExtLst: f.Theme.ExtLst,
|
|
|
|
|
})
|
2022-10-28 00:31:55 +08:00
|
|
|
|
f.saveFileList(defaultXMLPathTheme, f.replaceNameSpaceBytes(defaultXMLPathTheme, output))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-04-06 00:23:27 +08:00
|
|
|
|
// sharedStringsWriter provides a function to save xl/sharedStrings.xml after
|
|
|
|
|
// serialize structure.
|
|
|
|
|
func (f *File) sharedStringsWriter() {
|
|
|
|
|
if f.SharedStrings != nil {
|
|
|
|
|
output, _ := xml.Marshal(f.SharedStrings)
|
2022-01-09 00:20:42 +08:00
|
|
|
|
f.saveFileList(defaultXMLPathSharedStrings, f.replaceNameSpaceBytes(defaultXMLPathSharedStrings, output))
|
2020-04-06 00:23:27 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// parseFormatStyleSet provides a function to parse the format settings of the
|
2017-08-11 23:15:33 +08:00
|
|
|
|
// cells and conditional formats.
|
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
|
|
|
|
func parseFormatStyleSet(style *Style) (*Style, error) {
|
2020-09-18 22:20:58 +08:00
|
|
|
|
var err error
|
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
|
|
|
|
if style.Font != nil {
|
|
|
|
|
if len(style.Font.Family) > MaxFontFamilyLength {
|
|
|
|
|
return style, ErrFontLength
|
2020-09-18 22:20:58 +08:00
|
|
|
|
}
|
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
|
|
|
|
if style.Font.Size > MaxFontSize {
|
|
|
|
|
return style, ErrFontSize
|
2020-09-18 22:20:58 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
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
|
|
|
|
if style.CustomNumFmt != nil && len(*style.CustomNumFmt) == 0 {
|
2021-09-28 22:02:31 +08:00
|
|
|
|
err = ErrCustomNumFmt
|
|
|
|
|
}
|
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
|
|
|
|
return style, err
|
2017-03-06 12:05:41 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-05-16 09:44:08 +08:00
|
|
|
|
// NewStyle provides a function to create the style for cells by a given style
|
|
|
|
|
// options, and returns style index. The same style index can not be used
|
|
|
|
|
// across different workbook. This function is concurrency safe. Note that
|
|
|
|
|
// the 'Font.Color' field uses an RGB color represented in 'RRGGBB' hexadecimal
|
|
|
|
|
// notation.
|
2017-04-25 18:43:10 +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
|
|
|
|
// The following table shows the border types used in 'Border.Type' supported by
|
|
|
|
|
// excelize:
|
|
|
|
|
//
|
|
|
|
|
// Type | Description
|
|
|
|
|
// --------------+------------------
|
|
|
|
|
// left | Left border
|
|
|
|
|
// top | Top border
|
|
|
|
|
// right | Right border
|
|
|
|
|
// bottom | Bottom border
|
|
|
|
|
// diagonalDown | Diagonal down border
|
|
|
|
|
// diagonalUp | Diagonal up border
|
|
|
|
|
//
|
|
|
|
|
// The following table shows the border styles used in 'Border.Style' supported
|
|
|
|
|
// by excelize index number:
|
2017-03-06 12:05:41 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// Index | Name | Weight | Style
|
|
|
|
|
// -------+---------------+--------+-------------
|
|
|
|
|
// 0 | None | 0 |
|
|
|
|
|
// 1 | Continuous | 1 | -----------
|
|
|
|
|
// 2 | Continuous | 2 | -----------
|
|
|
|
|
// 3 | Dash | 1 | - - - - - -
|
|
|
|
|
// 4 | Dot | 1 | . . . . . .
|
|
|
|
|
// 5 | Continuous | 3 | -----------
|
|
|
|
|
// 6 | Double | 3 | ===========
|
|
|
|
|
// 7 | Continuous | 0 | -----------
|
|
|
|
|
// 8 | Dash | 2 | - - - - - -
|
|
|
|
|
// 9 | Dash Dot | 1 | - . - . - .
|
|
|
|
|
// 10 | Dash Dot | 2 | - . - . - .
|
|
|
|
|
// 11 | Dash Dot Dot | 1 | - . . - . .
|
|
|
|
|
// 12 | Dash Dot Dot | 2 | - . . - . .
|
|
|
|
|
// 13 | SlantDash Dot | 2 | / - . / - .
|
2017-03-06 12:05:41 +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
|
|
|
|
// The following table shows the border styles used in 'Border.Style' in the
|
|
|
|
|
// order shown in the Excel dialog:
|
2017-03-06 12:05:41 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// Index | Style | Index | Style
|
|
|
|
|
// -------+-------------+-------+-------------
|
|
|
|
|
// 0 | None | 12 | - . . - . .
|
|
|
|
|
// 7 | ----------- | 13 | / - . / - .
|
|
|
|
|
// 4 | . . . . . . | 10 | - . - . - .
|
|
|
|
|
// 11 | - . . - . . | 8 | - - - - - -
|
|
|
|
|
// 9 | - . - . - . | 2 | -----------
|
|
|
|
|
// 3 | - - - - - - | 5 | -----------
|
|
|
|
|
// 1 | ----------- | 6 | ===========
|
2017-03-06 12:05:41 +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
|
|
|
|
// The following table shows the shading styles used in 'Fill.Shading' supported
|
|
|
|
|
// by excelize index number:
|
2017-03-19 17:14:40 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// Index | Style | Index | Style
|
|
|
|
|
// -------+-----------------+-------+-----------------
|
2023-02-01 00:11:08 +08:00
|
|
|
|
// 0-2 | Horizontal | 9-11 | Diagonal down
|
|
|
|
|
// 3-5 | Vertical | 12-15 | From corner
|
|
|
|
|
// 6-8 | Diagonal Up | 16 | From center
|
2017-03-19 17:14:40 +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
|
|
|
|
// The following table shows the pattern styles used in 'Fill.Pattern' supported
|
|
|
|
|
// by excelize index number:
|
2017-03-19 17:14:40 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// Index | Style | Index | Style
|
|
|
|
|
// -------+-----------------+-------+-----------------
|
|
|
|
|
// 0 | None | 10 | darkTrellis
|
|
|
|
|
// 1 | solid | 11 | lightHorizontal
|
|
|
|
|
// 2 | mediumGray | 12 | lightVertical
|
|
|
|
|
// 3 | darkGray | 13 | lightDown
|
|
|
|
|
// 4 | lightGray | 14 | lightUp
|
|
|
|
|
// 5 | darkHorizontal | 15 | lightGrid
|
|
|
|
|
// 6 | darkVertical | 16 | lightTrellis
|
|
|
|
|
// 7 | darkDown | 17 | gray125
|
|
|
|
|
// 8 | darkUp | 18 | gray0625
|
|
|
|
|
// 9 | darkGrid | |
|
2017-03-19 17:14:40 +08:00
|
|
|
|
//
|
2023-05-16 09:44:08 +08:00
|
|
|
|
// The 'Alignment.Indent' is an integer value, where an increment of 1
|
|
|
|
|
// represents 3 spaces. Indicates the number of spaces (of the normal style
|
|
|
|
|
// font) of indentation for text in a cell. The number of spaces to indent is
|
|
|
|
|
// calculated as following:
|
|
|
|
|
//
|
|
|
|
|
// Number of spaces to indent = indent value * 3
|
|
|
|
|
//
|
|
|
|
|
// For example, an indent value of 1 means that the text begins 3 space widths
|
|
|
|
|
// (of the normal style font) from the edge of the cell. Note: The width of one
|
|
|
|
|
// space character is defined by the font. Only left, right, and distributed
|
|
|
|
|
// horizontal alignments are supported.
|
|
|
|
|
//
|
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
|
|
|
|
// The following table shows the type of cells' horizontal alignment used
|
|
|
|
|
// in 'Alignment.Horizontal':
|
2017-03-26 15:27:04 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// Style
|
|
|
|
|
// ------------------
|
|
|
|
|
// left
|
|
|
|
|
// center
|
|
|
|
|
// right
|
|
|
|
|
// fill
|
|
|
|
|
// justify
|
|
|
|
|
// centerContinuous
|
|
|
|
|
// distributed
|
2017-03-26 15:27:04 +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
|
|
|
|
// The following table shows the type of cells' vertical alignment used in
|
|
|
|
|
// 'Alignment.Vertical':
|
2017-03-26 15:27:04 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// Style
|
|
|
|
|
// ------------------
|
|
|
|
|
// top
|
|
|
|
|
// center
|
|
|
|
|
// justify
|
|
|
|
|
// distributed
|
2017-03-26 15:27:04 +08:00
|
|
|
|
//
|
2023-05-16 09:44:08 +08:00
|
|
|
|
// The 'Alignment.ReadingOrder' is an uint64 value indicating whether the
|
|
|
|
|
// reading order of the cell is left-to-right, right-to-left, or context
|
|
|
|
|
// dependent. the valid value of this field was:
|
|
|
|
|
//
|
|
|
|
|
// Value | Description
|
|
|
|
|
// -------+----------------------------------------------------
|
|
|
|
|
// 0 | Context Dependent - reading order is determined by scanning the
|
|
|
|
|
// | text for the first non-whitespace character: if it is a strong
|
|
|
|
|
// | right-to-left character, the reading order is right-to-left;
|
|
|
|
|
// | otherwise, the reading order left-to-right.
|
|
|
|
|
// 1 | Left-to-Right: reading order is left-to-right in the cell, as in
|
|
|
|
|
// | English.
|
|
|
|
|
// 2 | Right-to-Left: reading order is right-to-left in the cell, as in
|
|
|
|
|
// | Hebrew.
|
|
|
|
|
//
|
|
|
|
|
// The 'Alignment.RelativeIndent' is an integer value to indicate the additional
|
|
|
|
|
// number of spaces of indentation to adjust for text in a cell.
|
|
|
|
|
//
|
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
|
|
|
|
// The following table shows the type of font underline style used in
|
|
|
|
|
// 'Font.Underline':
|
2017-04-25 18:43:10 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// Style
|
|
|
|
|
// ------------------
|
2023-02-02 22:02:32 +08:00
|
|
|
|
// none
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// single
|
|
|
|
|
// double
|
2017-04-25 18:43:10 +08:00
|
|
|
|
//
|
2017-07-14 21:15:44 +08:00
|
|
|
|
// Excel's built-in all languages formats are shown in the following table:
|
2017-04-07 17:32:14 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// Index | Format String
|
|
|
|
|
// -------+----------------------------------------------------
|
|
|
|
|
// 0 | General
|
|
|
|
|
// 1 | 0
|
|
|
|
|
// 2 | 0.00
|
|
|
|
|
// 3 | #,##0
|
|
|
|
|
// 4 | #,##0.00
|
|
|
|
|
// 5 | ($#,##0_);($#,##0)
|
|
|
|
|
// 6 | ($#,##0_);[Red]($#,##0)
|
|
|
|
|
// 7 | ($#,##0.00_);($#,##0.00)
|
|
|
|
|
// 8 | ($#,##0.00_);[Red]($#,##0.00)
|
|
|
|
|
// 9 | 0%
|
|
|
|
|
// 10 | 0.00%
|
|
|
|
|
// 11 | 0.00E+00
|
|
|
|
|
// 12 | # ?/?
|
|
|
|
|
// 13 | # ??/??
|
|
|
|
|
// 14 | m/d/yy
|
|
|
|
|
// 15 | d-mmm-yy
|
|
|
|
|
// 16 | d-mmm
|
|
|
|
|
// 17 | mmm-yy
|
|
|
|
|
// 18 | h:mm AM/PM
|
|
|
|
|
// 19 | h:mm:ss AM/PM
|
|
|
|
|
// 20 | h:mm
|
|
|
|
|
// 21 | h:mm:ss
|
|
|
|
|
// 22 | m/d/yy h:mm
|
|
|
|
|
// ... | ...
|
|
|
|
|
// 37 | (#,##0_);(#,##0)
|
|
|
|
|
// 38 | (#,##0_);[Red](#,##0)
|
|
|
|
|
// 39 | (#,##0.00_);(#,##0.00)
|
|
|
|
|
// 40 | (#,##0.00_);[Red](#,##0.00)
|
|
|
|
|
// 41 | _(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)
|
|
|
|
|
// 42 | _($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)
|
|
|
|
|
// 43 | _(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)
|
|
|
|
|
// 44 | _($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)
|
|
|
|
|
// 45 | mm:ss
|
|
|
|
|
// 46 | [h]:mm:ss
|
|
|
|
|
// 47 | mm:ss.0
|
|
|
|
|
// 48 | ##0.0E+0
|
|
|
|
|
// 49 | @
|
2017-07-14 21:15:44 +08:00
|
|
|
|
//
|
2017-07-27 11:46:04 +08:00
|
|
|
|
// Number format code in zh-tw language:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// Index | Symbol
|
|
|
|
|
// -------+-------------------------------------------
|
|
|
|
|
// 27 | [$-404]e/m/d
|
|
|
|
|
// 28 | [$-404]e"年"m"月"d"日"
|
|
|
|
|
// 29 | [$-404]e"年"m"月"d"日"
|
|
|
|
|
// 30 | m/d/yy
|
|
|
|
|
// 31 | yyyy"年"m"月"d"日"
|
|
|
|
|
// 32 | hh"時"mm"分"
|
|
|
|
|
// 33 | hh"時"mm"分"ss"秒"
|
|
|
|
|
// 34 | 上午/下午 hh"時"mm"分"
|
|
|
|
|
// 35 | 上午/下午 hh"時"mm"分"ss"秒"
|
|
|
|
|
// 36 | [$-404]e/m/d
|
|
|
|
|
// 50 | [$-404]e/m/d
|
|
|
|
|
// 51 | [$-404]e"年"m"月"d"日"
|
|
|
|
|
// 52 | 上午/下午 hh"時"mm"分"
|
|
|
|
|
// 53 | 上午/下午 hh"時"mm"分"ss"秒"
|
|
|
|
|
// 54 | [$-404]e"年"m"月"d"日"
|
|
|
|
|
// 55 | 上午/下午 hh"時"mm"分"
|
|
|
|
|
// 56 | 上午/下午 hh"時"mm"分"ss"秒"
|
|
|
|
|
// 57 | [$-404]e/m/d
|
|
|
|
|
// 58 | [$-404]e"年"m"月"d"日"
|
2017-07-27 11:46:04 +08:00
|
|
|
|
//
|
|
|
|
|
// Number format code in zh-cn language:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// Index | Symbol
|
|
|
|
|
// -------+-------------------------------------------
|
|
|
|
|
// 27 | yyyy"年"m"月"
|
|
|
|
|
// 28 | m"月"d"日"
|
|
|
|
|
// 29 | m"月"d"日"
|
|
|
|
|
// 30 | m-d-yy
|
|
|
|
|
// 31 | yyyy"年"m"月"d"日"
|
|
|
|
|
// 32 | h"时"mm"分"
|
|
|
|
|
// 33 | h"时"mm"分"ss"秒"
|
|
|
|
|
// 34 | 上午/下午 h"时"mm"分"
|
|
|
|
|
// 35 | 上午/下午 h"时"mm"分"ss"秒
|
|
|
|
|
// 36 | yyyy"年"m"月
|
|
|
|
|
// 50 | yyyy"年"m"月
|
|
|
|
|
// 51 | m"月"d"日
|
|
|
|
|
// 52 | yyyy"年"m"月
|
|
|
|
|
// 53 | m"月"d"日
|
|
|
|
|
// 54 | m"月"d"日
|
|
|
|
|
// 55 | 上午/下午 h"时"mm"分
|
|
|
|
|
// 56 | 上午/下午 h"时"mm"分"ss"秒
|
|
|
|
|
// 57 | yyyy"年"m"月
|
|
|
|
|
// 58 | m"月"d"日"
|
2017-07-27 11:46:04 +08:00
|
|
|
|
//
|
|
|
|
|
// Number format code in ja-jp language:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// Index | Symbol
|
|
|
|
|
// -------+-------------------------------------------
|
|
|
|
|
// 27 | [$-411]ge.m.d
|
|
|
|
|
// 28 | [$-411]ggge"年"m"月"d"日
|
|
|
|
|
// 29 | [$-411]ggge"年"m"月"d"日
|
|
|
|
|
// 30 | m/d/y
|
|
|
|
|
// 31 | yyyy"年"m"月"d"日
|
|
|
|
|
// 32 | h"時"mm"分
|
|
|
|
|
// 33 | h"時"mm"分"ss"秒
|
|
|
|
|
// 34 | yyyy"年"m"月
|
|
|
|
|
// 35 | m"月"d"日
|
|
|
|
|
// 36 | [$-411]ge.m.d
|
|
|
|
|
// 50 | [$-411]ge.m.d
|
|
|
|
|
// 51 | [$-411]ggge"年"m"月"d"日
|
|
|
|
|
// 52 | yyyy"年"m"月
|
|
|
|
|
// 53 | m"月"d"日
|
|
|
|
|
// 54 | [$-411]ggge"年"m"月"d"日
|
|
|
|
|
// 55 | yyyy"年"m"月
|
|
|
|
|
// 56 | m"月"d"日
|
|
|
|
|
// 57 | [$-411]ge.m.d
|
|
|
|
|
// 58 | [$-411]ggge"年"m"月"d"日"
|
2017-07-27 11:46:04 +08:00
|
|
|
|
//
|
2018-05-03 10:01:41 +08:00
|
|
|
|
// Number format code in ko-kr language:
|
2017-07-27 11:46:04 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// Index | Symbol
|
|
|
|
|
// -------+-------------------------------------------
|
|
|
|
|
// 27 | yyyy"年" mm"月" dd"日
|
|
|
|
|
// 28 | mm-d
|
|
|
|
|
// 29 | mm-d
|
|
|
|
|
// 30 | mm-dd-y
|
|
|
|
|
// 31 | yyyy"년" mm"월" dd"일
|
|
|
|
|
// 32 | h"시" mm"분
|
|
|
|
|
// 33 | h"시" mm"분" ss"초
|
|
|
|
|
// 34 | yyyy-mm-d
|
|
|
|
|
// 35 | yyyy-mm-d
|
|
|
|
|
// 36 | yyyy"年" mm"月" dd"日
|
|
|
|
|
// 50 | yyyy"年" mm"月" dd"日
|
|
|
|
|
// 51 | mm-d
|
|
|
|
|
// 52 | yyyy-mm-d
|
|
|
|
|
// 53 | yyyy-mm-d
|
|
|
|
|
// 54 | mm-d
|
|
|
|
|
// 55 | yyyy-mm-d
|
|
|
|
|
// 56 | yyyy-mm-d
|
|
|
|
|
// 57 | yyyy"年" mm"月" dd"日
|
|
|
|
|
// 58 | mm-dd
|
2017-07-27 11:46:04 +08:00
|
|
|
|
//
|
2018-05-03 10:01:41 +08:00
|
|
|
|
// Number format code in th-th language:
|
2017-07-27 11:46:04 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// Index | Symbol
|
|
|
|
|
// -------+-------------------------------------------
|
|
|
|
|
// 59 | t
|
|
|
|
|
// 60 | t0.0
|
|
|
|
|
// 61 | t#,##
|
|
|
|
|
// 62 | t#,##0.0
|
|
|
|
|
// 67 | t0
|
|
|
|
|
// 68 | t0.00
|
|
|
|
|
// 69 | t# ?/
|
|
|
|
|
// 70 | t# ??/?
|
|
|
|
|
// 71 | ว/ด/ปปป
|
|
|
|
|
// 72 | ว-ดดด-ป
|
|
|
|
|
// 73 | ว-ดด
|
|
|
|
|
// 74 | ดดด-ป
|
|
|
|
|
// 75 | ช:น
|
|
|
|
|
// 76 | ช:นน:ท
|
|
|
|
|
// 77 | ว/ด/ปปปป ช:น
|
|
|
|
|
// 78 | นน:ท
|
|
|
|
|
// 79 | [ช]:นน:ท
|
|
|
|
|
// 80 | นน:ทท.
|
|
|
|
|
// 81 | d/m/bb
|
2017-07-27 11:46:04 +08:00
|
|
|
|
//
|
2017-07-14 21:15:44 +08:00
|
|
|
|
// Excelize built-in currency formats are shown in the following table, only
|
|
|
|
|
// support these types in the following table (Index number is used only for
|
|
|
|
|
// markup and is not used inside an Excel file and you can't get formatted value
|
|
|
|
|
// by the function GetCellValue) currently:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// Index | Symbol
|
|
|
|
|
// -------+---------------------------------------------------------------
|
2023-02-05 00:21:23 +08:00
|
|
|
|
// 164 | ¥
|
|
|
|
|
// 165 | $ English (United States)
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// 166 | $ Cherokee (United States)
|
|
|
|
|
// 167 | $ Chinese (Singapore)
|
|
|
|
|
// 168 | $ Chinese (Taiwan)
|
|
|
|
|
// 169 | $ English (Australia)
|
|
|
|
|
// 170 | $ English (Belize)
|
|
|
|
|
// 171 | $ English (Canada)
|
|
|
|
|
// 172 | $ English (Jamaica)
|
|
|
|
|
// 173 | $ English (New Zealand)
|
|
|
|
|
// 174 | $ English (Singapore)
|
|
|
|
|
// 175 | $ English (Trinidad & Tobago)
|
|
|
|
|
// 176 | $ English (U.S. Virgin Islands)
|
|
|
|
|
// 177 | $ English (United States)
|
|
|
|
|
// 178 | $ French (Canada)
|
|
|
|
|
// 179 | $ Hawaiian (United States)
|
|
|
|
|
// 180 | $ Malay (Brunei)
|
|
|
|
|
// 181 | $ Quechua (Ecuador)
|
|
|
|
|
// 182 | $ Spanish (Chile)
|
|
|
|
|
// 183 | $ Spanish (Colombia)
|
|
|
|
|
// 184 | $ Spanish (Ecuador)
|
|
|
|
|
// 185 | $ Spanish (El Salvador)
|
|
|
|
|
// 186 | $ Spanish (Mexico)
|
|
|
|
|
// 187 | $ Spanish (Puerto Rico)
|
|
|
|
|
// 188 | $ Spanish (United States)
|
|
|
|
|
// 189 | $ Spanish (Uruguay)
|
|
|
|
|
// 190 | £ English (United Kingdom)
|
|
|
|
|
// 191 | £ Scottish Gaelic (United Kingdom)
|
|
|
|
|
// 192 | £ Welsh (United Kindom)
|
|
|
|
|
// 193 | ¥ Chinese (China)
|
|
|
|
|
// 194 | ¥ Japanese (Japan)
|
|
|
|
|
// 195 | ¥ Sichuan Yi (China)
|
|
|
|
|
// 196 | ¥ Tibetan (China)
|
|
|
|
|
// 197 | ¥ Uyghur (China)
|
|
|
|
|
// 198 | ֏ Armenian (Armenia)
|
|
|
|
|
// 199 | ؋ Pashto (Afghanistan)
|
|
|
|
|
// 200 | ؋ Persian (Afghanistan)
|
|
|
|
|
// 201 | ৳ Bengali (Bangladesh)
|
|
|
|
|
// 202 | ៛ Khmer (Cambodia)
|
|
|
|
|
// 203 | ₡ Spanish (Costa Rica)
|
|
|
|
|
// 204 | ₦ Hausa (Nigeria)
|
|
|
|
|
// 205 | ₦ Igbo (Nigeria)
|
2023-02-05 00:21:23 +08:00
|
|
|
|
// 206 | ₩ Korean (South Korea)
|
|
|
|
|
// 207 | ₪ Hebrew (Israel)
|
|
|
|
|
// 208 | ₫ Vietnamese (Vietnam)
|
|
|
|
|
// 209 | € Basque (Spain)
|
|
|
|
|
// 210 | € Breton (France)
|
|
|
|
|
// 211 | € Catalan (Spain)
|
|
|
|
|
// 212 | € Corsican (France)
|
|
|
|
|
// 213 | € Dutch (Belgium)
|
|
|
|
|
// 214 | € Dutch (Netherlands)
|
|
|
|
|
// 215 | € English (Ireland)
|
|
|
|
|
// 216 | € Estonian (Estonia)
|
|
|
|
|
// 217 | € Euro (€ 123)
|
|
|
|
|
// 218 | € Euro (123 €)
|
|
|
|
|
// 219 | € Finnish (Finland)
|
|
|
|
|
// 220 | € French (Belgium)
|
|
|
|
|
// 221 | € French (France)
|
|
|
|
|
// 222 | € French (Luxembourg)
|
|
|
|
|
// 223 | € French (Monaco)
|
|
|
|
|
// 224 | € French (Réunion)
|
|
|
|
|
// 225 | € Galician (Spain)
|
|
|
|
|
// 226 | € German (Austria)
|
|
|
|
|
// 227 | € German (German)
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// 228 | € German (Luxembourg)
|
|
|
|
|
// 229 | € Greek (Greece)
|
|
|
|
|
// 230 | € Inari Sami (Finland)
|
|
|
|
|
// 231 | € Irish (Ireland)
|
|
|
|
|
// 232 | € Italian (Italy)
|
|
|
|
|
// 233 | € Latin (Italy)
|
|
|
|
|
// 234 | € Latin, Serbian (Montenegro)
|
|
|
|
|
// 235 | € Larvian (Latvia)
|
|
|
|
|
// 236 | € Lithuanian (Lithuania)
|
|
|
|
|
// 237 | € Lower Sorbian (Germany)
|
|
|
|
|
// 238 | € Luxembourgish (Luxembourg)
|
|
|
|
|
// 239 | € Maltese (Malta)
|
|
|
|
|
// 240 | € Northern Sami (Finland)
|
|
|
|
|
// 241 | € Occitan (France)
|
|
|
|
|
// 242 | € Portuguese (Portugal)
|
|
|
|
|
// 243 | € Serbian (Montenegro)
|
|
|
|
|
// 244 | € Skolt Sami (Finland)
|
|
|
|
|
// 245 | € Slovak (Slovakia)
|
|
|
|
|
// 246 | € Slovenian (Slovenia)
|
|
|
|
|
// 247 | € Spanish (Spain)
|
|
|
|
|
// 248 | € Swedish (Finland)
|
|
|
|
|
// 249 | € Swiss German (France)
|
|
|
|
|
// 250 | € Upper Sorbian (Germany)
|
|
|
|
|
// 251 | € Western Frisian (Netherlands)
|
|
|
|
|
// 252 | ₭ Lao (Laos)
|
|
|
|
|
// 253 | ₮ Mongolian (Mongolia)
|
|
|
|
|
// 254 | ₮ Mongolian, Mongolian (Mongolia)
|
|
|
|
|
// 255 | ₱ English (Philippines)
|
|
|
|
|
// 256 | ₱ Filipino (Philippines)
|
|
|
|
|
// 257 | ₴ Ukrainian (Ukraine)
|
|
|
|
|
// 258 | ₸ Kazakh (Kazakhstan)
|
|
|
|
|
// 259 | ₹ Arabic, Kashmiri (India)
|
|
|
|
|
// 260 | ₹ English (India)
|
|
|
|
|
// 261 | ₹ Gujarati (India)
|
|
|
|
|
// 262 | ₹ Hindi (India)
|
|
|
|
|
// 263 | ₹ Kannada (India)
|
|
|
|
|
// 264 | ₹ Kashmiri (India)
|
|
|
|
|
// 265 | ₹ Konkani (India)
|
|
|
|
|
// 266 | ₹ Manipuri (India)
|
|
|
|
|
// 267 | ₹ Marathi (India)
|
|
|
|
|
// 268 | ₹ Nepali (India)
|
|
|
|
|
// 269 | ₹ Oriya (India)
|
|
|
|
|
// 270 | ₹ Punjabi (India)
|
|
|
|
|
// 271 | ₹ Sanskrit (India)
|
|
|
|
|
// 272 | ₹ Sindhi (India)
|
|
|
|
|
// 273 | ₹ Tamil (India)
|
|
|
|
|
// 274 | ₹ Urdu (India)
|
|
|
|
|
// 275 | ₺ Turkish (Turkey)
|
|
|
|
|
// 276 | ₼ Azerbaijani (Azerbaijan)
|
|
|
|
|
// 277 | ₼ Cyrillic, Azerbaijani (Azerbaijan)
|
|
|
|
|
// 278 | ₽ Russian (Russia)
|
|
|
|
|
// 279 | ₽ Sakha (Russia)
|
|
|
|
|
// 280 | ₾ Georgian (Georgia)
|
|
|
|
|
// 281 | B/. Spanish (Panama)
|
|
|
|
|
// 282 | Br Oromo (Ethiopia)
|
|
|
|
|
// 283 | Br Somali (Ethiopia)
|
|
|
|
|
// 284 | Br Tigrinya (Ethiopia)
|
|
|
|
|
// 285 | Bs Quechua (Bolivia)
|
|
|
|
|
// 286 | Bs Spanish (Bolivia)
|
|
|
|
|
// 287 | BS. Spanish (Venezuela)
|
|
|
|
|
// 288 | BWP Tswana (Botswana)
|
|
|
|
|
// 289 | C$ Spanish (Nicaragua)
|
|
|
|
|
// 290 | CA$ Latin, Inuktitut (Canada)
|
|
|
|
|
// 291 | CA$ Mohawk (Canada)
|
|
|
|
|
// 292 | CA$ Unified Canadian Aboriginal Syllabics, Inuktitut (Canada)
|
|
|
|
|
// 293 | CFA French (Mali)
|
|
|
|
|
// 294 | CFA French (Senegal)
|
|
|
|
|
// 295 | CFA Fulah (Senegal)
|
|
|
|
|
// 296 | CFA Wolof (Senegal)
|
|
|
|
|
// 297 | CHF French (Switzerland)
|
|
|
|
|
// 298 | CHF German (Liechtenstein)
|
|
|
|
|
// 299 | CHF German (Switzerland)
|
|
|
|
|
// 300 | CHF Italian (Switzerland)
|
|
|
|
|
// 301 | CHF Romansh (Switzerland)
|
|
|
|
|
// 302 | CLP Mapuche (Chile)
|
|
|
|
|
// 303 | CN¥ Mongolian, Mongolian (China)
|
|
|
|
|
// 304 | DZD Central Atlas Tamazight (Algeria)
|
|
|
|
|
// 305 | FCFA French (Cameroon)
|
|
|
|
|
// 306 | Ft Hungarian (Hungary)
|
|
|
|
|
// 307 | G French (Haiti)
|
|
|
|
|
// 308 | Gs. Spanish (Paraguay)
|
|
|
|
|
// 309 | GTQ K'iche' (Guatemala)
|
|
|
|
|
// 310 | HK$ Chinese (Hong Kong (China))
|
|
|
|
|
// 311 | HK$ English (Hong Kong (China))
|
|
|
|
|
// 312 | HRK Croatian (Croatia)
|
|
|
|
|
// 313 | IDR English (Indonesia)
|
|
|
|
|
// 314 | IQD Arbic, Central Kurdish (Iraq)
|
|
|
|
|
// 315 | ISK Icelandic (Iceland)
|
|
|
|
|
// 316 | K Burmese (Myanmar (Burma))
|
|
|
|
|
// 317 | Kč Czech (Czech Republic)
|
|
|
|
|
// 318 | KM Bosnian (Bosnia & Herzegovina)
|
|
|
|
|
// 319 | KM Croatian (Bosnia & Herzegovina)
|
|
|
|
|
// 320 | KM Latin, Serbian (Bosnia & Herzegovina)
|
|
|
|
|
// 321 | kr Faroese (Faroe Islands)
|
|
|
|
|
// 322 | kr Northern Sami (Norway)
|
|
|
|
|
// 323 | kr Northern Sami (Sweden)
|
|
|
|
|
// 324 | kr Norwegian Bokmål (Norway)
|
|
|
|
|
// 325 | kr Norwegian Nynorsk (Norway)
|
|
|
|
|
// 326 | kr Swedish (Sweden)
|
|
|
|
|
// 327 | kr. Danish (Denmark)
|
|
|
|
|
// 328 | kr. Kalaallisut (Greenland)
|
|
|
|
|
// 329 | Ksh Swahili (kenya)
|
|
|
|
|
// 330 | L Romanian (Moldova)
|
|
|
|
|
// 331 | L Russian (Moldova)
|
|
|
|
|
// 332 | L Spanish (Honduras)
|
|
|
|
|
// 333 | Lekë Albanian (Albania)
|
|
|
|
|
// 334 | MAD Arabic, Central Atlas Tamazight (Morocco)
|
|
|
|
|
// 335 | MAD French (Morocco)
|
|
|
|
|
// 336 | MAD Tifinagh, Central Atlas Tamazight (Morocco)
|
|
|
|
|
// 337 | MOP$ Chinese (Macau (China))
|
|
|
|
|
// 338 | MVR Divehi (Maldives)
|
|
|
|
|
// 339 | Nfk Tigrinya (Eritrea)
|
|
|
|
|
// 340 | NGN Bini (Nigeria)
|
|
|
|
|
// 341 | NGN Fulah (Nigeria)
|
|
|
|
|
// 342 | NGN Ibibio (Nigeria)
|
|
|
|
|
// 343 | NGN Kanuri (Nigeria)
|
|
|
|
|
// 344 | NOK Lule Sami (Norway)
|
|
|
|
|
// 345 | NOK Southern Sami (Norway)
|
|
|
|
|
// 346 | NZ$ Maori (New Zealand)
|
|
|
|
|
// 347 | PKR Sindhi (Pakistan)
|
|
|
|
|
// 348 | PYG Guarani (Paraguay)
|
|
|
|
|
// 349 | Q Spanish (Guatemala)
|
|
|
|
|
// 350 | R Afrikaans (South Africa)
|
|
|
|
|
// 351 | R English (South Africa)
|
|
|
|
|
// 352 | R Zulu (South Africa)
|
|
|
|
|
// 353 | R$ Portuguese (Brazil)
|
|
|
|
|
// 354 | RD$ Spanish (Dominican Republic)
|
|
|
|
|
// 355 | RF Kinyarwanda (Rwanda)
|
|
|
|
|
// 356 | RM English (Malaysia)
|
|
|
|
|
// 357 | RM Malay (Malaysia)
|
|
|
|
|
// 358 | RON Romanian (Romania)
|
|
|
|
|
// 359 | Rp Indonesoan (Indonesia)
|
|
|
|
|
// 360 | Rs Urdu (Pakistan)
|
|
|
|
|
// 361 | Rs. Tamil (Sri Lanka)
|
|
|
|
|
// 362 | RSD Latin, Serbian (Serbia)
|
|
|
|
|
// 363 | RSD Serbian (Serbia)
|
|
|
|
|
// 364 | RUB Bashkir (Russia)
|
|
|
|
|
// 365 | RUB Tatar (Russia)
|
|
|
|
|
// 366 | S/. Quechua (Peru)
|
|
|
|
|
// 367 | S/. Spanish (Peru)
|
|
|
|
|
// 368 | SEK Lule Sami (Sweden)
|
|
|
|
|
// 369 | SEK Southern Sami (Sweden)
|
|
|
|
|
// 370 | soʻm Latin, Uzbek (Uzbekistan)
|
|
|
|
|
// 371 | soʻm Uzbek (Uzbekistan)
|
|
|
|
|
// 372 | SYP Syriac (Syria)
|
|
|
|
|
// 373 | THB Thai (Thailand)
|
|
|
|
|
// 374 | TMT Turkmen (Turkmenistan)
|
|
|
|
|
// 375 | US$ English (Zimbabwe)
|
|
|
|
|
// 376 | ZAR Northern Sotho (South Africa)
|
|
|
|
|
// 377 | ZAR Southern Sotho (South Africa)
|
|
|
|
|
// 378 | ZAR Tsonga (South Africa)
|
|
|
|
|
// 379 | ZAR Tswana (south Africa)
|
|
|
|
|
// 380 | ZAR Venda (South Africa)
|
|
|
|
|
// 381 | ZAR Xhosa (South Africa)
|
|
|
|
|
// 382 | zł Polish (Poland)
|
|
|
|
|
// 383 | ден Macedonian (Macedonia)
|
|
|
|
|
// 384 | KM Cyrillic, Bosnian (Bosnia & Herzegovina)
|
|
|
|
|
// 385 | KM Serbian (Bosnia & Herzegovina)
|
|
|
|
|
// 386 | лв. Bulgarian (Bulgaria)
|
|
|
|
|
// 387 | p. Belarusian (Belarus)
|
|
|
|
|
// 388 | сом Kyrgyz (Kyrgyzstan)
|
|
|
|
|
// 389 | сом Tajik (Tajikistan)
|
|
|
|
|
// 390 | ج.م. Arabic (Egypt)
|
|
|
|
|
// 391 | د.أ. Arabic (Jordan)
|
|
|
|
|
// 392 | د.أ. Arabic (United Arab Emirates)
|
|
|
|
|
// 393 | د.ب. Arabic (Bahrain)
|
|
|
|
|
// 394 | د.ت. Arabic (Tunisia)
|
|
|
|
|
// 395 | د.ج. Arabic (Algeria)
|
|
|
|
|
// 396 | د.ع. Arabic (Iraq)
|
|
|
|
|
// 397 | د.ك. Arabic (Kuwait)
|
|
|
|
|
// 398 | د.ل. Arabic (Libya)
|
|
|
|
|
// 399 | د.م. Arabic (Morocco)
|
|
|
|
|
// 400 | ر Punjabi (Pakistan)
|
|
|
|
|
// 401 | ر.س. Arabic (Saudi Arabia)
|
|
|
|
|
// 402 | ر.ع. Arabic (Oman)
|
|
|
|
|
// 403 | ر.ق. Arabic (Qatar)
|
|
|
|
|
// 404 | ر.ي. Arabic (Yemen)
|
|
|
|
|
// 405 | ریال Persian (Iran)
|
|
|
|
|
// 406 | ل.س. Arabic (Syria)
|
|
|
|
|
// 407 | ل.ل. Arabic (Lebanon)
|
|
|
|
|
// 408 | ብር Amharic (Ethiopia)
|
|
|
|
|
// 409 | रू Nepaol (Nepal)
|
|
|
|
|
// 410 | රු. Sinhala (Sri Lanka)
|
|
|
|
|
// 411 | ADP
|
|
|
|
|
// 412 | AED
|
|
|
|
|
// 413 | AFA
|
|
|
|
|
// 414 | AFN
|
|
|
|
|
// 415 | ALL
|
|
|
|
|
// 416 | AMD
|
|
|
|
|
// 417 | ANG
|
|
|
|
|
// 418 | AOA
|
|
|
|
|
// 419 | ARS
|
|
|
|
|
// 420 | ATS
|
|
|
|
|
// 421 | AUD
|
|
|
|
|
// 422 | AWG
|
|
|
|
|
// 423 | AZM
|
|
|
|
|
// 424 | AZN
|
|
|
|
|
// 425 | BAM
|
|
|
|
|
// 426 | BBD
|
|
|
|
|
// 427 | BDT
|
|
|
|
|
// 428 | BEF
|
|
|
|
|
// 429 | BGL
|
|
|
|
|
// 430 | BGN
|
|
|
|
|
// 431 | BHD
|
|
|
|
|
// 432 | BIF
|
|
|
|
|
// 433 | BMD
|
|
|
|
|
// 434 | BND
|
|
|
|
|
// 435 | BOB
|
|
|
|
|
// 436 | BOV
|
|
|
|
|
// 437 | BRL
|
|
|
|
|
// 438 | BSD
|
|
|
|
|
// 439 | BTN
|
|
|
|
|
// 440 | BWP
|
|
|
|
|
// 441 | BYR
|
|
|
|
|
// 442 | BZD
|
|
|
|
|
// 443 | CAD
|
|
|
|
|
// 444 | CDF
|
|
|
|
|
// 445 | CHE
|
|
|
|
|
// 446 | CHF
|
|
|
|
|
// 447 | CHW
|
|
|
|
|
// 448 | CLF
|
|
|
|
|
// 449 | CLP
|
|
|
|
|
// 450 | CNY
|
|
|
|
|
// 451 | COP
|
|
|
|
|
// 452 | COU
|
|
|
|
|
// 453 | CRC
|
|
|
|
|
// 454 | CSD
|
|
|
|
|
// 455 | CUC
|
|
|
|
|
// 456 | CVE
|
|
|
|
|
// 457 | CYP
|
|
|
|
|
// 458 | CZK
|
|
|
|
|
// 459 | DEM
|
|
|
|
|
// 460 | DJF
|
|
|
|
|
// 461 | DKK
|
|
|
|
|
// 462 | DOP
|
|
|
|
|
// 463 | DZD
|
|
|
|
|
// 464 | ECS
|
|
|
|
|
// 465 | ECV
|
|
|
|
|
// 466 | EEK
|
|
|
|
|
// 467 | EGP
|
|
|
|
|
// 468 | ERN
|
|
|
|
|
// 469 | ESP
|
|
|
|
|
// 470 | ETB
|
|
|
|
|
// 471 | EUR
|
|
|
|
|
// 472 | FIM
|
|
|
|
|
// 473 | FJD
|
|
|
|
|
// 474 | FKP
|
|
|
|
|
// 475 | FRF
|
|
|
|
|
// 476 | GBP
|
|
|
|
|
// 477 | GEL
|
|
|
|
|
// 478 | GHC
|
|
|
|
|
// 479 | GHS
|
|
|
|
|
// 480 | GIP
|
|
|
|
|
// 481 | GMD
|
|
|
|
|
// 482 | GNF
|
|
|
|
|
// 483 | GRD
|
|
|
|
|
// 484 | GTQ
|
|
|
|
|
// 485 | GYD
|
|
|
|
|
// 486 | HKD
|
|
|
|
|
// 487 | HNL
|
|
|
|
|
// 488 | HRK
|
|
|
|
|
// 489 | HTG
|
|
|
|
|
// 490 | HUF
|
|
|
|
|
// 491 | IDR
|
|
|
|
|
// 492 | IEP
|
|
|
|
|
// 493 | ILS
|
|
|
|
|
// 494 | INR
|
|
|
|
|
// 495 | IQD
|
|
|
|
|
// 496 | IRR
|
|
|
|
|
// 497 | ISK
|
|
|
|
|
// 498 | ITL
|
|
|
|
|
// 499 | JMD
|
|
|
|
|
// 500 | JOD
|
|
|
|
|
// 501 | JPY
|
|
|
|
|
// 502 | KAF
|
|
|
|
|
// 503 | KES
|
|
|
|
|
// 504 | KGS
|
|
|
|
|
// 505 | KHR
|
|
|
|
|
// 506 | KMF
|
|
|
|
|
// 507 | KPW
|
|
|
|
|
// 508 | KRW
|
|
|
|
|
// 509 | KWD
|
|
|
|
|
// 510 | KYD
|
|
|
|
|
// 511 | KZT
|
|
|
|
|
// 512 | LAK
|
|
|
|
|
// 513 | LBP
|
|
|
|
|
// 514 | LKR
|
|
|
|
|
// 515 | LRD
|
|
|
|
|
// 516 | LSL
|
|
|
|
|
// 517 | LTL
|
|
|
|
|
// 518 | LUF
|
|
|
|
|
// 519 | LVL
|
|
|
|
|
// 520 | LYD
|
|
|
|
|
// 521 | MAD
|
|
|
|
|
// 522 | MDL
|
|
|
|
|
// 523 | MGA
|
|
|
|
|
// 524 | MGF
|
|
|
|
|
// 525 | MKD
|
|
|
|
|
// 526 | MMK
|
|
|
|
|
// 527 | MNT
|
|
|
|
|
// 528 | MOP
|
|
|
|
|
// 529 | MRO
|
|
|
|
|
// 530 | MTL
|
|
|
|
|
// 531 | MUR
|
|
|
|
|
// 532 | MVR
|
|
|
|
|
// 533 | MWK
|
|
|
|
|
// 534 | MXN
|
|
|
|
|
// 535 | MXV
|
|
|
|
|
// 536 | MYR
|
|
|
|
|
// 537 | MZM
|
|
|
|
|
// 538 | MZN
|
|
|
|
|
// 539 | NAD
|
|
|
|
|
// 540 | NGN
|
|
|
|
|
// 541 | NIO
|
|
|
|
|
// 542 | NLG
|
|
|
|
|
// 543 | NOK
|
|
|
|
|
// 544 | NPR
|
|
|
|
|
// 545 | NTD
|
|
|
|
|
// 546 | NZD
|
|
|
|
|
// 547 | OMR
|
|
|
|
|
// 548 | PAB
|
|
|
|
|
// 549 | PEN
|
|
|
|
|
// 550 | PGK
|
|
|
|
|
// 551 | PHP
|
|
|
|
|
// 552 | PKR
|
|
|
|
|
// 553 | PLN
|
|
|
|
|
// 554 | PTE
|
|
|
|
|
// 555 | PYG
|
|
|
|
|
// 556 | QAR
|
|
|
|
|
// 557 | ROL
|
|
|
|
|
// 558 | RON
|
|
|
|
|
// 559 | RSD
|
|
|
|
|
// 560 | RUB
|
|
|
|
|
// 561 | RUR
|
|
|
|
|
// 562 | RWF
|
|
|
|
|
// 563 | SAR
|
|
|
|
|
// 564 | SBD
|
|
|
|
|
// 565 | SCR
|
|
|
|
|
// 566 | SDD
|
|
|
|
|
// 567 | SDG
|
|
|
|
|
// 568 | SDP
|
|
|
|
|
// 569 | SEK
|
|
|
|
|
// 570 | SGD
|
|
|
|
|
// 571 | SHP
|
|
|
|
|
// 572 | SIT
|
|
|
|
|
// 573 | SKK
|
|
|
|
|
// 574 | SLL
|
|
|
|
|
// 575 | SOS
|
|
|
|
|
// 576 | SPL
|
|
|
|
|
// 577 | SRD
|
|
|
|
|
// 578 | SRG
|
|
|
|
|
// 579 | STD
|
|
|
|
|
// 580 | SVC
|
|
|
|
|
// 581 | SYP
|
|
|
|
|
// 582 | SZL
|
|
|
|
|
// 583 | THB
|
|
|
|
|
// 584 | TJR
|
|
|
|
|
// 585 | TJS
|
|
|
|
|
// 586 | TMM
|
|
|
|
|
// 587 | TMT
|
|
|
|
|
// 588 | TND
|
|
|
|
|
// 589 | TOP
|
|
|
|
|
// 590 | TRL
|
|
|
|
|
// 591 | TRY
|
|
|
|
|
// 592 | TTD
|
|
|
|
|
// 593 | TWD
|
|
|
|
|
// 594 | TZS
|
|
|
|
|
// 595 | UAH
|
|
|
|
|
// 596 | UGX
|
|
|
|
|
// 597 | USD
|
|
|
|
|
// 598 | USN
|
|
|
|
|
// 599 | USS
|
|
|
|
|
// 600 | UYI
|
|
|
|
|
// 601 | UYU
|
|
|
|
|
// 602 | UZS
|
|
|
|
|
// 603 | VEB
|
|
|
|
|
// 604 | VEF
|
|
|
|
|
// 605 | VND
|
|
|
|
|
// 606 | VUV
|
|
|
|
|
// 607 | WST
|
|
|
|
|
// 608 | XAF
|
|
|
|
|
// 609 | XAG
|
|
|
|
|
// 610 | XAU
|
|
|
|
|
// 611 | XB5
|
|
|
|
|
// 612 | XBA
|
|
|
|
|
// 613 | XBB
|
|
|
|
|
// 614 | XBC
|
|
|
|
|
// 615 | XBD
|
|
|
|
|
// 616 | XCD
|
|
|
|
|
// 617 | XDR
|
|
|
|
|
// 618 | XFO
|
|
|
|
|
// 619 | XFU
|
|
|
|
|
// 620 | XOF
|
|
|
|
|
// 621 | XPD
|
|
|
|
|
// 622 | XPF
|
|
|
|
|
// 623 | XPT
|
|
|
|
|
// 624 | XTS
|
|
|
|
|
// 625 | XXX
|
|
|
|
|
// 626 | YER
|
|
|
|
|
// 627 | YUM
|
|
|
|
|
// 628 | ZAR
|
|
|
|
|
// 629 | ZMK
|
|
|
|
|
// 630 | ZMW
|
|
|
|
|
// 631 | ZWD
|
|
|
|
|
// 632 | ZWL
|
|
|
|
|
// 633 | ZWN
|
|
|
|
|
// 634 | ZWR
|
2017-07-26 18:37:00 +08:00
|
|
|
|
//
|
2017-07-27 11:46:04 +08:00
|
|
|
|
// Excelize support set custom number format for cell. For example, set number
|
2017-07-27 15:38:58 +08:00
|
|
|
|
// as date type in Uruguay (Spanish) format for Sheet1!A6:
|
2017-07-26 18:37:00 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// f := excelize.NewFile()
|
2023-01-02 11:47:31 +08:00
|
|
|
|
// defer func() {
|
|
|
|
|
// if err := f.Close(); err != nil {
|
|
|
|
|
// fmt.Println(err)
|
|
|
|
|
// }
|
|
|
|
|
// }()
|
|
|
|
|
// if err := f.SetCellValue("Sheet1", "A6", 42920.5); err != nil {
|
|
|
|
|
// fmt.Println(err)
|
|
|
|
|
// return
|
|
|
|
|
// }
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// exp := "[$-380A]dddd\\,\\ dd\" de \"mmmm\" de \"yyyy;@"
|
|
|
|
|
// style, err := f.NewStyle(&excelize.Style{CustomNumFmt: &exp})
|
2023-01-02 11:47:31 +08:00
|
|
|
|
// if err != nil {
|
|
|
|
|
// fmt.Println(err)
|
|
|
|
|
// return
|
|
|
|
|
// }
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// err = f.SetCellStyle("Sheet1", "A6", "A6", style)
|
2017-07-27 15:38:58 +08:00
|
|
|
|
//
|
|
|
|
|
// Cell Sheet1!A6 in the Excel Application: martes, 04 de Julio de 2017
|
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
|
|
|
|
func (f *File) NewStyle(style *Style) (int, error) {
|
2022-11-12 00:02:11 +08:00
|
|
|
|
var (
|
|
|
|
|
fs *Style
|
|
|
|
|
font *xlsxFont
|
|
|
|
|
err error
|
|
|
|
|
cellXfsID, fontID, borderID, fillID int
|
|
|
|
|
)
|
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
|
|
|
|
if style == nil {
|
|
|
|
|
return cellXfsID, err
|
|
|
|
|
}
|
2020-09-18 22:20:58 +08:00
|
|
|
|
fs, err = parseFormatStyleSet(style)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return cellXfsID, err
|
2017-03-06 12:05:41 +08:00
|
|
|
|
}
|
2023-07-08 18:36:35 +08:00
|
|
|
|
if fs.DecimalPlaces != nil && (*fs.DecimalPlaces < 0 || *fs.DecimalPlaces > 30) {
|
|
|
|
|
fs.DecimalPlaces = intPtr(2)
|
2020-05-25 00:22:58 +08:00
|
|
|
|
}
|
2023-04-25 08:44:41 +08:00
|
|
|
|
f.mu.Lock()
|
2022-11-12 00:02:11 +08:00
|
|
|
|
s, err := f.stylesReader()
|
|
|
|
|
if err != nil {
|
2023-04-25 08:44:41 +08:00
|
|
|
|
f.mu.Unlock()
|
2022-11-12 00:02:11 +08:00
|
|
|
|
return cellXfsID, err
|
|
|
|
|
}
|
2023-04-25 08:44:41 +08:00
|
|
|
|
f.mu.Unlock()
|
2023-04-24 00:02:13 +08:00
|
|
|
|
s.mu.Lock()
|
|
|
|
|
defer s.mu.Unlock()
|
2020-05-24 20:20:22 +08:00
|
|
|
|
// check given style already exist.
|
2022-11-12 00:02:11 +08:00
|
|
|
|
if cellXfsID, err = f.getStyleID(s, fs); err != nil || cellXfsID != -1 {
|
2020-05-24 20:20:22 +08:00
|
|
|
|
return cellXfsID, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
numFmtID := newNumFmt(s, fs)
|
2017-08-11 23:15:33 +08:00
|
|
|
|
|
|
|
|
|
if fs.Font != nil {
|
2022-11-12 00:02:11 +08:00
|
|
|
|
fontID, _ = f.getFontID(s, fs)
|
2020-05-24 20:20:22 +08:00
|
|
|
|
if fontID == -1 {
|
|
|
|
|
s.Fonts.Count++
|
2022-11-12 00:02:11 +08:00
|
|
|
|
font, _ = f.newFont(fs)
|
|
|
|
|
s.Fonts.Font = append(s.Fonts.Font, font)
|
2020-05-24 20:20:22 +08:00
|
|
|
|
fontID = s.Fonts.Count - 1
|
|
|
|
|
}
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
2020-05-24 20:20:22 +08:00
|
|
|
|
borderID = getBorderID(s, fs)
|
|
|
|
|
if borderID == -1 {
|
|
|
|
|
if len(fs.Border) == 0 {
|
|
|
|
|
borderID = 0
|
|
|
|
|
} else {
|
|
|
|
|
s.Borders.Count++
|
|
|
|
|
s.Borders.Border = append(s.Borders.Border, newBorders(fs))
|
|
|
|
|
borderID = s.Borders.Count - 1
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-08-11 23:15:33 +08:00
|
|
|
|
|
2020-05-24 20:20:22 +08:00
|
|
|
|
if fillID = getFillID(s, fs); fillID == -1 {
|
|
|
|
|
if fill := newFills(fs, true); fill != nil {
|
|
|
|
|
s.Fills.Count++
|
|
|
|
|
s.Fills.Fill = append(s.Fills.Fill, fill)
|
|
|
|
|
fillID = s.Fills.Count - 1
|
|
|
|
|
} else {
|
|
|
|
|
fillID = 0
|
|
|
|
|
}
|
2019-01-09 23:12:53 +08:00
|
|
|
|
}
|
2017-08-11 23:15:33 +08:00
|
|
|
|
|
2020-05-24 20:20:22 +08:00
|
|
|
|
applyAlignment, alignment := fs.Alignment != nil, newAlignment(fs)
|
|
|
|
|
applyProtection, protection := fs.Protection != nil, newProtection(fs)
|
2023-02-02 22:02:32 +08:00
|
|
|
|
return setCellXfs(s, fontID, numFmtID, fillID, borderID, applyAlignment, applyProtection, alignment, protection)
|
2017-03-06 12:05:41 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-08-24 23:51:07 +08:00
|
|
|
|
var (
|
|
|
|
|
// styleBorders list all types of the cell border style.
|
|
|
|
|
styleBorders = []string{
|
|
|
|
|
"none",
|
|
|
|
|
"thin",
|
|
|
|
|
"medium",
|
|
|
|
|
"dashed",
|
|
|
|
|
"dotted",
|
|
|
|
|
"thick",
|
|
|
|
|
"double",
|
|
|
|
|
"hair",
|
|
|
|
|
"mediumDashed",
|
|
|
|
|
"dashDot",
|
|
|
|
|
"mediumDashDot",
|
|
|
|
|
"dashDotDot",
|
|
|
|
|
"mediumDashDotDot",
|
|
|
|
|
"slantDashDot",
|
|
|
|
|
}
|
|
|
|
|
// styleBorderTypes list all types of the cell border.
|
|
|
|
|
styleBorderTypes = []string{
|
|
|
|
|
"left", "right", "top", "bottom", "diagonalUp", "diagonalDown",
|
|
|
|
|
}
|
|
|
|
|
// styleFillPatterns list all types of the cell fill style.
|
|
|
|
|
styleFillPatterns = []string{
|
|
|
|
|
"none",
|
|
|
|
|
"solid",
|
|
|
|
|
"mediumGray",
|
|
|
|
|
"darkGray",
|
|
|
|
|
"lightGray",
|
|
|
|
|
"darkHorizontal",
|
|
|
|
|
"darkVertical",
|
|
|
|
|
"darkDown",
|
|
|
|
|
"darkUp",
|
|
|
|
|
"darkGrid",
|
|
|
|
|
"darkTrellis",
|
|
|
|
|
"lightHorizontal",
|
|
|
|
|
"lightVertical",
|
|
|
|
|
"lightDown",
|
|
|
|
|
"lightUp",
|
|
|
|
|
"lightGrid",
|
|
|
|
|
"lightTrellis",
|
|
|
|
|
"gray125",
|
|
|
|
|
"gray0625",
|
|
|
|
|
}
|
|
|
|
|
// styleFillVariants list all preset variants of the fill style.
|
|
|
|
|
styleFillVariants = []xlsxGradientFill{
|
|
|
|
|
{Degree: 90, Stop: []*xlsxGradientFillStop{{}, {Position: 1}}},
|
|
|
|
|
{Degree: 270, Stop: []*xlsxGradientFillStop{{}, {Position: 1}}},
|
|
|
|
|
{Degree: 90, Stop: []*xlsxGradientFillStop{{}, {Position: 0.5}, {Position: 1}}},
|
|
|
|
|
{Stop: []*xlsxGradientFillStop{{}, {Position: 1}}},
|
|
|
|
|
{Degree: 180, Stop: []*xlsxGradientFillStop{{}, {Position: 1}}},
|
|
|
|
|
{Stop: []*xlsxGradientFillStop{{}, {Position: 0.5}, {Position: 1}}},
|
|
|
|
|
{Degree: 45, Stop: []*xlsxGradientFillStop{{}, {Position: 1}}},
|
|
|
|
|
{Degree: 255, Stop: []*xlsxGradientFillStop{{}, {Position: 1}}},
|
|
|
|
|
{Degree: 45, Stop: []*xlsxGradientFillStop{{}, {Position: 0.5}, {Position: 1}}},
|
|
|
|
|
{Degree: 135, Stop: []*xlsxGradientFillStop{{}, {Position: 1}}},
|
|
|
|
|
{Degree: 315, Stop: []*xlsxGradientFillStop{{}, {Position: 1}}},
|
|
|
|
|
{Degree: 135, Stop: []*xlsxGradientFillStop{{}, {Position: 0.5}, {Position: 1}}},
|
|
|
|
|
{Stop: []*xlsxGradientFillStop{{}, {Position: 1}}, Type: "path"},
|
|
|
|
|
{Stop: []*xlsxGradientFillStop{{}, {Position: 1}}, Type: "path", Left: 1, Right: 1},
|
|
|
|
|
{Stop: []*xlsxGradientFillStop{{}, {Position: 1}}, Type: "path", Bottom: 1, Top: 1},
|
|
|
|
|
{Stop: []*xlsxGradientFillStop{{}, {Position: 1}}, Type: "path", Bottom: 1, Left: 1, Right: 1, Top: 1},
|
|
|
|
|
{Stop: []*xlsxGradientFillStop{{}, {Position: 1}}, Type: "path", Bottom: 0.5, Left: 0.5, Right: 0.5, Top: 0.5},
|
|
|
|
|
}
|
2023-09-21 00:06:31 +08:00
|
|
|
|
// getXfIDFuncs provides a function to get xfID by given style.
|
|
|
|
|
getXfIDFuncs = map[string]func(int, xlsxXf, *Style) bool{
|
|
|
|
|
"numFmt": func(numFmtID int, xf xlsxXf, style *Style) bool {
|
|
|
|
|
if style.CustomNumFmt == nil && numFmtID == -1 {
|
|
|
|
|
return xf.NumFmtID != nil && *xf.NumFmtID == 0
|
|
|
|
|
}
|
|
|
|
|
if style.NegRed || (style.DecimalPlaces != nil && *style.DecimalPlaces != 2) {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
return xf.NumFmtID != nil && *xf.NumFmtID == numFmtID
|
|
|
|
|
},
|
|
|
|
|
"font": func(fontID int, xf xlsxXf, style *Style) bool {
|
|
|
|
|
if style.Font == nil {
|
|
|
|
|
return (xf.FontID == nil || *xf.FontID == 0) && (xf.ApplyFont == nil || !*xf.ApplyFont)
|
|
|
|
|
}
|
|
|
|
|
return xf.FontID != nil && *xf.FontID == fontID && xf.ApplyFont != nil && *xf.ApplyFont
|
|
|
|
|
},
|
|
|
|
|
"fill": func(fillID int, xf xlsxXf, style *Style) bool {
|
|
|
|
|
if style.Fill.Type == "" {
|
|
|
|
|
return (xf.FillID == nil || *xf.FillID == 0) && (xf.ApplyFill == nil || !*xf.ApplyFill)
|
|
|
|
|
}
|
|
|
|
|
return xf.FillID != nil && *xf.FillID == fillID && xf.ApplyFill != nil && *xf.ApplyFill
|
|
|
|
|
},
|
|
|
|
|
"border": func(borderID int, xf xlsxXf, style *Style) bool {
|
|
|
|
|
if len(style.Border) == 0 {
|
|
|
|
|
return (xf.BorderID == nil || *xf.BorderID == 0) && (xf.ApplyBorder == nil || !*xf.ApplyBorder)
|
|
|
|
|
}
|
|
|
|
|
return xf.BorderID != nil && *xf.BorderID == borderID && xf.ApplyBorder != nil && *xf.ApplyBorder
|
|
|
|
|
},
|
|
|
|
|
"alignment": func(ID int, xf xlsxXf, style *Style) bool {
|
|
|
|
|
if style.Alignment == nil {
|
|
|
|
|
return xf.ApplyAlignment == nil || !*xf.ApplyAlignment
|
|
|
|
|
}
|
|
|
|
|
return reflect.DeepEqual(xf.Alignment, newAlignment(style))
|
|
|
|
|
},
|
|
|
|
|
"protection": func(ID int, xf xlsxXf, style *Style) bool {
|
|
|
|
|
if style.Protection == nil {
|
|
|
|
|
return xf.ApplyProtection == nil || !*xf.ApplyProtection
|
|
|
|
|
}
|
|
|
|
|
return reflect.DeepEqual(xf.Protection, newProtection(style)) && xf.ApplyProtection != nil && *xf.ApplyProtection
|
|
|
|
|
},
|
|
|
|
|
}
|
2023-10-17 08:52:34 +08:00
|
|
|
|
// extractStyleCondFuncs provides a function set to returns if shoudle be
|
|
|
|
|
// extract style definition by given style.
|
|
|
|
|
extractStyleCondFuncs = map[string]func(xlsxXf, *xlsxStyleSheet) bool{
|
|
|
|
|
"fill": func(xf xlsxXf, s *xlsxStyleSheet) bool {
|
2023-11-03 00:12:43 +08:00
|
|
|
|
return (xf.ApplyFill == nil || (xf.ApplyFill != nil && *xf.ApplyFill)) &&
|
2023-10-17 08:52:34 +08:00
|
|
|
|
xf.FillID != nil && s.Fills != nil &&
|
|
|
|
|
*xf.FillID < len(s.Fills.Fill)
|
|
|
|
|
},
|
|
|
|
|
"border": func(xf xlsxXf, s *xlsxStyleSheet) bool {
|
2023-11-03 00:12:43 +08:00
|
|
|
|
return (xf.ApplyBorder == nil || (xf.ApplyBorder != nil && *xf.ApplyBorder)) &&
|
2023-10-17 08:52:34 +08:00
|
|
|
|
xf.BorderID != nil && s.Borders != nil &&
|
|
|
|
|
*xf.BorderID < len(s.Borders.Border)
|
|
|
|
|
},
|
|
|
|
|
"font": func(xf xlsxXf, s *xlsxStyleSheet) bool {
|
2023-11-03 00:12:43 +08:00
|
|
|
|
return (xf.ApplyFont == nil || (xf.ApplyFont != nil && *xf.ApplyFont)) &&
|
2023-10-17 08:52:34 +08:00
|
|
|
|
xf.FontID != nil && s.Fonts != nil &&
|
|
|
|
|
*xf.FontID < len(s.Fonts.Font)
|
|
|
|
|
},
|
|
|
|
|
"alignment": func(xf xlsxXf, s *xlsxStyleSheet) bool {
|
2023-11-03 00:12:43 +08:00
|
|
|
|
return xf.ApplyAlignment == nil || (xf.ApplyAlignment != nil && *xf.ApplyAlignment)
|
2023-10-17 08:52:34 +08:00
|
|
|
|
},
|
|
|
|
|
"protection": func(xf xlsxXf, s *xlsxStyleSheet) bool {
|
2023-11-03 00:12:43 +08:00
|
|
|
|
return xf.ApplyProtection == nil || (xf.ApplyProtection != nil && *xf.ApplyProtection)
|
2023-10-17 08:52:34 +08:00
|
|
|
|
},
|
|
|
|
|
}
|
2023-09-21 00:06:31 +08:00
|
|
|
|
// drawContFmtFunc defines functions to create conditional formats.
|
2023-11-13 00:16:29 +08:00
|
|
|
|
drawContFmtFunc = map[string]func(p int, ct, ref, GUID string, fmtCond *ConditionalFormatOptions) (*xlsxCfRule, *xlsxX14CfRule){
|
|
|
|
|
"cellIs": drawCondFmtCellIs,
|
2023-11-14 09:47:57 +08:00
|
|
|
|
"timePeriod": drawCondFmtTimePeriod,
|
2023-11-13 00:16:29 +08:00
|
|
|
|
"text": drawCondFmtText,
|
|
|
|
|
"top10": drawCondFmtTop10,
|
|
|
|
|
"aboveAverage": drawCondFmtAboveAverage,
|
|
|
|
|
"duplicateValues": drawCondFmtDuplicateUniqueValues,
|
|
|
|
|
"uniqueValues": drawCondFmtDuplicateUniqueValues,
|
|
|
|
|
"containsBlanks": drawCondFmtBlanks,
|
|
|
|
|
"notContainsBlanks": drawCondFmtNoBlanks,
|
|
|
|
|
"containsErrors": drawCondFmtErrors,
|
|
|
|
|
"notContainsErrors": drawCondFmtNoErrors,
|
|
|
|
|
"2_color_scale": drawCondFmtColorScale,
|
|
|
|
|
"3_color_scale": drawCondFmtColorScale,
|
|
|
|
|
"dataBar": drawCondFmtDataBar,
|
|
|
|
|
"expression": drawCondFmtExp,
|
|
|
|
|
"iconSet": drawCondFmtIconSet,
|
2023-09-21 00:06:31 +08:00
|
|
|
|
}
|
|
|
|
|
// extractContFmtFunc defines functions to get conditional formats.
|
|
|
|
|
extractContFmtFunc = map[string]func(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions{
|
2023-11-13 00:16:29 +08:00
|
|
|
|
"cellIs": extractCondFmtCellIs,
|
2023-11-14 09:47:57 +08:00
|
|
|
|
"timePeriod": extractCondFmtTimePeriod,
|
2023-11-13 00:16:29 +08:00
|
|
|
|
"containsText": extractCondFmtText,
|
|
|
|
|
"notContainsText": extractCondFmtText,
|
|
|
|
|
"beginsWith": extractCondFmtText,
|
|
|
|
|
"endsWith": extractCondFmtText,
|
|
|
|
|
"top10": extractCondFmtTop10,
|
|
|
|
|
"aboveAverage": extractCondFmtAboveAverage,
|
|
|
|
|
"duplicateValues": extractCondFmtDuplicateUniqueValues,
|
|
|
|
|
"uniqueValues": extractCondFmtDuplicateUniqueValues,
|
|
|
|
|
"containsBlanks": extractCondFmtBlanks,
|
|
|
|
|
"notContainsBlanks": extractCondFmtNoBlanks,
|
|
|
|
|
"containsErrors": extractCondFmtErrors,
|
|
|
|
|
"notContainsErrors": extractCondFmtNoErrors,
|
|
|
|
|
"colorScale": extractCondFmtColorScale,
|
|
|
|
|
"dataBar": extractCondFmtDataBar,
|
|
|
|
|
"expression": extractCondFmtExp,
|
|
|
|
|
"iconSet": extractCondFmtIconSet,
|
2023-09-21 00:06:31 +08:00
|
|
|
|
}
|
2023-12-08 00:09:06 +08:00
|
|
|
|
// validType defined the list of valid validation types.
|
|
|
|
|
validType = map[string]string{
|
|
|
|
|
"cell": "cellIs",
|
|
|
|
|
"average": "aboveAverage",
|
|
|
|
|
"duplicate": "duplicateValues",
|
|
|
|
|
"unique": "uniqueValues",
|
|
|
|
|
"top": "top10",
|
|
|
|
|
"bottom": "top10",
|
|
|
|
|
"text": "text",
|
|
|
|
|
"time_period": "timePeriod",
|
|
|
|
|
"blanks": "containsBlanks",
|
|
|
|
|
"no_blanks": "notContainsBlanks",
|
|
|
|
|
"errors": "containsErrors",
|
|
|
|
|
"no_errors": "notContainsErrors",
|
|
|
|
|
"2_color_scale": "2_color_scale",
|
|
|
|
|
"3_color_scale": "3_color_scale",
|
|
|
|
|
"data_bar": "dataBar",
|
|
|
|
|
"formula": "expression",
|
|
|
|
|
"icon_set": "iconSet",
|
|
|
|
|
}
|
|
|
|
|
// criteriaType defined the list of valid criteria types.
|
|
|
|
|
criteriaType = map[string]string{
|
|
|
|
|
"!=": "notEqual",
|
|
|
|
|
"<": "lessThan",
|
|
|
|
|
"<=": "lessThanOrEqual",
|
|
|
|
|
"<>": "notEqual",
|
|
|
|
|
"=": "equal",
|
|
|
|
|
"==": "equal",
|
|
|
|
|
">": "greaterThan",
|
|
|
|
|
">=": "greaterThanOrEqual",
|
|
|
|
|
"begins with": "beginsWith",
|
|
|
|
|
"between": "between",
|
|
|
|
|
"containing": "containsText",
|
|
|
|
|
"continue month": "nextMonth",
|
|
|
|
|
"continue week": "nextWeek",
|
|
|
|
|
"ends with": "endsWith",
|
|
|
|
|
"equal to": "equal",
|
|
|
|
|
"greater than or equal to": "greaterThanOrEqual",
|
|
|
|
|
"greater than": "greaterThan",
|
|
|
|
|
"last 7 days": "last7Days",
|
|
|
|
|
"last month": "lastMonth",
|
|
|
|
|
"last week": "lastWeek",
|
|
|
|
|
"less than or equal to": "lessThanOrEqual",
|
|
|
|
|
"less than": "lessThan",
|
|
|
|
|
"not between": "notBetween",
|
|
|
|
|
"not containing": "notContains",
|
|
|
|
|
"not equal to": "notEqual",
|
|
|
|
|
"this month": "thisMonth",
|
|
|
|
|
"this week": "thisWeek",
|
|
|
|
|
"today": "today",
|
|
|
|
|
"tomorrow": "tomorrow",
|
|
|
|
|
"yesterday": "yesterday",
|
|
|
|
|
}
|
|
|
|
|
// operatorType defined the list of valid operator types.
|
|
|
|
|
operatorType = map[string]string{
|
|
|
|
|
"beginsWith": "begins with",
|
|
|
|
|
"between": "between",
|
|
|
|
|
"containsText": "containing",
|
|
|
|
|
"endsWith": "ends with",
|
|
|
|
|
"equal": "equal to",
|
|
|
|
|
"greaterThan": "greater than",
|
|
|
|
|
"greaterThanOrEqual": "greater than or equal to",
|
|
|
|
|
"last7Days": "last 7 days",
|
|
|
|
|
"lastMonth": "last month",
|
|
|
|
|
"lastWeek": "last week",
|
|
|
|
|
"lessThan": "less than",
|
|
|
|
|
"lessThanOrEqual": "less than or equal to",
|
|
|
|
|
"nextMonth": "continue month",
|
|
|
|
|
"nextWeek": "continue week",
|
|
|
|
|
"notBetween": "not between",
|
|
|
|
|
"notContains": "not containing",
|
|
|
|
|
"notEqual": "not equal to",
|
|
|
|
|
"thisMonth": "this month",
|
|
|
|
|
"thisWeek": "this week",
|
|
|
|
|
"today": "today",
|
|
|
|
|
"tomorrow": "tomorrow",
|
|
|
|
|
"yesterday": "yesterday",
|
|
|
|
|
}
|
|
|
|
|
// cellIsCriteriaType defined the list of valid criteria types used for
|
|
|
|
|
// cellIs conditional formats.
|
|
|
|
|
cellIsCriteriaType = []string{
|
|
|
|
|
"equal",
|
|
|
|
|
"notEqual",
|
|
|
|
|
"greaterThan",
|
|
|
|
|
"lessThan",
|
|
|
|
|
"greaterThanOrEqual",
|
|
|
|
|
"lessThanOrEqual",
|
|
|
|
|
"containsText",
|
|
|
|
|
"notContains",
|
|
|
|
|
"beginsWith",
|
|
|
|
|
"endsWith",
|
|
|
|
|
}
|
|
|
|
|
// cfvo3 defined the icon set conditional formatting rules.
|
|
|
|
|
cfvo3 = &xlsxCfRule{IconSet: &xlsxIconSet{Cfvo: []*xlsxCfvo{
|
|
|
|
|
{Type: "percent", Val: "0"},
|
|
|
|
|
{Type: "percent", Val: "33"},
|
|
|
|
|
{Type: "percent", Val: "67"},
|
|
|
|
|
}}}
|
|
|
|
|
// cfvo4 defined the icon set conditional formatting rules.
|
|
|
|
|
cfvo4 = &xlsxCfRule{IconSet: &xlsxIconSet{Cfvo: []*xlsxCfvo{
|
|
|
|
|
{Type: "percent", Val: "0"},
|
|
|
|
|
{Type: "percent", Val: "25"},
|
|
|
|
|
{Type: "percent", Val: "50"},
|
|
|
|
|
{Type: "percent", Val: "75"},
|
|
|
|
|
}}}
|
|
|
|
|
// cfvo5 defined the icon set conditional formatting rules.
|
|
|
|
|
cfvo5 = &xlsxCfRule{IconSet: &xlsxIconSet{Cfvo: []*xlsxCfvo{
|
|
|
|
|
{Type: "percent", Val: "0"},
|
|
|
|
|
{Type: "percent", Val: "20"},
|
|
|
|
|
{Type: "percent", Val: "40"},
|
|
|
|
|
{Type: "percent", Val: "60"},
|
|
|
|
|
{Type: "percent", Val: "80"},
|
|
|
|
|
}}}
|
|
|
|
|
// condFmtIconSetPresets defined the list of icon set conditional formatting
|
|
|
|
|
// rules.
|
|
|
|
|
condFmtIconSetPresets = map[string]*xlsxCfRule{
|
|
|
|
|
"3Arrows": cfvo3,
|
|
|
|
|
"3ArrowsGray": cfvo3,
|
|
|
|
|
"3Flags": cfvo3,
|
|
|
|
|
"3Signs": cfvo3,
|
|
|
|
|
"3Symbols": cfvo3,
|
|
|
|
|
"3Symbols2": cfvo3,
|
|
|
|
|
"3TrafficLights1": cfvo3,
|
|
|
|
|
"3TrafficLights2": cfvo3,
|
|
|
|
|
"4Arrows": cfvo4,
|
|
|
|
|
"4ArrowsGray": cfvo4,
|
|
|
|
|
"4Rating": cfvo4,
|
|
|
|
|
"4RedToBlack": cfvo4,
|
|
|
|
|
"4TrafficLights": cfvo4,
|
|
|
|
|
"5Arrows": cfvo5,
|
|
|
|
|
"5ArrowsGray": cfvo5,
|
|
|
|
|
"5Quarters": cfvo5,
|
|
|
|
|
"5Rating": cfvo5,
|
|
|
|
|
}
|
2023-08-24 23:51:07 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// getThemeColor provides a function to convert theme color or index color to
|
|
|
|
|
// RGB color.
|
|
|
|
|
func (f *File) getThemeColor(clr *xlsxColor) string {
|
|
|
|
|
var RGB string
|
|
|
|
|
if clr == nil || f.Theme == nil {
|
|
|
|
|
return RGB
|
|
|
|
|
}
|
|
|
|
|
if clrScheme := f.Theme.ThemeElements.ClrScheme; clr.Theme != nil {
|
|
|
|
|
if val, ok := map[int]*string{
|
|
|
|
|
0: &clrScheme.Lt1.SysClr.LastClr,
|
|
|
|
|
1: &clrScheme.Dk1.SysClr.LastClr,
|
|
|
|
|
2: clrScheme.Lt2.SrgbClr.Val,
|
|
|
|
|
3: clrScheme.Dk2.SrgbClr.Val,
|
|
|
|
|
4: clrScheme.Accent1.SrgbClr.Val,
|
|
|
|
|
5: clrScheme.Accent2.SrgbClr.Val,
|
|
|
|
|
6: clrScheme.Accent3.SrgbClr.Val,
|
|
|
|
|
7: clrScheme.Accent4.SrgbClr.Val,
|
|
|
|
|
8: clrScheme.Accent5.SrgbClr.Val,
|
|
|
|
|
9: clrScheme.Accent6.SrgbClr.Val,
|
|
|
|
|
}[*clr.Theme]; ok && val != nil {
|
|
|
|
|
return strings.TrimPrefix(ThemeColor(*val, clr.Tint), "FF")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if len(clr.RGB) == 6 {
|
|
|
|
|
return clr.RGB
|
|
|
|
|
}
|
|
|
|
|
if len(clr.RGB) == 8 {
|
|
|
|
|
return strings.TrimPrefix(clr.RGB, "FF")
|
|
|
|
|
}
|
2023-09-08 00:09:41 +08:00
|
|
|
|
if f.Styles.Colors != nil && f.Styles.Colors.IndexedColors != nil && clr.Indexed < len(f.Styles.Colors.IndexedColors.RgbColor) {
|
2023-08-24 23:51:07 +08:00
|
|
|
|
return strings.TrimPrefix(ThemeColor(strings.TrimPrefix(f.Styles.Colors.IndexedColors.RgbColor[clr.Indexed].RGB, "FF"), clr.Tint), "FF")
|
|
|
|
|
}
|
|
|
|
|
if clr.Indexed < len(IndexedColorMapping) {
|
|
|
|
|
return strings.TrimPrefix(ThemeColor(IndexedColorMapping[clr.Indexed], clr.Tint), "FF")
|
|
|
|
|
}
|
|
|
|
|
return RGB
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// extractBorders provides a function to extract borders styles settings by
|
|
|
|
|
// given border styles definition.
|
2023-10-17 08:52:34 +08:00
|
|
|
|
func (f *File) extractBorders(bdr *xlsxBorder, s *xlsxStyleSheet, style *Style) {
|
|
|
|
|
if bdr != nil {
|
|
|
|
|
var borders []Border
|
|
|
|
|
extractBorder := func(lineType string, line xlsxLine) {
|
|
|
|
|
if line.Style != "" {
|
|
|
|
|
borders = append(borders, Border{
|
|
|
|
|
Type: lineType,
|
|
|
|
|
Color: f.getThemeColor(line.Color),
|
|
|
|
|
Style: inStrSlice(styleBorders, line.Style, false),
|
|
|
|
|
})
|
2023-08-24 23:51:07 +08:00
|
|
|
|
}
|
2023-10-17 08:52:34 +08:00
|
|
|
|
}
|
|
|
|
|
for i, line := range []xlsxLine{
|
|
|
|
|
bdr.Left, bdr.Right, bdr.Top, bdr.Bottom, bdr.Diagonal, bdr.Diagonal,
|
|
|
|
|
} {
|
|
|
|
|
if i < 4 {
|
|
|
|
|
extractBorder(styleBorderTypes[i], line)
|
|
|
|
|
}
|
|
|
|
|
if i == 4 && bdr.DiagonalUp {
|
|
|
|
|
extractBorder(styleBorderTypes[i], line)
|
|
|
|
|
}
|
|
|
|
|
if i == 5 && bdr.DiagonalDown {
|
|
|
|
|
extractBorder(styleBorderTypes[i], line)
|
2023-08-24 23:51:07 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2023-10-17 08:52:34 +08:00
|
|
|
|
style.Border = borders
|
2023-08-24 23:51:07 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// extractFills provides a function to extract fill styles settings by
|
|
|
|
|
// given fill styles definition.
|
2023-10-17 08:52:34 +08:00
|
|
|
|
func (f *File) extractFills(fl *xlsxFill, s *xlsxStyleSheet, style *Style) {
|
|
|
|
|
if fl != nil {
|
2023-08-24 23:51:07 +08:00
|
|
|
|
var fill Fill
|
|
|
|
|
if fl.GradientFill != nil {
|
|
|
|
|
fill.Type = "gradient"
|
|
|
|
|
for shading, variants := range styleFillVariants {
|
|
|
|
|
if fl.GradientFill.Bottom == variants.Bottom &&
|
|
|
|
|
fl.GradientFill.Degree == variants.Degree &&
|
|
|
|
|
fl.GradientFill.Left == variants.Left &&
|
|
|
|
|
fl.GradientFill.Right == variants.Right &&
|
|
|
|
|
fl.GradientFill.Top == variants.Top &&
|
|
|
|
|
fl.GradientFill.Type == variants.Type {
|
|
|
|
|
fill.Shading = shading
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for _, stop := range fl.GradientFill.Stop {
|
|
|
|
|
fill.Color = append(fill.Color, f.getThemeColor(&stop.Color))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if fl.PatternFill != nil {
|
|
|
|
|
fill.Type = "pattern"
|
|
|
|
|
fill.Pattern = inStrSlice(styleFillPatterns, fl.PatternFill.PatternType, false)
|
2023-10-20 00:04:31 +08:00
|
|
|
|
if fl.PatternFill.BgColor != nil {
|
|
|
|
|
fill.Color = []string{f.getThemeColor(fl.PatternFill.BgColor)}
|
|
|
|
|
}
|
2023-08-24 23:51:07 +08:00
|
|
|
|
if fl.PatternFill.FgColor != nil {
|
|
|
|
|
fill.Color = []string{f.getThemeColor(fl.PatternFill.FgColor)}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
style.Fill = fill
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// extractFont provides a function to extract font styles settings by given
|
|
|
|
|
// font styles definition.
|
2023-10-17 08:52:34 +08:00
|
|
|
|
func (f *File) extractFont(fnt *xlsxFont, s *xlsxStyleSheet, style *Style) {
|
|
|
|
|
if fnt != nil {
|
|
|
|
|
var font Font
|
|
|
|
|
if fnt.B != nil {
|
|
|
|
|
font.Bold = fnt.B.Value()
|
|
|
|
|
}
|
|
|
|
|
if fnt.I != nil {
|
|
|
|
|
font.Italic = fnt.I.Value()
|
|
|
|
|
}
|
|
|
|
|
if fnt.U != nil {
|
2023-11-03 00:12:43 +08:00
|
|
|
|
if font.Underline = fnt.U.Value(); font.Underline == "" {
|
|
|
|
|
font.Underline = "single"
|
|
|
|
|
}
|
2023-08-24 23:51:07 +08:00
|
|
|
|
}
|
2023-10-17 08:52:34 +08:00
|
|
|
|
if fnt.Name != nil {
|
|
|
|
|
font.Family = fnt.Name.Value()
|
|
|
|
|
}
|
|
|
|
|
if fnt.Sz != nil {
|
|
|
|
|
font.Size = fnt.Sz.Value()
|
|
|
|
|
}
|
|
|
|
|
if fnt.Strike != nil {
|
|
|
|
|
font.Strike = fnt.Strike.Value()
|
|
|
|
|
}
|
|
|
|
|
if fnt.Color != nil {
|
|
|
|
|
font.Color = strings.TrimPrefix(fnt.Color.RGB, "FF")
|
|
|
|
|
font.ColorIndexed = fnt.Color.Indexed
|
|
|
|
|
font.ColorTheme = fnt.Color.Theme
|
|
|
|
|
font.ColorTint = fnt.Color.Tint
|
|
|
|
|
}
|
|
|
|
|
style.Font = &font
|
2023-08-24 23:51:07 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// extractNumFmt provides a function to extract number format by given styles
|
|
|
|
|
// definition.
|
2023-10-17 08:52:34 +08:00
|
|
|
|
func (f *File) extractNumFmt(n *int, s *xlsxStyleSheet, style *Style) {
|
|
|
|
|
if n != nil {
|
|
|
|
|
numFmtID := *n
|
2023-08-24 23:51:07 +08:00
|
|
|
|
if _, ok := builtInNumFmt[numFmtID]; ok || isLangNumFmt(numFmtID) {
|
|
|
|
|
style.NumFmt = numFmtID
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if s.NumFmts != nil {
|
|
|
|
|
for _, numFmt := range s.NumFmts.NumFmt {
|
|
|
|
|
style.CustomNumFmt = &numFmt.FormatCode
|
|
|
|
|
if strings.Contains(numFmt.FormatCode, ";[Red]") {
|
|
|
|
|
style.NegRed = true
|
|
|
|
|
}
|
|
|
|
|
for numFmtID, fmtCode := range currencyNumFmt {
|
|
|
|
|
if style.NegRed {
|
|
|
|
|
fmtCode += ";[Red]" + fmtCode
|
|
|
|
|
}
|
|
|
|
|
if numFmt.FormatCode == fmtCode {
|
|
|
|
|
style.NumFmt = numFmtID
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// extractAlignment provides a function to extract alignment format by
|
|
|
|
|
// given style definition.
|
2023-10-17 08:52:34 +08:00
|
|
|
|
func (f *File) extractAlignment(a *xlsxAlignment, s *xlsxStyleSheet, style *Style) {
|
|
|
|
|
if a != nil {
|
2023-08-24 23:51:07 +08:00
|
|
|
|
style.Alignment = &Alignment{
|
2023-10-17 08:52:34 +08:00
|
|
|
|
Horizontal: a.Horizontal,
|
|
|
|
|
Indent: a.Indent,
|
|
|
|
|
JustifyLastLine: a.JustifyLastLine,
|
|
|
|
|
ReadingOrder: a.ReadingOrder,
|
|
|
|
|
RelativeIndent: a.RelativeIndent,
|
|
|
|
|
ShrinkToFit: a.ShrinkToFit,
|
|
|
|
|
TextRotation: a.TextRotation,
|
|
|
|
|
Vertical: a.Vertical,
|
|
|
|
|
WrapText: a.WrapText,
|
2023-08-24 23:51:07 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// extractProtection provides a function to extract protection settings by
|
|
|
|
|
// given format definition.
|
2023-10-17 08:52:34 +08:00
|
|
|
|
func (f *File) extractProtection(p *xlsxProtection, s *xlsxStyleSheet, style *Style) {
|
|
|
|
|
if p != nil {
|
2023-08-24 23:51:07 +08:00
|
|
|
|
style.Protection = &Protection{}
|
2023-10-17 08:52:34 +08:00
|
|
|
|
if p.Hidden != nil {
|
|
|
|
|
style.Protection.Hidden = *p.Hidden
|
2023-08-24 23:51:07 +08:00
|
|
|
|
}
|
2023-10-17 08:52:34 +08:00
|
|
|
|
if p.Locked != nil {
|
|
|
|
|
style.Protection.Locked = *p.Locked
|
2023-08-24 23:51:07 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-28 00:02:25 +08:00
|
|
|
|
// GetStyle provides a function to get style definition by given style index.
|
2023-08-24 23:51:07 +08:00
|
|
|
|
func (f *File) GetStyle(idx int) (*Style, error) {
|
|
|
|
|
var style *Style
|
|
|
|
|
f.mu.Lock()
|
|
|
|
|
s, err := f.stylesReader()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return style, err
|
|
|
|
|
}
|
|
|
|
|
f.mu.Unlock()
|
|
|
|
|
if idx < 0 || s.CellXfs == nil || len(s.CellXfs.Xf) <= idx {
|
|
|
|
|
return style, newInvalidStyleID(idx)
|
|
|
|
|
}
|
|
|
|
|
style = &Style{}
|
|
|
|
|
xf := s.CellXfs.Xf[idx]
|
2023-10-17 08:52:34 +08:00
|
|
|
|
if extractStyleCondFuncs["fill"](xf, s) {
|
|
|
|
|
f.extractFills(s.Fills.Fill[*xf.FillID], s, style)
|
|
|
|
|
}
|
|
|
|
|
if extractStyleCondFuncs["border"](xf, s) {
|
|
|
|
|
f.extractBorders(s.Borders.Border[*xf.BorderID], s, style)
|
|
|
|
|
}
|
|
|
|
|
if extractStyleCondFuncs["font"](xf, s) {
|
|
|
|
|
f.extractFont(s.Fonts.Font[*xf.FontID], s, style)
|
2023-08-24 23:51:07 +08:00
|
|
|
|
}
|
2023-10-17 08:52:34 +08:00
|
|
|
|
if extractStyleCondFuncs["alignment"](xf, s) {
|
|
|
|
|
f.extractAlignment(xf.Alignment, s, style)
|
|
|
|
|
}
|
|
|
|
|
if extractStyleCondFuncs["protection"](xf, s) {
|
|
|
|
|
f.extractProtection(xf.Protection, s, style)
|
|
|
|
|
}
|
|
|
|
|
f.extractNumFmt(xf.NumFmtID, s, style)
|
2023-08-24 23:51:07 +08:00
|
|
|
|
return style, nil
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-24 20:20:22 +08:00
|
|
|
|
// getStyleID provides a function to get styleID by given style. If given
|
2022-08-28 00:16:41 +08:00
|
|
|
|
// style does not exist, will return -1.
|
2022-11-12 00:02:11 +08:00
|
|
|
|
func (f *File) getStyleID(ss *xlsxStyleSheet, style *Style) (int, error) {
|
|
|
|
|
var (
|
|
|
|
|
err error
|
|
|
|
|
fontID int
|
|
|
|
|
styleID = -1
|
|
|
|
|
)
|
2020-05-24 20:20:22 +08:00
|
|
|
|
if ss.CellXfs == nil {
|
2022-11-12 00:02:11 +08:00
|
|
|
|
return styleID, err
|
|
|
|
|
}
|
|
|
|
|
numFmtID, borderID, fillID := getNumFmtID(ss, style), getBorderID(ss, style), getFillID(ss, style)
|
|
|
|
|
if fontID, err = f.getFontID(ss, style); err != nil {
|
|
|
|
|
return styleID, err
|
2020-05-24 20:20:22 +08:00
|
|
|
|
}
|
|
|
|
|
if style.CustomNumFmt != nil {
|
|
|
|
|
numFmtID = getCustomNumFmtID(ss, style)
|
|
|
|
|
}
|
|
|
|
|
for xfID, xf := range ss.CellXfs.Xf {
|
|
|
|
|
if getXfIDFuncs["numFmt"](numFmtID, xf, style) &&
|
|
|
|
|
getXfIDFuncs["font"](fontID, xf, style) &&
|
|
|
|
|
getXfIDFuncs["fill"](fillID, xf, style) &&
|
|
|
|
|
getXfIDFuncs["border"](borderID, xf, style) &&
|
|
|
|
|
getXfIDFuncs["alignment"](0, xf, style) &&
|
|
|
|
|
getXfIDFuncs["protection"](0, xf, style) {
|
|
|
|
|
styleID = xfID
|
2022-11-12 00:02:11 +08:00
|
|
|
|
return styleID, err
|
2020-05-24 20:20:22 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-11-12 00:02:11 +08:00
|
|
|
|
return styleID, err
|
2020-05-24 20:20:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// NewConditionalStyle provides a function to create style for conditional
|
2022-09-18 00:07:15 +08:00
|
|
|
|
// format by given style format. The parameters are the same with the NewStyle
|
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
|
|
|
|
// function.
|
|
|
|
|
func (f *File) NewConditionalStyle(style *Style) (int, error) {
|
2023-04-25 08:44:41 +08:00
|
|
|
|
f.mu.Lock()
|
2022-11-12 00:02:11 +08:00
|
|
|
|
s, err := f.stylesReader()
|
|
|
|
|
if err != nil {
|
2023-04-25 08:44:41 +08:00
|
|
|
|
f.mu.Unlock()
|
2022-11-12 00:02:11 +08:00
|
|
|
|
return 0, err
|
|
|
|
|
}
|
2023-04-25 08:44:41 +08:00
|
|
|
|
f.mu.Unlock()
|
2017-08-11 23:15:33 +08:00
|
|
|
|
fs, err := parseFormatStyleSet(style)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return 0, err
|
|
|
|
|
}
|
2023-08-17 11:34:28 +08:00
|
|
|
|
if fs.DecimalPlaces != nil && (*fs.DecimalPlaces < 0 || *fs.DecimalPlaces > 30) {
|
|
|
|
|
fs.DecimalPlaces = intPtr(2)
|
|
|
|
|
}
|
|
|
|
|
dxf := xlsxDxf{
|
2020-05-24 20:20:22 +08:00
|
|
|
|
Fill: newFills(fs, false),
|
2020-03-16 00:13:01 +08:00
|
|
|
|
}
|
|
|
|
|
if fs.Alignment != nil {
|
2020-05-24 20:20:22 +08:00
|
|
|
|
dxf.Alignment = newAlignment(fs)
|
2020-03-16 00:13:01 +08:00
|
|
|
|
}
|
|
|
|
|
if len(fs.Border) > 0 {
|
2020-05-24 20:20:22 +08:00
|
|
|
|
dxf.Border = newBorders(fs)
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
|
|
|
|
if fs.Font != nil {
|
2022-11-12 00:02:11 +08:00
|
|
|
|
dxf.Font, _ = f.newFont(fs)
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
2023-08-17 11:34:28 +08:00
|
|
|
|
if fs.Protection != nil {
|
|
|
|
|
dxf.Protection = newProtection(fs)
|
|
|
|
|
}
|
|
|
|
|
dxf.NumFmt = newDxfNumFmt(s, style, &dxf)
|
2017-08-11 23:15:33 +08:00
|
|
|
|
if s.Dxfs == nil {
|
|
|
|
|
s.Dxfs = &xlsxDxfs{}
|
2017-04-25 18:43:10 +08:00
|
|
|
|
}
|
2017-08-11 23:15:33 +08:00
|
|
|
|
s.Dxfs.Count++
|
2023-08-17 11:34:28 +08:00
|
|
|
|
s.Dxfs.Dxfs = append(s.Dxfs.Dxfs, &dxf)
|
2017-08-11 23:15:33 +08:00
|
|
|
|
return s.Dxfs.Count - 1, nil
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-17 08:52:34 +08:00
|
|
|
|
// GetConditionalStyle returns conditional format style definition by specified
|
|
|
|
|
// style index.
|
|
|
|
|
func (f *File) GetConditionalStyle(idx int) (*Style, error) {
|
|
|
|
|
var style *Style
|
|
|
|
|
f.mu.Lock()
|
|
|
|
|
s, err := f.stylesReader()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return style, err
|
|
|
|
|
}
|
|
|
|
|
f.mu.Unlock()
|
|
|
|
|
if idx < 0 || s.Dxfs == nil || len(s.Dxfs.Dxfs) <= idx {
|
|
|
|
|
return style, newInvalidStyleID(idx)
|
|
|
|
|
}
|
|
|
|
|
style = &Style{}
|
|
|
|
|
xf := s.Dxfs.Dxfs[idx]
|
2023-10-20 00:04:31 +08:00
|
|
|
|
// The default pattern fill type of conditional format style is solid
|
|
|
|
|
if xf.Fill != nil && xf.Fill.PatternFill != nil && xf.Fill.PatternFill.PatternType == "" {
|
|
|
|
|
xf.Fill.PatternFill.PatternType = "solid"
|
|
|
|
|
}
|
2023-10-17 08:52:34 +08:00
|
|
|
|
f.extractFills(xf.Fill, s, style)
|
|
|
|
|
f.extractBorders(xf.Border, s, style)
|
|
|
|
|
f.extractFont(xf.Font, s, style)
|
|
|
|
|
f.extractAlignment(xf.Alignment, s, style)
|
|
|
|
|
f.extractProtection(xf.Protection, s, style)
|
|
|
|
|
if xf.NumFmt != nil {
|
|
|
|
|
f.extractNumFmt(&xf.NumFmt.NumFmtID, s, style)
|
|
|
|
|
}
|
|
|
|
|
return style, nil
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-17 11:34:28 +08:00
|
|
|
|
// newDxfNumFmt provides a function to create number format for conditional
|
|
|
|
|
// format styles.
|
|
|
|
|
func newDxfNumFmt(styleSheet *xlsxStyleSheet, style *Style, dxf *xlsxDxf) *xlsxNumFmt {
|
|
|
|
|
dp, numFmtID := "0", 164 // Default custom number format code from 164.
|
|
|
|
|
if style.DecimalPlaces != nil && *style.DecimalPlaces > 0 {
|
|
|
|
|
dp += "."
|
|
|
|
|
for i := 0; i < *style.DecimalPlaces; i++ {
|
|
|
|
|
dp += "0"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if style.CustomNumFmt != nil {
|
|
|
|
|
if styleSheet.Dxfs != nil {
|
|
|
|
|
for _, d := range styleSheet.Dxfs.Dxfs {
|
|
|
|
|
if d != nil && d.NumFmt != nil && d.NumFmt.NumFmtID > numFmtID {
|
|
|
|
|
numFmtID = d.NumFmt.NumFmtID
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return &xlsxNumFmt{NumFmtID: numFmtID + 1, FormatCode: *style.CustomNumFmt}
|
|
|
|
|
}
|
|
|
|
|
numFmtCode, ok := builtInNumFmt[style.NumFmt]
|
|
|
|
|
if style.NumFmt > 0 && ok {
|
|
|
|
|
return &xlsxNumFmt{NumFmtID: style.NumFmt, FormatCode: numFmtCode}
|
|
|
|
|
}
|
|
|
|
|
fc, currency := currencyNumFmt[style.NumFmt]
|
|
|
|
|
if !currency {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
if style.DecimalPlaces != nil {
|
|
|
|
|
fc = strings.ReplaceAll(fc, "0.00", dp)
|
|
|
|
|
}
|
|
|
|
|
if style.NegRed {
|
|
|
|
|
fc = fc + ";[Red]" + fc
|
|
|
|
|
}
|
|
|
|
|
return &xlsxNumFmt{NumFmtID: numFmtID, FormatCode: fc}
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-29 01:21:03 +08:00
|
|
|
|
// GetDefaultFont provides the default font name currently set in the
|
|
|
|
|
// workbook. The spreadsheet generated by excelize default font is Calibri.
|
2022-11-12 00:02:11 +08:00
|
|
|
|
func (f *File) GetDefaultFont() (string, error) {
|
|
|
|
|
font, err := f.readDefaultFont()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return "", err
|
|
|
|
|
}
|
|
|
|
|
return *font.Name.Val, err
|
2019-04-26 00:24:25 +08:00
|
|
|
|
}
|
|
|
|
|
|
2019-06-30 19:50:47 +08:00
|
|
|
|
// SetDefaultFont changes the default font in the workbook.
|
2022-11-12 00:02:11 +08:00
|
|
|
|
func (f *File) SetDefaultFont(fontName string) error {
|
|
|
|
|
font, err := f.readDefaultFont()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
2019-12-23 00:07:40 +08:00
|
|
|
|
font.Name.Val = stringPtr(fontName)
|
2023-04-25 08:44:41 +08:00
|
|
|
|
f.mu.Lock()
|
2022-11-12 00:02:11 +08:00
|
|
|
|
s, _ := f.stylesReader()
|
2023-04-25 08:44:41 +08:00
|
|
|
|
f.mu.Unlock()
|
2019-04-26 00:24:25 +08:00
|
|
|
|
s.Fonts.Font[0] = font
|
|
|
|
|
custom := true
|
|
|
|
|
s.CellStyles.CellStyle[0].CustomBuiltIn = &custom
|
2022-11-12 00:02:11 +08:00
|
|
|
|
return err
|
2019-04-26 00:24:25 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-01-09 00:20:42 +08:00
|
|
|
|
// readDefaultFont provides an un-marshalled font value.
|
2022-11-12 00:02:11 +08:00
|
|
|
|
func (f *File) readDefaultFont() (*xlsxFont, error) {
|
2023-04-25 08:44:41 +08:00
|
|
|
|
f.mu.Lock()
|
|
|
|
|
defer f.mu.Unlock()
|
2022-11-12 00:02:11 +08:00
|
|
|
|
s, err := f.stylesReader()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
return s.Fonts.Font[0], err
|
2019-04-26 00:24:25 +08:00
|
|
|
|
}
|
|
|
|
|
|
2020-05-24 20:20:22 +08:00
|
|
|
|
// getFontID provides a function to get font ID.
|
2022-08-28 00:16:41 +08:00
|
|
|
|
// If given font does not exist, will return -1.
|
2022-11-12 00:02:11 +08:00
|
|
|
|
func (f *File) getFontID(styleSheet *xlsxStyleSheet, style *Style) (int, error) {
|
|
|
|
|
var err error
|
|
|
|
|
fontID := -1
|
2020-05-24 20:20:22 +08:00
|
|
|
|
if styleSheet.Fonts == nil || style.Font == nil {
|
2022-11-12 00:02:11 +08:00
|
|
|
|
return fontID, err
|
2020-05-24 20:20:22 +08:00
|
|
|
|
}
|
|
|
|
|
for idx, fnt := range styleSheet.Fonts.Font {
|
2022-11-12 00:02:11 +08:00
|
|
|
|
font, err := f.newFont(style)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return fontID, err
|
|
|
|
|
}
|
|
|
|
|
if reflect.DeepEqual(*fnt, *font) {
|
2020-05-24 20:20:22 +08:00
|
|
|
|
fontID = idx
|
2022-11-12 00:02:11 +08:00
|
|
|
|
return fontID, err
|
2020-05-24 20:20:22 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-11-12 00:02:11 +08:00
|
|
|
|
return fontID, err
|
2020-05-24 20:20:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-10-15 00:03:49 +08:00
|
|
|
|
// newFontColor set font color by given styles.
|
|
|
|
|
func newFontColor(font *Font) *xlsxColor {
|
|
|
|
|
var fontColor *xlsxColor
|
|
|
|
|
prepareFontColor := func() {
|
|
|
|
|
if fontColor != nil {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
fontColor = &xlsxColor{}
|
|
|
|
|
}
|
|
|
|
|
if font.Color != "" {
|
|
|
|
|
prepareFontColor()
|
|
|
|
|
fontColor.RGB = getPaletteColor(font.Color)
|
|
|
|
|
}
|
2022-10-24 00:02:22 +08:00
|
|
|
|
if font.ColorIndexed >= 0 && font.ColorIndexed <= len(IndexedColorMapping)+1 {
|
|
|
|
|
prepareFontColor()
|
|
|
|
|
fontColor.Indexed = font.ColorIndexed
|
|
|
|
|
}
|
2022-10-15 00:03:49 +08:00
|
|
|
|
if font.ColorTheme != nil {
|
|
|
|
|
prepareFontColor()
|
|
|
|
|
fontColor.Theme = font.ColorTheme
|
|
|
|
|
}
|
|
|
|
|
if font.ColorTint != 0 {
|
|
|
|
|
prepareFontColor()
|
|
|
|
|
fontColor.Tint = font.ColorTint
|
|
|
|
|
}
|
|
|
|
|
return fontColor
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-24 20:20:22 +08:00
|
|
|
|
// newFont provides a function to add font style by given cell format
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// settings.
|
2022-11-12 00:02:11 +08:00
|
|
|
|
func (f *File) newFont(style *Style) (*xlsxFont, error) {
|
|
|
|
|
var err error
|
2022-05-23 13:02:11 +08:00
|
|
|
|
if style.Font.Size < MinFontSize {
|
2020-03-10 00:04:23 +08:00
|
|
|
|
style.Font.Size = 11
|
2017-04-25 18:43:10 +08:00
|
|
|
|
}
|
2019-04-26 00:24:25 +08:00
|
|
|
|
fnt := xlsxFont{
|
2020-03-10 00:04:23 +08:00
|
|
|
|
Sz: &attrValFloat{Val: float64Ptr(style.Font.Size)},
|
|
|
|
|
Name: &attrValString{Val: stringPtr(style.Font.Family)},
|
2019-12-23 00:07:40 +08:00
|
|
|
|
Family: &attrValInt{Val: intPtr(2)},
|
2018-05-08 10:36:13 +08:00
|
|
|
|
}
|
2022-10-15 00:03:49 +08:00
|
|
|
|
fnt.Color = newFontColor(style.Font)
|
2020-03-10 00:04:23 +08:00
|
|
|
|
if style.Font.Bold {
|
2021-04-30 00:14:42 +08:00
|
|
|
|
fnt.B = &attrValBool{Val: &style.Font.Bold}
|
2019-06-13 08:25:35 +08:00
|
|
|
|
}
|
2020-03-10 00:04:23 +08:00
|
|
|
|
if style.Font.Italic {
|
2021-04-30 00:14:42 +08:00
|
|
|
|
fnt.I = &attrValBool{Val: &style.Font.Italic}
|
2019-06-13 08:25:35 +08:00
|
|
|
|
}
|
2019-12-23 00:07:40 +08:00
|
|
|
|
if *fnt.Name.Val == "" {
|
2022-11-12 00:02:11 +08:00
|
|
|
|
if *fnt.Name.Val, err = f.GetDefaultFont(); err != nil {
|
|
|
|
|
return &fnt, err
|
|
|
|
|
}
|
2017-04-25 18:43:10 +08:00
|
|
|
|
}
|
2020-03-10 00:04:23 +08:00
|
|
|
|
if style.Font.Strike {
|
2021-04-30 00:14:42 +08:00
|
|
|
|
fnt.Strike = &attrValBool{Val: &style.Font.Strike}
|
2019-09-23 21:50:03 +08:00
|
|
|
|
}
|
2022-10-14 00:48:16 +08:00
|
|
|
|
if idx := inStrSlice(supportedUnderlineTypes, style.Font.Underline, true); idx != -1 {
|
|
|
|
|
fnt.U = &attrValString{Val: stringPtr(supportedUnderlineTypes[idx])}
|
2017-04-25 18:43:10 +08:00
|
|
|
|
}
|
2022-11-12 00:02:11 +08:00
|
|
|
|
return &fnt, err
|
2017-04-25 18:43:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
2020-05-25 00:22:58 +08:00
|
|
|
|
// getNumFmtID provides a function to get number format code ID.
|
2022-08-28 00:16:41 +08:00
|
|
|
|
// If given number format code does not exist, will return -1.
|
2020-05-25 00:22:58 +08:00
|
|
|
|
func getNumFmtID(styleSheet *xlsxStyleSheet, style *Style) (numFmtID int) {
|
|
|
|
|
numFmtID = -1
|
|
|
|
|
if _, ok := builtInNumFmt[style.NumFmt]; ok {
|
|
|
|
|
return style.NumFmt
|
|
|
|
|
}
|
2023-05-11 09:08:38 +08:00
|
|
|
|
if (27 <= style.NumFmt && style.NumFmt <= 36) || (50 <= style.NumFmt && style.NumFmt <= 81) {
|
|
|
|
|
numFmtID = style.NumFmt
|
|
|
|
|
return
|
2021-12-01 19:11:51 +08:00
|
|
|
|
}
|
2020-05-25 00:22:58 +08:00
|
|
|
|
if fmtCode, ok := currencyNumFmt[style.NumFmt]; ok {
|
2021-12-03 00:19:11 +08:00
|
|
|
|
numFmtID = style.NumFmt
|
|
|
|
|
if styleSheet.NumFmts != nil {
|
|
|
|
|
for _, numFmt := range styleSheet.NumFmts.NumFmt {
|
|
|
|
|
if numFmt.FormatCode == fmtCode {
|
|
|
|
|
numFmtID = numFmt.NumFmtID
|
|
|
|
|
return
|
|
|
|
|
}
|
2020-05-25 00:22:58 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-24 20:20:22 +08:00
|
|
|
|
// newNumFmt provides a function to check if number format code in the range
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// of built-in values.
|
2020-05-24 20:20:22 +08:00
|
|
|
|
func newNumFmt(styleSheet *xlsxStyleSheet, style *Style) int {
|
2023-07-08 18:36:35 +08:00
|
|
|
|
dp, numFmtID := "0", 164 // Default custom number format code from 164.
|
|
|
|
|
if style.DecimalPlaces != nil && *style.DecimalPlaces > 0 {
|
|
|
|
|
dp += "."
|
|
|
|
|
for i := 0; i < *style.DecimalPlaces; i++ {
|
|
|
|
|
dp += "0"
|
|
|
|
|
}
|
2017-07-14 21:15:44 +08:00
|
|
|
|
}
|
2020-03-10 00:04:23 +08:00
|
|
|
|
if style.CustomNumFmt != nil {
|
2020-05-24 20:20:22 +08:00
|
|
|
|
if customNumFmtID := getCustomNumFmtID(styleSheet, style); customNumFmtID != -1 {
|
|
|
|
|
return customNumFmtID
|
|
|
|
|
}
|
2020-03-10 00:04:23 +08:00
|
|
|
|
return setCustomNumFmt(styleSheet, style)
|
2017-07-27 11:46:04 +08:00
|
|
|
|
}
|
2023-07-08 18:36:35 +08:00
|
|
|
|
if _, ok := builtInNumFmt[style.NumFmt]; !ok {
|
2020-03-10 00:04:23 +08:00
|
|
|
|
fc, currency := currencyNumFmt[style.NumFmt]
|
2017-07-14 21:15:44 +08:00
|
|
|
|
if !currency {
|
2023-05-30 00:14:44 +08:00
|
|
|
|
return setLangNumFmt(style)
|
2017-07-14 21:15:44 +08:00
|
|
|
|
}
|
2023-07-08 18:36:35 +08:00
|
|
|
|
if style.DecimalPlaces != nil {
|
|
|
|
|
fc = strings.ReplaceAll(fc, "0.00", dp)
|
|
|
|
|
}
|
2020-03-10 00:04:23 +08:00
|
|
|
|
if style.NegRed {
|
2017-07-15 14:31:07 +08:00
|
|
|
|
fc = fc + ";[Red]" + fc
|
|
|
|
|
}
|
2023-07-08 18:36:35 +08:00
|
|
|
|
if styleSheet.NumFmts == nil {
|
|
|
|
|
styleSheet.NumFmts = &xlsxNumFmts{NumFmt: []*xlsxNumFmt{}}
|
2017-07-14 21:15:44 +08:00
|
|
|
|
} else {
|
2023-07-08 18:36:35 +08:00
|
|
|
|
numFmtID = styleSheet.NumFmts.NumFmt[len(styleSheet.NumFmts.NumFmt)-1].NumFmtID + 1
|
2017-07-14 21:15:44 +08:00
|
|
|
|
}
|
2023-07-08 18:36:35 +08:00
|
|
|
|
styleSheet.NumFmts.NumFmt = append(styleSheet.NumFmts.NumFmt, &xlsxNumFmt{
|
|
|
|
|
FormatCode: fc, NumFmtID: numFmtID,
|
|
|
|
|
})
|
|
|
|
|
styleSheet.NumFmts.Count++
|
2017-07-14 21:15:44 +08:00
|
|
|
|
return numFmtID
|
|
|
|
|
}
|
2020-03-10 00:04:23 +08:00
|
|
|
|
return style.NumFmt
|
2017-07-14 21:15:44 +08:00
|
|
|
|
}
|
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// setCustomNumFmt provides a function to set custom number format code.
|
2020-03-10 00:04:23 +08:00
|
|
|
|
func setCustomNumFmt(styleSheet *xlsxStyleSheet, style *Style) int {
|
2023-10-02 00:06:38 +08:00
|
|
|
|
nf := xlsxNumFmt{NumFmtID: 163, FormatCode: *style.CustomNumFmt}
|
|
|
|
|
if styleSheet.NumFmts == nil {
|
|
|
|
|
styleSheet.NumFmts = &xlsxNumFmts{}
|
|
|
|
|
}
|
|
|
|
|
for _, numFmt := range styleSheet.NumFmts.NumFmt {
|
|
|
|
|
if numFmt != nil && nf.NumFmtID < numFmt.NumFmtID {
|
|
|
|
|
nf.NumFmtID = numFmt.NumFmtID
|
2017-07-27 11:46:04 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2023-10-02 00:06:38 +08:00
|
|
|
|
nf.NumFmtID++
|
|
|
|
|
styleSheet.NumFmts.NumFmt = append(styleSheet.NumFmts.NumFmt, &nf)
|
|
|
|
|
styleSheet.NumFmts.Count = len(styleSheet.NumFmts.NumFmt)
|
2017-07-27 11:46:04 +08:00
|
|
|
|
return nf.NumFmtID
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-24 20:20:22 +08:00
|
|
|
|
// getCustomNumFmtID provides a function to get custom number format code ID.
|
2022-08-28 00:16:41 +08:00
|
|
|
|
// If given custom number format code does not exist, will return -1.
|
2020-05-24 20:20:22 +08:00
|
|
|
|
func getCustomNumFmtID(styleSheet *xlsxStyleSheet, style *Style) (customNumFmtID int) {
|
|
|
|
|
customNumFmtID = -1
|
|
|
|
|
if styleSheet.NumFmts == nil {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
for _, numFmt := range styleSheet.NumFmts.NumFmt {
|
|
|
|
|
if style.CustomNumFmt != nil && numFmt.FormatCode == *style.CustomNumFmt {
|
|
|
|
|
customNumFmtID = numFmt.NumFmtID
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-24 23:51:07 +08:00
|
|
|
|
// isLangNumFmt provides a function to returns if a given number format ID is a
|
|
|
|
|
// built-in language glyphs number format code.
|
|
|
|
|
func isLangNumFmt(ID int) bool {
|
|
|
|
|
return (27 <= ID && ID <= 36) || (50 <= ID && ID <= 62) || (67 <= ID && ID <= 81)
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// setLangNumFmt provides a function to set number format code with language.
|
2023-05-30 00:14:44 +08:00
|
|
|
|
func setLangNumFmt(style *Style) int {
|
2023-08-24 23:51:07 +08:00
|
|
|
|
if isLangNumFmt(style.NumFmt) {
|
2023-05-11 09:08:38 +08:00
|
|
|
|
return style.NumFmt
|
2017-07-14 21:15:44 +08:00
|
|
|
|
}
|
2023-05-11 09:08:38 +08:00
|
|
|
|
return 0
|
2017-04-07 17:32:14 +08:00
|
|
|
|
}
|
|
|
|
|
|
2020-05-24 20:20:22 +08:00
|
|
|
|
// getFillID provides a function to get fill ID. If given fill is not
|
|
|
|
|
// exist, will return -1.
|
|
|
|
|
func getFillID(styleSheet *xlsxStyleSheet, style *Style) (fillID int) {
|
|
|
|
|
fillID = -1
|
|
|
|
|
if styleSheet.Fills == nil || style.Fill.Type == "" {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
fills := newFills(style, true)
|
|
|
|
|
if fills == nil {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
for idx, fill := range styleSheet.Fills.Fill {
|
|
|
|
|
if reflect.DeepEqual(fill, fills) {
|
|
|
|
|
fillID = idx
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// newFills provides a function to add fill elements in the styles.xml by
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// given cell format settings.
|
2020-05-24 20:20:22 +08:00
|
|
|
|
func newFills(style *Style, fg bool) *xlsxFill {
|
2017-03-19 17:14:40 +08:00
|
|
|
|
var fill xlsxFill
|
2020-03-10 00:04:23 +08:00
|
|
|
|
switch style.Fill.Type {
|
2017-03-26 15:27:04 +08:00
|
|
|
|
case "gradient":
|
2023-02-01 00:11:08 +08:00
|
|
|
|
if len(style.Fill.Color) != 2 || style.Fill.Shading < 0 || style.Fill.Shading > 16 {
|
2017-03-26 15:27:04 +08:00
|
|
|
|
break
|
|
|
|
|
}
|
2023-09-21 00:06:31 +08:00
|
|
|
|
gradient := styleFillVariants[style.Fill.Shading]
|
2023-02-01 00:11:08 +08:00
|
|
|
|
gradient.Stop[0].Color.RGB = getPaletteColor(style.Fill.Color[0])
|
|
|
|
|
gradient.Stop[1].Color.RGB = getPaletteColor(style.Fill.Color[1])
|
|
|
|
|
if len(gradient.Stop) == 3 {
|
|
|
|
|
gradient.Stop[2].Color.RGB = getPaletteColor(style.Fill.Color[0])
|
2017-03-26 15:27:04 +08:00
|
|
|
|
}
|
|
|
|
|
fill.GradientFill = &gradient
|
|
|
|
|
case "pattern":
|
2020-03-10 00:04:23 +08:00
|
|
|
|
if style.Fill.Pattern > 18 || style.Fill.Pattern < 0 {
|
2017-03-26 15:27:04 +08:00
|
|
|
|
break
|
|
|
|
|
}
|
2020-03-10 00:04:23 +08:00
|
|
|
|
if len(style.Fill.Color) < 1 {
|
2017-03-26 15:27:04 +08:00
|
|
|
|
break
|
2017-03-19 17:14:40 +08:00
|
|
|
|
}
|
2017-03-26 15:27:04 +08:00
|
|
|
|
var pattern xlsxPatternFill
|
2023-09-21 00:06:31 +08:00
|
|
|
|
pattern.PatternType = styleFillPatterns[style.Fill.Pattern]
|
2017-08-11 23:15:33 +08:00
|
|
|
|
if fg {
|
2021-01-28 21:13:23 +08:00
|
|
|
|
if pattern.FgColor == nil {
|
|
|
|
|
pattern.FgColor = new(xlsxColor)
|
|
|
|
|
}
|
2020-03-10 00:04:23 +08:00
|
|
|
|
pattern.FgColor.RGB = getPaletteColor(style.Fill.Color[0])
|
2017-08-11 23:15:33 +08:00
|
|
|
|
} else {
|
2021-01-28 21:13:23 +08:00
|
|
|
|
if pattern.BgColor == nil {
|
|
|
|
|
pattern.BgColor = new(xlsxColor)
|
|
|
|
|
}
|
2020-03-10 00:04:23 +08:00
|
|
|
|
pattern.BgColor.RGB = getPaletteColor(style.Fill.Color[0])
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
2017-03-26 15:27:04 +08:00
|
|
|
|
fill.PatternFill = &pattern
|
2019-01-09 23:12:53 +08:00
|
|
|
|
default:
|
|
|
|
|
return nil
|
2017-03-19 17:14:40 +08:00
|
|
|
|
}
|
2017-08-11 23:15:33 +08:00
|
|
|
|
return &fill
|
2017-03-19 17:14:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
2020-05-24 20:20:22 +08:00
|
|
|
|
// newAlignment provides a function to formatting information pertaining to
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// text alignment in cells. There are a variety of choices for how text is
|
|
|
|
|
// aligned both horizontally and vertically, as well as indentation settings,
|
|
|
|
|
// and so on.
|
2020-05-24 20:20:22 +08:00
|
|
|
|
func newAlignment(style *Style) *xlsxAlignment {
|
2017-08-11 23:15:33 +08:00
|
|
|
|
var alignment xlsxAlignment
|
2020-03-10 00:04:23 +08:00
|
|
|
|
if style.Alignment != nil {
|
|
|
|
|
alignment.Horizontal = style.Alignment.Horizontal
|
|
|
|
|
alignment.Indent = style.Alignment.Indent
|
|
|
|
|
alignment.JustifyLastLine = style.Alignment.JustifyLastLine
|
|
|
|
|
alignment.ReadingOrder = style.Alignment.ReadingOrder
|
|
|
|
|
alignment.RelativeIndent = style.Alignment.RelativeIndent
|
|
|
|
|
alignment.ShrinkToFit = style.Alignment.ShrinkToFit
|
|
|
|
|
alignment.TextRotation = style.Alignment.TextRotation
|
|
|
|
|
alignment.Vertical = style.Alignment.Vertical
|
|
|
|
|
alignment.WrapText = style.Alignment.WrapText
|
2017-03-26 15:27:04 +08:00
|
|
|
|
}
|
2017-08-11 23:15:33 +08:00
|
|
|
|
return &alignment
|
2017-03-26 15:27:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
2020-05-24 20:20:22 +08:00
|
|
|
|
// newProtection provides a function to set protection properties associated
|
2018-03-07 12:56:18 +08:00
|
|
|
|
// with the cell.
|
2020-05-24 20:20:22 +08:00
|
|
|
|
func newProtection(style *Style) *xlsxProtection {
|
2018-03-07 12:56:18 +08:00
|
|
|
|
var protection xlsxProtection
|
2020-03-10 00:04:23 +08:00
|
|
|
|
if style.Protection != nil {
|
2021-03-25 00:05:02 +08:00
|
|
|
|
protection.Hidden = &style.Protection.Hidden
|
|
|
|
|
protection.Locked = &style.Protection.Locked
|
2018-03-07 12:56:18 +08:00
|
|
|
|
}
|
|
|
|
|
return &protection
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-24 20:20:22 +08:00
|
|
|
|
// getBorderID provides a function to get border ID. If given border is not
|
|
|
|
|
// exist, will return -1.
|
|
|
|
|
func getBorderID(styleSheet *xlsxStyleSheet, style *Style) (borderID int) {
|
|
|
|
|
borderID = -1
|
|
|
|
|
if styleSheet.Borders == nil || len(style.Border) == 0 {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
for idx, border := range styleSheet.Borders.Border {
|
|
|
|
|
if reflect.DeepEqual(*border, *newBorders(style)) {
|
|
|
|
|
borderID = idx
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// newBorders provides a function to add border elements in the styles.xml by
|
2017-03-06 12:05:41 +08:00
|
|
|
|
// given borders format settings.
|
2020-05-24 20:20:22 +08:00
|
|
|
|
func newBorders(style *Style) *xlsxBorder {
|
2017-03-06 12:05:41 +08:00
|
|
|
|
var border xlsxBorder
|
2020-03-10 00:04:23 +08:00
|
|
|
|
for _, v := range style.Border {
|
2017-09-30 17:07:59 +08:00
|
|
|
|
if 0 <= v.Style && v.Style < 14 {
|
|
|
|
|
var color xlsxColor
|
|
|
|
|
color.RGB = getPaletteColor(v.Color)
|
|
|
|
|
switch v.Type {
|
|
|
|
|
case "left":
|
2023-09-21 00:06:31 +08:00
|
|
|
|
border.Left.Style = styleBorders[v.Style]
|
2017-09-30 17:07:59 +08:00
|
|
|
|
border.Left.Color = &color
|
|
|
|
|
case "right":
|
2023-09-21 00:06:31 +08:00
|
|
|
|
border.Right.Style = styleBorders[v.Style]
|
2017-09-30 17:07:59 +08:00
|
|
|
|
border.Right.Color = &color
|
|
|
|
|
case "top":
|
2023-09-21 00:06:31 +08:00
|
|
|
|
border.Top.Style = styleBorders[v.Style]
|
2017-09-30 17:07:59 +08:00
|
|
|
|
border.Top.Color = &color
|
|
|
|
|
case "bottom":
|
2023-09-21 00:06:31 +08:00
|
|
|
|
border.Bottom.Style = styleBorders[v.Style]
|
2017-09-30 17:07:59 +08:00
|
|
|
|
border.Bottom.Color = &color
|
|
|
|
|
case "diagonalUp":
|
2023-09-21 00:06:31 +08:00
|
|
|
|
border.Diagonal.Style = styleBorders[v.Style]
|
2017-09-30 17:07:59 +08:00
|
|
|
|
border.Diagonal.Color = &color
|
|
|
|
|
border.DiagonalUp = true
|
|
|
|
|
case "diagonalDown":
|
2023-09-21 00:06:31 +08:00
|
|
|
|
border.Diagonal.Style = styleBorders[v.Style]
|
2017-09-30 17:07:59 +08:00
|
|
|
|
border.Diagonal.Color = &color
|
|
|
|
|
border.DiagonalDown = true
|
|
|
|
|
}
|
2017-03-06 12:05:41 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2017-08-11 23:15:33 +08:00
|
|
|
|
return &border
|
2017-03-06 12:05:41 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-05-30 00:14:44 +08:00
|
|
|
|
// setCellXfs provides a function to set describes all the formatting for a
|
2017-03-06 12:05:41 +08:00
|
|
|
|
// cell.
|
2023-02-02 22:02:32 +08:00
|
|
|
|
func setCellXfs(style *xlsxStyleSheet, fontID, numFmtID, fillID, borderID int, applyAlignment, applyProtection bool, alignment *xlsxAlignment, protection *xlsxProtection) (int, error) {
|
2017-03-06 12:05:41 +08:00
|
|
|
|
var xf xlsxXf
|
2020-05-10 16:56:08 +08:00
|
|
|
|
xf.FontID = intPtr(fontID)
|
2017-04-25 18:43:10 +08:00
|
|
|
|
if fontID != 0 {
|
2020-05-10 16:56:08 +08:00
|
|
|
|
xf.ApplyFont = boolPtr(true)
|
2017-04-25 18:43:10 +08:00
|
|
|
|
}
|
2020-05-10 16:56:08 +08:00
|
|
|
|
xf.NumFmtID = intPtr(numFmtID)
|
2017-04-07 17:32:14 +08:00
|
|
|
|
if numFmtID != 0 {
|
2020-05-10 16:56:08 +08:00
|
|
|
|
xf.ApplyNumberFormat = boolPtr(true)
|
2017-04-07 17:32:14 +08:00
|
|
|
|
}
|
2020-05-10 16:56:08 +08:00
|
|
|
|
xf.FillID = intPtr(fillID)
|
2020-05-24 20:20:22 +08:00
|
|
|
|
if fillID != 0 {
|
|
|
|
|
xf.ApplyFill = boolPtr(true)
|
|
|
|
|
}
|
2020-05-10 16:56:08 +08:00
|
|
|
|
xf.BorderID = intPtr(borderID)
|
2020-05-24 20:20:22 +08:00
|
|
|
|
if borderID != 0 {
|
|
|
|
|
xf.ApplyBorder = boolPtr(true)
|
|
|
|
|
}
|
2023-02-02 22:02:32 +08:00
|
|
|
|
if len(style.CellXfs.Xf) == MaxCellStyles {
|
|
|
|
|
return 0, ErrCellStyles
|
|
|
|
|
}
|
2022-04-28 15:33:25 +08:00
|
|
|
|
style.CellXfs.Count = len(style.CellXfs.Xf) + 1
|
2017-03-26 15:27:04 +08:00
|
|
|
|
xf.Alignment = alignment
|
2020-05-24 20:20:22 +08:00
|
|
|
|
if alignment != nil {
|
|
|
|
|
xf.ApplyAlignment = boolPtr(applyAlignment)
|
|
|
|
|
}
|
2018-03-07 12:56:18 +08:00
|
|
|
|
if applyProtection {
|
2020-05-10 16:56:08 +08:00
|
|
|
|
xf.ApplyProtection = boolPtr(applyProtection)
|
2018-03-07 12:56:18 +08:00
|
|
|
|
xf.Protection = protection
|
|
|
|
|
}
|
2017-08-07 10:42:10 +08:00
|
|
|
|
xfID := 0
|
|
|
|
|
xf.XfID = &xfID
|
2017-03-06 12:05:41 +08:00
|
|
|
|
style.CellXfs.Xf = append(style.CellXfs.Xf, xf)
|
2023-02-02 22:02:32 +08:00
|
|
|
|
return style.CellXfs.Count - 1, nil
|
2017-03-06 12:05:41 +08:00
|
|
|
|
}
|
|
|
|
|
|
Huge refactorig for consistent col/row numbering (#356)
* Huge refactorig for consistent col/row numbering
Started from simply changing ToALphaString()/TitleToNumber() logic and related fixes.
But have to go deeper, do fixes, after do related fixes and again and again.
Major improvements:
1. Tests made stronger again (But still be weak).
2. "Empty" returns for incorrect input replaces with panic.
3. Check for correct col/row/cell naming & addressing by default.
4. Removed huge amount of duplicated code.
5. Removed ToALphaString(), TitleToNumber() and it helpers functions at all,
and replaced with SplitCellName(), JoinCellName(), ColumnNameToNumber(), ColumnNumberToName(), CellNameToCoordinates(), CoordinatesToCellName().
6. Minor fixes for internal variable naming for code readability (ex. col, row for input params, colIdx, rowIdx for slice indexes etc).
* Formatting fixes
2019-03-20 00:14:41 +08:00
|
|
|
|
// GetCellStyle provides a function to get cell style index by given worksheet
|
2022-09-18 00:07:15 +08:00
|
|
|
|
// name and cell reference.
|
|
|
|
|
func (f *File) GetCellStyle(sheet, cell string) (int, error) {
|
2020-11-10 23:48:09 +08:00
|
|
|
|
ws, err := f.workSheetReader(sheet)
|
2019-04-15 11:22:57 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
return 0, err
|
|
|
|
|
}
|
2022-09-28 00:04:17 +08:00
|
|
|
|
col, row, err := CellNameToCoordinates(cell)
|
2019-03-23 20:08:06 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
return 0, err
|
|
|
|
|
}
|
2023-04-24 00:02:13 +08:00
|
|
|
|
ws.prepareSheetXML(col, row)
|
|
|
|
|
ws.mu.Lock()
|
|
|
|
|
defer ws.mu.Unlock()
|
|
|
|
|
return ws.prepareCellStyle(col, row, ws.SheetData.Row[row-1].C[col-1].S), err
|
Huge refactorig for consistent col/row numbering (#356)
* Huge refactorig for consistent col/row numbering
Started from simply changing ToALphaString()/TitleToNumber() logic and related fixes.
But have to go deeper, do fixes, after do related fixes and again and again.
Major improvements:
1. Tests made stronger again (But still be weak).
2. "Empty" returns for incorrect input replaces with panic.
3. Check for correct col/row/cell naming & addressing by default.
4. Removed huge amount of duplicated code.
5. Removed ToALphaString(), TitleToNumber() and it helpers functions at all,
and replaced with SplitCellName(), JoinCellName(), ColumnNameToNumber(), ColumnNumberToName(), CellNameToCoordinates(), CoordinatesToCellName().
6. Minor fixes for internal variable naming for code readability (ex. col, row for input params, colIdx, rowIdx for slice indexes etc).
* Formatting fixes
2019-03-20 00:14:41 +08:00
|
|
|
|
}
|
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// SetCellStyle provides a function to add style attribute for cells by given
|
2022-09-18 00:07:15 +08:00
|
|
|
|
// worksheet name, range reference and style ID. This function is concurrency
|
2022-09-11 00:04:04 +08:00
|
|
|
|
// safe. Note that diagonalDown and diagonalUp type border should be use same
|
2022-09-18 00:07:15 +08:00
|
|
|
|
// color in the same range. SetCellStyle will overwrite the existing
|
2022-09-11 00:04:04 +08:00
|
|
|
|
// styles for the cell, it won't append or merge style with existing styles.
|
2017-06-29 19:41:00 +08:00
|
|
|
|
//
|
|
|
|
|
// For example create a borders of cell H9 on Sheet1:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// style, err := f.NewStyle(&excelize.Style{
|
|
|
|
|
// Border: []excelize.Border{
|
|
|
|
|
// {Type: "left", Color: "0000FF", Style: 3},
|
|
|
|
|
// {Type: "top", Color: "00FF00", Style: 4},
|
|
|
|
|
// {Type: "bottom", Color: "FFFF00", Style: 5},
|
|
|
|
|
// {Type: "right", Color: "FF0000", Style: 6},
|
|
|
|
|
// {Type: "diagonalDown", Color: "A020F0", Style: 7},
|
|
|
|
|
// {Type: "diagonalUp", Color: "A020F0", Style: 8},
|
|
|
|
|
// },
|
|
|
|
|
// })
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// fmt.Println(err)
|
|
|
|
|
// }
|
|
|
|
|
// err = f.SetCellStyle("Sheet1", "H9", "H9", style)
|
2017-06-29 19:41:00 +08:00
|
|
|
|
//
|
|
|
|
|
// Set gradient fill with vertical variants shading styles for cell H9 on
|
|
|
|
|
// Sheet1:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// style, err := f.NewStyle(&excelize.Style{
|
2023-02-27 00:05:36 +08:00
|
|
|
|
// Fill: excelize.Fill{Type: "gradient", Color: []string{"FFFFFF", "E0EBF5"}, Shading: 1},
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// })
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// fmt.Println(err)
|
|
|
|
|
// }
|
|
|
|
|
// err = f.SetCellStyle("Sheet1", "H9", "H9", style)
|
2017-06-29 19:41:00 +08:00
|
|
|
|
//
|
|
|
|
|
// Set solid style pattern fill for cell H9 on Sheet1:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// style, err := f.NewStyle(&excelize.Style{
|
2023-02-27 00:05:36 +08:00
|
|
|
|
// Fill: excelize.Fill{Type: "pattern", Color: []string{"E0EBF5"}, Pattern: 1},
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// })
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// fmt.Println(err)
|
|
|
|
|
// }
|
|
|
|
|
// err = f.SetCellStyle("Sheet1", "H9", "H9", style)
|
2017-06-29 19:41:00 +08:00
|
|
|
|
//
|
|
|
|
|
// Set alignment style for cell H9 on Sheet1:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// style, err := f.NewStyle(&excelize.Style{
|
|
|
|
|
// Alignment: &excelize.Alignment{
|
|
|
|
|
// Horizontal: "center",
|
|
|
|
|
// Indent: 1,
|
|
|
|
|
// JustifyLastLine: true,
|
|
|
|
|
// ReadingOrder: 0,
|
|
|
|
|
// RelativeIndent: 1,
|
|
|
|
|
// ShrinkToFit: true,
|
|
|
|
|
// TextRotation: 45,
|
|
|
|
|
// Vertical: "",
|
|
|
|
|
// WrapText: true,
|
|
|
|
|
// },
|
|
|
|
|
// })
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// fmt.Println(err)
|
|
|
|
|
// }
|
|
|
|
|
// err = f.SetCellStyle("Sheet1", "H9", "H9", style)
|
2017-06-29 19:41:00 +08:00
|
|
|
|
//
|
|
|
|
|
// Dates and times in Excel are represented by real numbers, for example "Apr 7
|
|
|
|
|
// 2017 12:00 PM" is represented by the number 42920.5. Set date and time format
|
|
|
|
|
// for cell H9 on Sheet1:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// f.SetCellValue("Sheet1", "H9", 42920.5)
|
|
|
|
|
// style, err := f.NewStyle(&excelize.Style{NumFmt: 22})
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// fmt.Println(err)
|
|
|
|
|
// }
|
|
|
|
|
// err = f.SetCellStyle("Sheet1", "H9", "H9", style)
|
2017-06-29 19:41:00 +08:00
|
|
|
|
//
|
|
|
|
|
// Set font style for cell H9 on Sheet1:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// style, err := f.NewStyle(&excelize.Style{
|
|
|
|
|
// Font: &excelize.Font{
|
|
|
|
|
// Bold: true,
|
|
|
|
|
// Italic: true,
|
|
|
|
|
// Family: "Times New Roman",
|
|
|
|
|
// Size: 36,
|
2023-02-27 00:05:36 +08:00
|
|
|
|
// Color: "777777",
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// },
|
|
|
|
|
// })
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// fmt.Println(err)
|
|
|
|
|
// }
|
|
|
|
|
// err = f.SetCellStyle("Sheet1", "H9", "H9", style)
|
2017-06-29 19:41:00 +08:00
|
|
|
|
//
|
2018-03-07 12:56:18 +08:00
|
|
|
|
// Hide and lock for cell H9 on Sheet1:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// style, err := f.NewStyle(&excelize.Style{
|
|
|
|
|
// Protection: &excelize.Protection{
|
|
|
|
|
// Hidden: true,
|
|
|
|
|
// Locked: true,
|
|
|
|
|
// },
|
|
|
|
|
// })
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// fmt.Println(err)
|
|
|
|
|
// }
|
|
|
|
|
// err = f.SetCellStyle("Sheet1", "H9", "H9", style)
|
2022-01-09 00:20:42 +08:00
|
|
|
|
func (f *File) SetCellStyle(sheet, hCell, vCell string, styleID int) error {
|
|
|
|
|
hCol, hRow, err := CellNameToCoordinates(hCell)
|
2017-09-19 11:59:33 +08:00
|
|
|
|
if err != nil {
|
2019-03-23 20:08:06 +08:00
|
|
|
|
return err
|
2017-09-19 11:59:33 +08:00
|
|
|
|
}
|
2017-03-06 12:05:41 +08:00
|
|
|
|
|
2022-01-09 00:20:42 +08:00
|
|
|
|
vCol, vRow, err := CellNameToCoordinates(vCell)
|
2017-09-19 11:59:33 +08:00
|
|
|
|
if err != nil {
|
2019-03-23 20:08:06 +08:00
|
|
|
|
return err
|
2017-09-19 11:59:33 +08:00
|
|
|
|
}
|
2017-03-06 12:05:41 +08:00
|
|
|
|
|
2022-09-18 00:07:15 +08:00
|
|
|
|
// Normalize the range, such correct C1:B3 to B1:C3.
|
2022-01-09 00:20:42 +08:00
|
|
|
|
if vCol < hCol {
|
|
|
|
|
vCol, hCol = hCol, vCol
|
2017-03-06 12:05:41 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-01-09 00:20:42 +08:00
|
|
|
|
if vRow < hRow {
|
|
|
|
|
vRow, hRow = hRow, vRow
|
2017-03-06 12:05:41 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-01-09 00:20:42 +08:00
|
|
|
|
hColIdx := hCol - 1
|
|
|
|
|
hRowIdx := hRow - 1
|
Huge refactorig for consistent col/row numbering (#356)
* Huge refactorig for consistent col/row numbering
Started from simply changing ToALphaString()/TitleToNumber() logic and related fixes.
But have to go deeper, do fixes, after do related fixes and again and again.
Major improvements:
1. Tests made stronger again (But still be weak).
2. "Empty" returns for incorrect input replaces with panic.
3. Check for correct col/row/cell naming & addressing by default.
4. Removed huge amount of duplicated code.
5. Removed ToALphaString(), TitleToNumber() and it helpers functions at all,
and replaced with SplitCellName(), JoinCellName(), ColumnNameToNumber(), ColumnNumberToName(), CellNameToCoordinates(), CoordinatesToCellName().
6. Minor fixes for internal variable naming for code readability (ex. col, row for input params, colIdx, rowIdx for slice indexes etc).
* Formatting fixes
2019-03-20 00:14:41 +08:00
|
|
|
|
|
2022-01-09 00:20:42 +08:00
|
|
|
|
vColIdx := vCol - 1
|
|
|
|
|
vRowIdx := vRow - 1
|
2023-04-25 08:44:41 +08:00
|
|
|
|
f.mu.Lock()
|
2020-11-10 23:48:09 +08:00
|
|
|
|
ws, err := f.workSheetReader(sheet)
|
2019-04-15 11:22:57 +08:00
|
|
|
|
if err != nil {
|
2023-04-25 08:44:41 +08:00
|
|
|
|
f.mu.Unlock()
|
2019-04-15 11:22:57 +08:00
|
|
|
|
return err
|
|
|
|
|
}
|
2022-11-12 00:02:11 +08:00
|
|
|
|
s, err := f.stylesReader()
|
|
|
|
|
if err != nil {
|
2023-04-25 08:44:41 +08:00
|
|
|
|
f.mu.Unlock()
|
2022-11-12 00:02:11 +08:00
|
|
|
|
return err
|
|
|
|
|
}
|
2023-04-25 08:44:41 +08:00
|
|
|
|
f.mu.Unlock()
|
|
|
|
|
|
|
|
|
|
ws.mu.Lock()
|
|
|
|
|
defer ws.mu.Unlock()
|
|
|
|
|
|
|
|
|
|
ws.prepareSheetXML(vCol, vRow)
|
|
|
|
|
ws.makeContiguousColumns(hRow, vRow, vCol)
|
|
|
|
|
|
2022-09-01 00:41:52 +08:00
|
|
|
|
if styleID < 0 || s.CellXfs == nil || len(s.CellXfs.Xf) <= styleID {
|
|
|
|
|
return newInvalidStyleID(styleID)
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-09 00:20:42 +08:00
|
|
|
|
for r := hRowIdx; r <= vRowIdx; r++ {
|
|
|
|
|
for k := hColIdx; k <= vColIdx; k++ {
|
2020-11-10 23:48:09 +08:00
|
|
|
|
ws.SheetData.Row[r].C[k].S = styleID
|
2017-03-06 12:05:41 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2019-04-15 11:22:57 +08:00
|
|
|
|
return err
|
2017-03-06 12:05:41 +08:00
|
|
|
|
}
|
2017-03-19 17:14:40 +08:00
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// SetConditionalFormat provides a function to create conditional formatting
|
|
|
|
|
// rule for cell value. Conditional formatting is a feature of Excel which
|
|
|
|
|
// allows you to apply a format to a cell or a range of cells based on certain
|
|
|
|
|
// criteria.
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
|
|
|
|
// The type option is a required parameter and it has no default value.
|
|
|
|
|
// Allowable type values and their associated parameters are:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// Type | Parameters
|
|
|
|
|
// ---------------+------------------------------------
|
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
|
|
|
|
// cell | Criteria
|
|
|
|
|
// | Value
|
2023-02-22 22:46:36 +08:00
|
|
|
|
// | MinValue
|
|
|
|
|
// | MaxValue
|
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
|
|
|
|
// time_period | Criteria
|
|
|
|
|
// text | Criteria
|
|
|
|
|
// | Value
|
|
|
|
|
// average | Criteria
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// duplicate | (none)
|
|
|
|
|
// unique | (none)
|
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
|
|
|
|
// top | Criteria
|
|
|
|
|
// | Value
|
|
|
|
|
// bottom | Criteria
|
|
|
|
|
// | Value
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// blanks | (none)
|
|
|
|
|
// no_blanks | (none)
|
|
|
|
|
// errors | (none)
|
|
|
|
|
// no_errors | (none)
|
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
|
|
|
|
// 2_color_scale | MinType
|
|
|
|
|
// | MaxType
|
|
|
|
|
// | MinValue
|
|
|
|
|
// | MaxValue
|
|
|
|
|
// | MinColor
|
|
|
|
|
// | MaxColor
|
|
|
|
|
// 3_color_scale | MinType
|
|
|
|
|
// | MidType
|
|
|
|
|
// | MaxType
|
|
|
|
|
// | MinValue
|
|
|
|
|
// | MidValue
|
|
|
|
|
// | MaxValue
|
|
|
|
|
// | MinColor
|
|
|
|
|
// | MidColor
|
|
|
|
|
// | MaxColor
|
|
|
|
|
// data_bar | MinType
|
|
|
|
|
// | MaxType
|
|
|
|
|
// | MinValue
|
|
|
|
|
// | MaxValue
|
2023-02-08 00:03:45 +08:00
|
|
|
|
// | BarBorderColor
|
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
|
|
|
|
// | BarColor
|
2023-02-08 00:03:45 +08:00
|
|
|
|
// | BarDirection
|
|
|
|
|
// | BarOnly
|
|
|
|
|
// | BarSolid
|
2023-02-22 22:46:36 +08:00
|
|
|
|
// icon_set | IconStyle
|
2023-02-08 00:03:45 +08:00
|
|
|
|
// | ReverseIcons
|
|
|
|
|
// | IconsOnly
|
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
|
|
|
|
// formula | Criteria
|
|
|
|
|
//
|
|
|
|
|
// The 'Criteria' parameter is used to set the criteria by which the cell data
|
2017-08-11 23:15:33 +08:00
|
|
|
|
// will be evaluated. It has no default value. The most common criteria as
|
2023-10-11 00:04:38 +08:00
|
|
|
|
// applied to {Type: "cell"} are:
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// between |
|
|
|
|
|
// not between |
|
|
|
|
|
// equal to | ==
|
|
|
|
|
// not equal to | !=
|
|
|
|
|
// greater than | >
|
|
|
|
|
// less than | <
|
|
|
|
|
// greater than or equal to | >=
|
|
|
|
|
// less than or equal to | <=
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
|
|
|
|
// You can either use Excel's textual description strings, in the first column
|
|
|
|
|
// above, or the more common symbolic alternatives.
|
|
|
|
|
//
|
|
|
|
|
// Additional criteria which are specific to other conditional format types are
|
|
|
|
|
// shown in the relevant sections below.
|
|
|
|
|
//
|
|
|
|
|
// value: The value is generally used along with the criteria parameter to set
|
|
|
|
|
// the rule by which the cell data will be evaluated:
|
|
|
|
|
//
|
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.SetConditionalFormat("Sheet1", "D1:D10",
|
|
|
|
|
// []excelize.ConditionalFormatOptions{
|
|
|
|
|
// {
|
|
|
|
|
// Type: "cell",
|
|
|
|
|
// Criteria: ">",
|
|
|
|
|
// Format: format,
|
|
|
|
|
// Value: "6",
|
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
|
|
|
|
// The value property can also be an cell reference:
|
|
|
|
|
//
|
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.SetConditionalFormat("Sheet1", "D1:D10",
|
|
|
|
|
// []excelize.ConditionalFormatOptions{
|
|
|
|
|
// {
|
|
|
|
|
// Type: "cell",
|
|
|
|
|
// Criteria: ">",
|
|
|
|
|
// Format: format,
|
|
|
|
|
// Value: "$C$1",
|
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
|
|
|
|
// type: format - The format parameter is used to specify the format that will
|
|
|
|
|
// be applied to the cell when the conditional formatting criterion is met. The
|
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
|
|
|
|
// format is created using the NewConditionalStyle function in the same way as
|
2017-08-11 23:15:33 +08:00
|
|
|
|
// cell formats:
|
|
|
|
|
//
|
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
|
|
|
|
// format, err := f.NewConditionalStyle(
|
|
|
|
|
// &excelize.Style{
|
2023-02-27 00:05:36 +08:00
|
|
|
|
// Font: &excelize.Font{Color: "9A0511"},
|
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
|
|
|
|
// Fill: excelize.Fill{
|
2023-02-27 00:05:36 +08:00
|
|
|
|
// Type: "pattern", Color: []string{"FEC7CE"}, Pattern: 1,
|
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
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// if err != nil {
|
|
|
|
|
// fmt.Println(err)
|
|
|
|
|
// }
|
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.SetConditionalFormat("Sheet1", "D1:D10",
|
|
|
|
|
// []excelize.ConditionalFormatOptions{
|
|
|
|
|
// {Type: "cell", Criteria: ">", Format: format, Value: "6"},
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
|
|
|
|
// Note: In Excel, a conditional format is superimposed over the existing cell
|
|
|
|
|
// format and not all cell format properties can be modified. Properties that
|
|
|
|
|
// cannot be modified in a conditional format are font name, font size,
|
|
|
|
|
// superscript and subscript, diagonal borders, all alignment properties and all
|
|
|
|
|
// protection properties.
|
|
|
|
|
//
|
|
|
|
|
// Excel specifies some default formats to be used with conditional formatting.
|
|
|
|
|
// These can be replicated using the following excelize formats:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// // Rose format for bad conditional.
|
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
|
|
|
|
// format1, err := f.NewConditionalStyle(
|
|
|
|
|
// &excelize.Style{
|
2023-02-27 00:05:36 +08:00
|
|
|
|
// Font: &excelize.Font{Color: "9A0511"},
|
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
|
|
|
|
// Fill: excelize.Fill{
|
|
|
|
|
// Type: "pattern", Color: []string{"#FEC7CE"}, Pattern: 1,
|
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// // Light yellow format for neutral conditional.
|
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
|
|
|
|
// format2, err := f.NewConditionalStyle(
|
|
|
|
|
// &excelize.Style{
|
2023-02-27 00:05:36 +08:00
|
|
|
|
// Font: &excelize.Font{Color: "9B5713"},
|
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
|
|
|
|
// Fill: excelize.Fill{
|
2023-02-27 00:05:36 +08:00
|
|
|
|
// Type: "pattern", Color: []string{"FEEAA0"}, Pattern: 1,
|
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
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// // Light green format for good conditional.
|
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
|
|
|
|
// format3, err := f.NewConditionalStyle(
|
|
|
|
|
// &excelize.Style{
|
2023-02-27 00:05:36 +08:00
|
|
|
|
// Font: &excelize.Font{Color: "09600B"},
|
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
|
|
|
|
// Fill: excelize.Fill{
|
2023-02-27 00:05:36 +08:00
|
|
|
|
// Type: "pattern", Color: []string{"C7EECF"}, Pattern: 1,
|
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
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
2023-02-22 22:46:36 +08:00
|
|
|
|
// type: MinValue - The 'MinValue' parameter is used to set the lower limiting
|
2023-01-02 11:47:31 +08:00
|
|
|
|
// value when the criteria is either "between" or "not between".
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
2022-08-27 00:45:46 +08:00
|
|
|
|
// // Highlight cells rules: between...
|
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.SetConditionalFormat("Sheet1", "A1:A10",
|
|
|
|
|
// []excelize.ConditionalFormatOptions{
|
|
|
|
|
// {
|
|
|
|
|
// Type: "cell",
|
|
|
|
|
// Criteria: "between",
|
|
|
|
|
// Format: format,
|
2023-02-22 22:46:36 +08:00
|
|
|
|
// MinValue: 6",
|
|
|
|
|
// MaxValue: 8",
|
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
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
2023-02-22 22:46:36 +08:00
|
|
|
|
// type: MaxValue - The 'MaxValue' parameter is used to set the upper limiting
|
2023-01-02 11:47:31 +08:00
|
|
|
|
// value when the criteria is either "between" or "not between". See the
|
|
|
|
|
// previous example.
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
|
|
|
|
// type: average - The average type is used to specify Excel's "Average" style
|
|
|
|
|
// conditional format:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// // Top/Bottom rules: Above Average...
|
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.SetConditionalFormat("Sheet1", "A1:A10",
|
|
|
|
|
// []excelize.ConditionalFormatOptions{
|
|
|
|
|
// {
|
|
|
|
|
// Type: "average",
|
|
|
|
|
// Criteria: "=",
|
|
|
|
|
// Format: format1,
|
|
|
|
|
// AboveAverage: true,
|
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// // Top/Bottom rules: Below Average...
|
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.SetConditionalFormat("Sheet1", "B1:B10",
|
|
|
|
|
// []excelize.ConditionalFormatOptions{
|
|
|
|
|
// {
|
|
|
|
|
// Type: "average",
|
|
|
|
|
// Criteria: "=",
|
|
|
|
|
// Format: format2,
|
|
|
|
|
// AboveAverage: false,
|
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
2023-02-08 00:03:45 +08:00
|
|
|
|
// type: duplicate - The duplicate type is used to highlight duplicate cells in
|
|
|
|
|
// a range:
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
2022-08-27 00:45:46 +08:00
|
|
|
|
// // Highlight cells rules: Duplicate Values...
|
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.SetConditionalFormat("Sheet1", "A1:A10",
|
|
|
|
|
// []excelize.ConditionalFormatOptions{
|
|
|
|
|
// {Type: "duplicate", Criteria: "=", Format: format},
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
|
|
|
|
// type: unique - The unique type is used to highlight unique cells in a range:
|
|
|
|
|
//
|
2022-08-27 00:45:46 +08:00
|
|
|
|
// // Highlight cells rules: Not Equal To...
|
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.SetConditionalFormat("Sheet1", "A1:A10",
|
|
|
|
|
// []excelize.ConditionalFormatOptions{
|
|
|
|
|
// {Type: "unique", Criteria: "=", Format: format},
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
2023-02-08 00:03:45 +08:00
|
|
|
|
// type: top - The top type is used to specify the top n values by number or
|
|
|
|
|
// percentage in a range:
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// // Top/Bottom rules: Top 10.
|
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.SetConditionalFormat("Sheet1", "H1:H10",
|
|
|
|
|
// []excelize.ConditionalFormatOptions{
|
|
|
|
|
// {
|
|
|
|
|
// Type: "top",
|
|
|
|
|
// Criteria: "=",
|
|
|
|
|
// Format: format,
|
|
|
|
|
// Value: "6",
|
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
|
|
|
|
// The criteria can be used to indicate that a percentage condition is required:
|
|
|
|
|
//
|
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.SetConditionalFormat("Sheet1", "A1:A10",
|
|
|
|
|
// []excelize.ConditionalFormatOptions{
|
|
|
|
|
// {
|
|
|
|
|
// Type: "top",
|
|
|
|
|
// Criteria: "=",
|
|
|
|
|
// Format: format,
|
|
|
|
|
// Value: "6",
|
|
|
|
|
// Percent: true,
|
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
|
|
|
|
// type: 2_color_scale - The 2_color_scale type is used to specify Excel's "2
|
|
|
|
|
// Color Scale" style conditional format:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// // Color scales: 2 color.
|
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.SetConditionalFormat("Sheet1", "A1:A10",
|
|
|
|
|
// []excelize.ConditionalFormatOptions{
|
|
|
|
|
// {
|
|
|
|
|
// Type: "2_color_scale",
|
|
|
|
|
// Criteria: "=",
|
|
|
|
|
// MinType: "min",
|
|
|
|
|
// MaxType: "max",
|
|
|
|
|
// MinColor: "#F8696B",
|
|
|
|
|
// MaxColor: "#63BE7B",
|
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
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
|
|
|
|
// This conditional type can be modified with MinType, MaxType, MinValue,
|
|
|
|
|
// MaxValue, MinColor and MaxColor, see below.
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
|
|
|
|
// type: 3_color_scale - The 3_color_scale type is used to specify Excel's "3
|
|
|
|
|
// Color Scale" style conditional format:
|
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// // Color scales: 3 color.
|
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.SetConditionalFormat("Sheet1", "A1:A10",
|
|
|
|
|
// []excelize.ConditionalFormatOptions{
|
|
|
|
|
// {
|
|
|
|
|
// Type: "3_color_scale",
|
|
|
|
|
// Criteria: "=",
|
|
|
|
|
// MinType: "min",
|
|
|
|
|
// MidType: "percentile",
|
|
|
|
|
// MaxType: "max",
|
|
|
|
|
// MinColor: "#F8696B",
|
|
|
|
|
// MidColor: "#FFEB84",
|
|
|
|
|
// MaxColor: "#63BE7B",
|
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
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
|
|
|
|
// This conditional type can be modified with MinType, MidType, MaxType,
|
|
|
|
|
// MinValue, MidValue, MaxValue, MinColor, MidColor and MaxColor, see
|
2017-08-11 23:15:33 +08:00
|
|
|
|
// below.
|
|
|
|
|
//
|
|
|
|
|
// type: data_bar - The data_bar type is used to specify Excel's "Data Bar"
|
|
|
|
|
// style conditional format.
|
|
|
|
|
//
|
2023-02-08 00:03:45 +08:00
|
|
|
|
// MinType - The MinType and MaxType properties are available when the
|
|
|
|
|
// conditional formatting type is 2_color_scale, 3_color_scale or data_bar.
|
|
|
|
|
// The MidType is available for 3_color_scale. The properties are used as
|
|
|
|
|
// follows:
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// // Data Bars: Gradient Fill.
|
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.SetConditionalFormat("Sheet1", "K1:K10",
|
|
|
|
|
// []excelize.ConditionalFormatOptions{
|
|
|
|
|
// {
|
|
|
|
|
// Type: "data_bar",
|
|
|
|
|
// Criteria: "=",
|
|
|
|
|
// MinType: "min",
|
|
|
|
|
// MaxType: "max",
|
|
|
|
|
// BarColor: "#638EC6",
|
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
|
|
|
|
// The available min/mid/max types are:
|
|
|
|
|
//
|
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
|
|
|
|
// min (for MinType only)
|
2022-08-13 11:21:59 +08:00
|
|
|
|
// num
|
|
|
|
|
// percent
|
|
|
|
|
// percentile
|
|
|
|
|
// formula
|
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
|
|
|
|
// max (for MaxType only)
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
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
|
|
|
|
// MidType - Used for 3_color_scale. Same as MinType, see above.
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
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
|
|
|
|
// MaxType - Same as MinType, see above.
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
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
|
|
|
|
// MinValue - The MinValue and MaxValue properties are available when the
|
|
|
|
|
// conditional formatting type is 2_color_scale, 3_color_scale or data_bar.
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
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
|
|
|
|
// MidValue - The MidValue is available for 3_color_scale. Same as MinValue,
|
|
|
|
|
// see above.
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
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
|
|
|
|
// MaxValue - Same as MinValue, see above.
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
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
|
|
|
|
// MinColor - The MinColor and MaxColor properties are available when the
|
2017-08-11 23:15:33 +08:00
|
|
|
|
// conditional formatting type is 2_color_scale, 3_color_scale or data_bar.
|
|
|
|
|
//
|
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
|
|
|
|
// MidColor - The MidColor is available for 3_color_scale. The properties
|
|
|
|
|
// are used as follows:
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
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
|
|
|
|
// // Color scales: 3 color.
|
|
|
|
|
// err := f.SetConditionalFormat("Sheet1", "B1:B10",
|
|
|
|
|
// []excelize.ConditionalFormatOptions{
|
|
|
|
|
// {
|
|
|
|
|
// Type: "3_color_scale",
|
|
|
|
|
// Criteria: "=",
|
|
|
|
|
// MinType: "min",
|
|
|
|
|
// MidType: "percentile",
|
|
|
|
|
// MaxType: "max",
|
|
|
|
|
// MinColor: "#F8696B",
|
|
|
|
|
// MidColor: "#FFEB84",
|
|
|
|
|
// MaxColor: "#63BE7B",
|
|
|
|
|
// },
|
|
|
|
|
// },
|
|
|
|
|
// )
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
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
|
|
|
|
// MaxColor - Same as MinColor, see above.
|
2017-08-11 23:15:33 +08:00
|
|
|
|
//
|
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
|
|
|
|
// BarColor - Used for data_bar. Same as MinColor, see above.
|
2023-02-07 00:08:11 +08:00
|
|
|
|
//
|
|
|
|
|
// BarBorderColor - Used for sets the color for the border line of a data bar,
|
|
|
|
|
// this is only visible in Excel 2010 and later.
|
|
|
|
|
//
|
2023-02-08 00:03:45 +08:00
|
|
|
|
// BarDirection - sets the direction for data bars. The available options are:
|
|
|
|
|
//
|
|
|
|
|
// context - Data bar direction is set by spreadsheet application based on the context of the data displayed.
|
|
|
|
|
// leftToRight - Data bar direction is from right to left.
|
|
|
|
|
// rightToLeft - Data bar direction is from left to right.
|
|
|
|
|
//
|
|
|
|
|
// BarOnly - Used for set displays a bar data but not the data in the cells.
|
2023-02-07 00:08:11 +08:00
|
|
|
|
//
|
|
|
|
|
// BarSolid - Used for turns on a solid (non-gradient) fill for data bars, this
|
|
|
|
|
// is only visible in Excel 2010 and later.
|
|
|
|
|
//
|
2023-02-08 00:03:45 +08:00
|
|
|
|
// IconStyle - The available options are:
|
|
|
|
|
//
|
|
|
|
|
// 3Arrows
|
|
|
|
|
// 3ArrowsGray
|
|
|
|
|
// 3Flags
|
|
|
|
|
// 3Signs
|
|
|
|
|
// 3Symbols
|
|
|
|
|
// 3Symbols2
|
|
|
|
|
// 3TrafficLights1
|
|
|
|
|
// 3TrafficLights2
|
|
|
|
|
// 4Arrows
|
|
|
|
|
// 4ArrowsGray
|
|
|
|
|
// 4Rating
|
|
|
|
|
// 4RedToBlack
|
|
|
|
|
// 4TrafficLights
|
|
|
|
|
// 5Arrows
|
|
|
|
|
// 5ArrowsGray
|
|
|
|
|
// 5Quarters
|
|
|
|
|
// 5Rating
|
|
|
|
|
//
|
|
|
|
|
// ReverseIcons - Used for set reversed icons sets.
|
|
|
|
|
//
|
|
|
|
|
// IconsOnly - Used for set displayed without the cell value.
|
|
|
|
|
//
|
2023-02-07 00:08:11 +08:00
|
|
|
|
// StopIfTrue - used to set the "stop if true" feature of a conditional
|
|
|
|
|
// formatting rule when more than one rule is applied to a cell or a range of
|
|
|
|
|
// cells. When this parameter is set then subsequent rules are not evaluated
|
|
|
|
|
// if the current rule is true.
|
2023-01-02 11:47:31 +08:00
|
|
|
|
func (f *File) SetConditionalFormat(sheet, rangeRef string, opts []ConditionalFormatOptions) error {
|
2020-11-10 23:48:09 +08:00
|
|
|
|
ws, err := f.workSheetReader(sheet)
|
2019-04-15 11:22:57 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
2023-11-13 00:16:29 +08:00
|
|
|
|
if strings.Contains(rangeRef, ":") {
|
|
|
|
|
rect, err := rangeRefToCoordinates(rangeRef)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_ = sortCoordinates(rect)
|
|
|
|
|
rangeRef, _ = f.coordinatesToRangeRef(rect, strings.Contains(rangeRef, "$"))
|
|
|
|
|
}
|
2023-02-07 00:08:11 +08:00
|
|
|
|
// Create a pseudo GUID for each unique rule.
|
|
|
|
|
var rules int
|
|
|
|
|
for _, cf := range ws.ConditionalFormatting {
|
|
|
|
|
rules += len(cf.CfRule)
|
|
|
|
|
}
|
2023-11-13 00:16:29 +08:00
|
|
|
|
var (
|
|
|
|
|
GUID = fmt.Sprintf("{00000000-0000-0000-%04X-%012X}", f.getSheetID(sheet), rules)
|
|
|
|
|
cfRule []*xlsxCfRule
|
|
|
|
|
noCriteriaTypes = []string{
|
|
|
|
|
"containsBlanks",
|
|
|
|
|
"notContainsBlanks",
|
|
|
|
|
"containsErrors",
|
|
|
|
|
"notContainsErrors",
|
|
|
|
|
"expression",
|
|
|
|
|
"iconSet",
|
|
|
|
|
}
|
|
|
|
|
)
|
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
|
|
|
|
for p, v := range opts {
|
2017-08-11 23:15:33 +08:00
|
|
|
|
var vt, ct string
|
|
|
|
|
var ok bool
|
|
|
|
|
// "type" is a required parameter, check for valid validation types.
|
|
|
|
|
vt, ok = validType[v.Type]
|
|
|
|
|
if ok {
|
2017-09-30 17:07:59 +08:00
|
|
|
|
// Check for valid criteria types.
|
|
|
|
|
ct, ok = criteriaType[v.Criteria]
|
2023-11-13 00:16:29 +08:00
|
|
|
|
if ok || inStrSlice(noCriteriaTypes, vt, true) != -1 {
|
2022-08-27 00:45:46 +08:00
|
|
|
|
drawFunc, ok := drawContFmtFunc[vt]
|
2017-09-30 17:07:59 +08:00
|
|
|
|
if ok {
|
2023-11-13 00:16:29 +08:00
|
|
|
|
rule, x14rule := drawFunc(p, ct, strings.Split(rangeRef, ":")[0], GUID, &v)
|
2023-02-08 00:03:45 +08:00
|
|
|
|
if rule == nil {
|
|
|
|
|
return ErrParameterInvalid
|
|
|
|
|
}
|
2023-02-07 00:08:11 +08:00
|
|
|
|
if x14rule != nil {
|
|
|
|
|
if err = f.appendCfRule(ws, x14rule); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
f.addSheetNameSpace(sheet, NameSpaceSpreadSheetX14)
|
|
|
|
|
}
|
|
|
|
|
cfRule = append(cfRule, rule)
|
2023-11-10 09:25:59 +08:00
|
|
|
|
continue
|
2017-09-30 17:07:59 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2023-11-10 09:25:59 +08:00
|
|
|
|
return ErrParameterInvalid
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
2023-11-13 00:16:29 +08:00
|
|
|
|
return ErrParameterInvalid
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
2020-11-10 23:48:09 +08:00
|
|
|
|
ws.ConditionalFormatting = append(ws.ConditionalFormatting, &xlsxConditionalFormatting{
|
2023-01-02 11:47:31 +08:00
|
|
|
|
SQRef: rangeRef,
|
2017-08-11 23:15:33 +08:00
|
|
|
|
CfRule: cfRule,
|
|
|
|
|
})
|
2018-05-27 11:25:55 +08:00
|
|
|
|
return err
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-02-07 00:08:11 +08:00
|
|
|
|
// appendCfRule provides a function to append rules to conditional formatting.
|
|
|
|
|
func (f *File) appendCfRule(ws *xlsxWorksheet, rule *xlsxX14CfRule) error {
|
|
|
|
|
var (
|
2023-02-08 00:03:45 +08:00
|
|
|
|
err error
|
|
|
|
|
idx int
|
|
|
|
|
appendMode bool
|
2023-09-16 12:21:11 +08:00
|
|
|
|
decodeExtLst = new(decodeExtLst)
|
2023-02-08 00:03:45 +08:00
|
|
|
|
condFmts *xlsxX14ConditionalFormattings
|
|
|
|
|
decodeCondFmts *decodeX14ConditionalFormattings
|
2023-09-16 12:21:11 +08:00
|
|
|
|
ext *xlsxExt
|
2023-02-08 00:03:45 +08:00
|
|
|
|
condFmtBytes, condFmtsBytes, extLstBytes []byte
|
2023-02-07 00:08:11 +08:00
|
|
|
|
)
|
2023-02-08 00:03:45 +08:00
|
|
|
|
condFmtBytes, _ = xml.Marshal([]*xlsxX14ConditionalFormatting{
|
|
|
|
|
{XMLNSXM: NameSpaceSpreadSheetExcel2006Main.Value, CfRule: []*xlsxX14CfRule{rule}},
|
|
|
|
|
})
|
2023-02-07 00:08:11 +08:00
|
|
|
|
if ws.ExtLst != nil { // append mode ext
|
|
|
|
|
if err = f.xmlNewDecoder(strings.NewReader("<extLst>" + ws.ExtLst.Ext + "</extLst>")).
|
|
|
|
|
Decode(decodeExtLst); err != nil && err != io.EOF {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
for idx, ext = range decodeExtLst.Ext {
|
|
|
|
|
if ext.URI == ExtURIConditionalFormattings {
|
|
|
|
|
decodeCondFmts = new(decodeX14ConditionalFormattings)
|
|
|
|
|
_ = f.xmlNewDecoder(strings.NewReader(ext.Content)).Decode(decodeCondFmts)
|
|
|
|
|
if condFmts == nil {
|
|
|
|
|
condFmts = &xlsxX14ConditionalFormattings{}
|
|
|
|
|
}
|
|
|
|
|
condFmts.Content = decodeCondFmts.Content + string(condFmtBytes)
|
|
|
|
|
condFmtsBytes, _ = xml.Marshal(condFmts)
|
|
|
|
|
decodeExtLst.Ext[idx].Content = string(condFmtsBytes)
|
2023-02-08 00:03:45 +08:00
|
|
|
|
appendMode = true
|
2023-02-07 00:08:11 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-02-08 00:03:45 +08:00
|
|
|
|
if !appendMode {
|
|
|
|
|
condFmtsBytes, _ = xml.Marshal(&xlsxX14ConditionalFormattings{Content: string(condFmtBytes)})
|
2023-09-16 12:21:11 +08:00
|
|
|
|
decodeExtLst.Ext = append(decodeExtLst.Ext, &xlsxExt{
|
2023-02-08 00:03:45 +08:00
|
|
|
|
URI: ExtURIConditionalFormattings, Content: string(condFmtsBytes),
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
sort.Slice(decodeExtLst.Ext, func(i, j int) bool {
|
2023-09-27 00:05:59 +08:00
|
|
|
|
return inStrSlice(worksheetExtURIPriority, decodeExtLst.Ext[i].URI, false) <
|
|
|
|
|
inStrSlice(worksheetExtURIPriority, decodeExtLst.Ext[j].URI, false)
|
2023-02-07 00:08:11 +08:00
|
|
|
|
})
|
2023-02-08 00:03:45 +08:00
|
|
|
|
extLstBytes, err = xml.Marshal(decodeExtLst)
|
|
|
|
|
ws.ExtLst = &xlsxExtLst{Ext: strings.TrimSuffix(strings.TrimPrefix(string(extLstBytes), "<extLst>"), "</extLst>")}
|
2023-02-07 00:08:11 +08:00
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-27 00:45:46 +08:00
|
|
|
|
// extractCondFmtCellIs provides a function to extract conditional format
|
|
|
|
|
// settings for cell value (include between, not between, equal, not equal,
|
|
|
|
|
// greater than and less than) by given conditional formatting rule.
|
2023-02-07 00:08:11 +08:00
|
|
|
|
func extractCondFmtCellIs(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
2023-12-08 00:09:06 +08:00
|
|
|
|
format := ConditionalFormatOptions{StopIfTrue: c.StopIfTrue, Type: "cell", Criteria: operatorType[c.Operator]}
|
|
|
|
|
if c.DxfID != nil {
|
|
|
|
|
format.Format = *c.DxfID
|
|
|
|
|
}
|
2022-08-27 00:45:46 +08:00
|
|
|
|
if len(c.Formula) == 2 {
|
2023-02-22 22:46:36 +08:00
|
|
|
|
format.MinValue, format.MaxValue = c.Formula[0], c.Formula[1]
|
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
|
|
|
|
return format
|
2022-08-27 00:45:46 +08:00
|
|
|
|
}
|
|
|
|
|
format.Value = c.Formula[0]
|
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
|
|
|
|
return format
|
2022-08-27 00:45:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-11-14 09:47:57 +08:00
|
|
|
|
// extractCondFmtTimePeriod provides a function to extract conditional format
|
|
|
|
|
// settings for time period by given conditional formatting rule.
|
|
|
|
|
func extractCondFmtTimePeriod(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
2023-12-08 00:09:06 +08:00
|
|
|
|
format := ConditionalFormatOptions{StopIfTrue: c.StopIfTrue, Type: "time_period", Criteria: operatorType[c.Operator]}
|
|
|
|
|
if c.DxfID != nil {
|
|
|
|
|
format.Format = *c.DxfID
|
|
|
|
|
}
|
|
|
|
|
return format
|
2023-11-14 09:47:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-11-13 00:16:29 +08:00
|
|
|
|
// extractCondFmtText provides a function to extract conditional format
|
|
|
|
|
// settings for text cell values by given conditional formatting rule.
|
|
|
|
|
func extractCondFmtText(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
2023-12-08 00:09:06 +08:00
|
|
|
|
format := ConditionalFormatOptions{StopIfTrue: c.StopIfTrue, Type: "text", Criteria: operatorType[c.Operator], Value: c.Text}
|
|
|
|
|
if c.DxfID != nil {
|
|
|
|
|
format.Format = *c.DxfID
|
|
|
|
|
}
|
|
|
|
|
return format
|
2023-11-13 00:16:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-08-27 00:45:46 +08:00
|
|
|
|
// extractCondFmtTop10 provides a function to extract conditional format
|
|
|
|
|
// settings for top N (default is top 10) by given conditional formatting
|
|
|
|
|
// rule.
|
2023-02-07 00:08:11 +08:00
|
|
|
|
func extractCondFmtTop10(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
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
|
|
|
|
format := ConditionalFormatOptions{
|
2023-02-07 00:08:11 +08:00
|
|
|
|
StopIfTrue: c.StopIfTrue,
|
|
|
|
|
Type: "top",
|
|
|
|
|
Criteria: "=",
|
|
|
|
|
Percent: c.Percent,
|
|
|
|
|
Value: strconv.Itoa(c.Rank),
|
2022-08-27 00:45:46 +08:00
|
|
|
|
}
|
2023-12-08 00:09:06 +08:00
|
|
|
|
if c.DxfID != nil {
|
|
|
|
|
format.Format = *c.DxfID
|
|
|
|
|
}
|
2022-08-27 00:45:46 +08:00
|
|
|
|
if c.Bottom {
|
|
|
|
|
format.Type = "bottom"
|
|
|
|
|
}
|
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
|
|
|
|
return format
|
2022-08-27 00:45:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// extractCondFmtAboveAverage provides a function to extract conditional format
|
|
|
|
|
// settings for above average and below average by given conditional formatting
|
|
|
|
|
// rule.
|
2023-02-07 00:08:11 +08:00
|
|
|
|
func extractCondFmtAboveAverage(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
2023-12-08 00:09:06 +08:00
|
|
|
|
format := ConditionalFormatOptions{
|
|
|
|
|
StopIfTrue: c.StopIfTrue,
|
|
|
|
|
Type: "average",
|
|
|
|
|
Criteria: "=",
|
|
|
|
|
}
|
|
|
|
|
if c.DxfID != nil {
|
|
|
|
|
format.Format = *c.DxfID
|
2022-08-27 00:45:46 +08:00
|
|
|
|
}
|
2023-12-08 00:09:06 +08:00
|
|
|
|
if c.AboveAverage != nil {
|
|
|
|
|
format.AboveAverage = *c.AboveAverage
|
|
|
|
|
}
|
|
|
|
|
return format
|
2022-08-27 00:45:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// extractCondFmtDuplicateUniqueValues provides a function to extract
|
|
|
|
|
// conditional format settings for duplicate and unique values by given
|
|
|
|
|
// conditional formatting rule.
|
2023-02-07 00:08:11 +08:00
|
|
|
|
func extractCondFmtDuplicateUniqueValues(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
2023-12-08 00:09:06 +08:00
|
|
|
|
format := ConditionalFormatOptions{
|
2023-02-07 00:08:11 +08:00
|
|
|
|
StopIfTrue: c.StopIfTrue,
|
2022-08-27 00:45:46 +08:00
|
|
|
|
Type: map[string]string{
|
|
|
|
|
"duplicateValues": "duplicate",
|
|
|
|
|
"uniqueValues": "unique",
|
|
|
|
|
}[c.Type],
|
|
|
|
|
Criteria: "=",
|
|
|
|
|
}
|
2023-12-08 00:09:06 +08:00
|
|
|
|
if c.DxfID != nil {
|
|
|
|
|
format.Format = *c.DxfID
|
|
|
|
|
}
|
|
|
|
|
return format
|
2022-08-27 00:45:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-11-13 00:16:29 +08:00
|
|
|
|
// extractCondFmtBlanks provides a function to extract conditional format
|
|
|
|
|
// settings for blank cells by given conditional formatting rule.
|
|
|
|
|
func extractCondFmtBlanks(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
2023-12-08 00:09:06 +08:00
|
|
|
|
format := ConditionalFormatOptions{
|
2023-11-13 00:16:29 +08:00
|
|
|
|
StopIfTrue: c.StopIfTrue,
|
|
|
|
|
Type: "blanks",
|
|
|
|
|
}
|
2023-12-08 00:09:06 +08:00
|
|
|
|
if c.DxfID != nil {
|
|
|
|
|
format.Format = *c.DxfID
|
|
|
|
|
}
|
|
|
|
|
return format
|
2023-11-13 00:16:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// extractCondFmtNoBlanks provides a function to extract conditional format
|
|
|
|
|
// settings for no blank cells by given conditional formatting rule.
|
|
|
|
|
func extractCondFmtNoBlanks(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
2023-12-08 00:09:06 +08:00
|
|
|
|
format := ConditionalFormatOptions{
|
2023-11-13 00:16:29 +08:00
|
|
|
|
StopIfTrue: c.StopIfTrue,
|
|
|
|
|
Type: "no_blanks",
|
|
|
|
|
}
|
2023-12-08 00:09:06 +08:00
|
|
|
|
if c.DxfID != nil {
|
|
|
|
|
format.Format = *c.DxfID
|
|
|
|
|
}
|
|
|
|
|
return format
|
2023-11-13 00:16:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// extractCondFmtErrors provides a function to extract conditional format
|
|
|
|
|
// settings for cells with errors by given conditional formatting rule.
|
|
|
|
|
func extractCondFmtErrors(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
2023-12-08 00:09:06 +08:00
|
|
|
|
format := ConditionalFormatOptions{
|
2023-11-13 00:16:29 +08:00
|
|
|
|
StopIfTrue: c.StopIfTrue,
|
|
|
|
|
Type: "errors",
|
|
|
|
|
}
|
2023-12-08 00:09:06 +08:00
|
|
|
|
if c.DxfID != nil {
|
|
|
|
|
format.Format = *c.DxfID
|
|
|
|
|
}
|
|
|
|
|
return format
|
2023-11-13 00:16:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// extractCondFmtNoErrors provides a function to extract conditional format
|
|
|
|
|
// settings for cells without errors by given conditional formatting rule.
|
|
|
|
|
func extractCondFmtNoErrors(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
2023-12-08 00:09:06 +08:00
|
|
|
|
format := ConditionalFormatOptions{
|
2023-11-13 00:16:29 +08:00
|
|
|
|
StopIfTrue: c.StopIfTrue,
|
|
|
|
|
Type: "no_errors",
|
|
|
|
|
}
|
2023-12-08 00:09:06 +08:00
|
|
|
|
if c.DxfID != nil {
|
|
|
|
|
format.Format = *c.DxfID
|
|
|
|
|
}
|
|
|
|
|
return format
|
2023-11-13 00:16:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-08-27 00:45:46 +08:00
|
|
|
|
// extractCondFmtColorScale provides a function to extract conditional format
|
|
|
|
|
// settings for color scale (include 2 color scale and 3 color scale) by given
|
|
|
|
|
// conditional formatting rule.
|
2023-02-07 00:08:11 +08:00
|
|
|
|
func extractCondFmtColorScale(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
|
|
|
|
format := ConditionalFormatOptions{StopIfTrue: c.StopIfTrue}
|
2022-08-27 00:45:46 +08:00
|
|
|
|
format.Type, format.Criteria = "2_color_scale", "="
|
|
|
|
|
values := len(c.ColorScale.Cfvo)
|
|
|
|
|
colors := len(c.ColorScale.Color)
|
|
|
|
|
if colors > 1 && values > 1 {
|
|
|
|
|
format.MinType = c.ColorScale.Cfvo[0].Type
|
|
|
|
|
if c.ColorScale.Cfvo[0].Val != "0" {
|
|
|
|
|
format.MinValue = c.ColorScale.Cfvo[0].Val
|
|
|
|
|
}
|
|
|
|
|
format.MinColor = "#" + strings.TrimPrefix(strings.ToUpper(c.ColorScale.Color[0].RGB), "FF")
|
|
|
|
|
format.MaxType = c.ColorScale.Cfvo[1].Type
|
|
|
|
|
if c.ColorScale.Cfvo[1].Val != "0" {
|
|
|
|
|
format.MaxValue = c.ColorScale.Cfvo[1].Val
|
|
|
|
|
}
|
|
|
|
|
format.MaxColor = "#" + strings.TrimPrefix(strings.ToUpper(c.ColorScale.Color[1].RGB), "FF")
|
|
|
|
|
}
|
|
|
|
|
if colors == 3 {
|
|
|
|
|
format.Type = "3_color_scale"
|
|
|
|
|
format.MidType = c.ColorScale.Cfvo[1].Type
|
|
|
|
|
if c.ColorScale.Cfvo[1].Val != "0" {
|
|
|
|
|
format.MidValue = c.ColorScale.Cfvo[1].Val
|
|
|
|
|
}
|
|
|
|
|
format.MidColor = "#" + strings.TrimPrefix(strings.ToUpper(c.ColorScale.Color[1].RGB), "FF")
|
|
|
|
|
format.MaxType = c.ColorScale.Cfvo[2].Type
|
|
|
|
|
if c.ColorScale.Cfvo[2].Val != "0" {
|
|
|
|
|
format.MaxValue = c.ColorScale.Cfvo[2].Val
|
|
|
|
|
}
|
|
|
|
|
format.MaxColor = "#" + strings.TrimPrefix(strings.ToUpper(c.ColorScale.Color[2].RGB), "FF")
|
|
|
|
|
}
|
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
|
|
|
|
return format
|
2022-08-27 00:45:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// extractCondFmtDataBar provides a function to extract conditional format
|
|
|
|
|
// settings for data bar by given conditional formatting rule.
|
2023-02-07 00:08:11 +08:00
|
|
|
|
func extractCondFmtDataBar(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
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
|
|
|
|
format := ConditionalFormatOptions{Type: "data_bar", Criteria: "="}
|
2022-08-27 00:45:46 +08:00
|
|
|
|
if c.DataBar != nil {
|
2023-02-07 00:08:11 +08:00
|
|
|
|
format.StopIfTrue = c.StopIfTrue
|
2022-08-27 00:45:46 +08:00
|
|
|
|
format.MinType = c.DataBar.Cfvo[0].Type
|
2023-03-14 00:58:20 +08:00
|
|
|
|
format.MinValue = c.DataBar.Cfvo[0].Val
|
2022-08-27 00:45:46 +08:00
|
|
|
|
format.MaxType = c.DataBar.Cfvo[1].Type
|
2023-03-14 00:58:20 +08:00
|
|
|
|
format.MaxValue = c.DataBar.Cfvo[1].Val
|
2022-08-27 00:45:46 +08:00
|
|
|
|
format.BarColor = "#" + strings.TrimPrefix(strings.ToUpper(c.DataBar.Color[0].RGB), "FF")
|
2023-02-07 00:08:11 +08:00
|
|
|
|
if c.DataBar.ShowValue != nil {
|
|
|
|
|
format.BarOnly = !*c.DataBar.ShowValue
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
extractDataBarRule := func(condFmts []decodeX14ConditionalFormatting) {
|
|
|
|
|
for _, condFmt := range condFmts {
|
|
|
|
|
for _, rule := range condFmt.CfRule {
|
|
|
|
|
if rule.DataBar != nil {
|
|
|
|
|
format.BarSolid = !rule.DataBar.Gradient
|
2023-02-08 00:03:45 +08:00
|
|
|
|
format.BarDirection = rule.DataBar.Direction
|
2023-02-07 00:08:11 +08:00
|
|
|
|
if rule.DataBar.BorderColor != nil {
|
|
|
|
|
format.BarBorderColor = "#" + strings.TrimPrefix(strings.ToUpper(rule.DataBar.BorderColor.RGB), "FF")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-09-16 12:21:11 +08:00
|
|
|
|
extractExtLst := func(extLst *decodeExtLst) {
|
2023-02-07 00:08:11 +08:00
|
|
|
|
for _, ext := range extLst.Ext {
|
|
|
|
|
if ext.URI == ExtURIConditionalFormattings {
|
|
|
|
|
decodeCondFmts := new(decodeX14ConditionalFormattings)
|
|
|
|
|
if err := xml.Unmarshal([]byte(ext.Content), &decodeCondFmts); err == nil {
|
2023-05-30 00:14:44 +08:00
|
|
|
|
var condFmts []decodeX14ConditionalFormatting
|
2023-02-07 00:08:11 +08:00
|
|
|
|
if err = xml.Unmarshal([]byte(decodeCondFmts.Content), &condFmts); err == nil {
|
|
|
|
|
extractDataBarRule(condFmts)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if c.ExtLst != nil {
|
|
|
|
|
ext := decodeX14ConditionalFormattingExt{}
|
|
|
|
|
if err := xml.Unmarshal([]byte(c.ExtLst.Ext), &ext); err == nil && extLst != nil {
|
2023-09-16 12:21:11 +08:00
|
|
|
|
decodeExtLst := new(decodeExtLst)
|
2023-02-07 00:08:11 +08:00
|
|
|
|
if err = xml.Unmarshal([]byte("<extLst>"+extLst.Ext+"</extLst>"), decodeExtLst); err == nil {
|
|
|
|
|
extractExtLst(decodeExtLst)
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-08-27 00:45:46 +08:00
|
|
|
|
}
|
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
|
|
|
|
return format
|
2022-08-27 00:45:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// extractCondFmtExp provides a function to extract conditional format settings
|
|
|
|
|
// for expression by given conditional formatting rule.
|
2023-02-07 00:08:11 +08:00
|
|
|
|
func extractCondFmtExp(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
2023-12-08 00:09:06 +08:00
|
|
|
|
format := ConditionalFormatOptions{StopIfTrue: c.StopIfTrue, Type: "formula"}
|
|
|
|
|
if c.DxfID != nil {
|
|
|
|
|
format.Format = *c.DxfID
|
|
|
|
|
}
|
2022-08-27 00:45:46 +08:00
|
|
|
|
if len(c.Formula) > 0 {
|
|
|
|
|
format.Criteria = c.Formula[0]
|
|
|
|
|
}
|
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
|
|
|
|
return format
|
2022-08-27 00:45:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-02-08 00:03:45 +08:00
|
|
|
|
// extractCondFmtIconSet provides a function to extract conditional format
|
|
|
|
|
// settings for icon sets by given conditional formatting rule.
|
|
|
|
|
func extractCondFmtIconSet(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
2023-02-22 22:46:36 +08:00
|
|
|
|
format := ConditionalFormatOptions{Type: "icon_set"}
|
2023-02-08 00:03:45 +08:00
|
|
|
|
if c.IconSet != nil {
|
|
|
|
|
if c.IconSet.ShowValue != nil {
|
|
|
|
|
format.IconsOnly = !*c.IconSet.ShowValue
|
|
|
|
|
}
|
|
|
|
|
format.IconStyle = c.IconSet.IconSet
|
|
|
|
|
format.ReverseIcons = c.IconSet.Reverse
|
|
|
|
|
}
|
|
|
|
|
return format
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-27 00:45:46 +08:00
|
|
|
|
// GetConditionalFormats returns conditional format settings by given worksheet
|
|
|
|
|
// name.
|
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
|
|
|
|
func (f *File) GetConditionalFormats(sheet string) (map[string][]ConditionalFormatOptions, error) {
|
|
|
|
|
conditionalFormats := make(map[string][]ConditionalFormatOptions)
|
2022-08-27 00:45:46 +08:00
|
|
|
|
ws, err := f.workSheetReader(sheet)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return conditionalFormats, err
|
|
|
|
|
}
|
|
|
|
|
for _, cf := range ws.ConditionalFormatting {
|
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
|
|
|
|
var opts []ConditionalFormatOptions
|
2022-08-27 00:45:46 +08:00
|
|
|
|
for _, cr := range cf.CfRule {
|
|
|
|
|
if extractFunc, ok := extractContFmtFunc[cr.Type]; ok {
|
2023-02-07 00:08:11 +08:00
|
|
|
|
opts = append(opts, extractFunc(cr, ws.ExtLst))
|
2022-08-27 00:45:46 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
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
|
|
|
|
conditionalFormats[cf.SQRef] = opts
|
2022-08-27 00:45:46 +08:00
|
|
|
|
}
|
|
|
|
|
return conditionalFormats, err
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-03 00:15:03 +08:00
|
|
|
|
// UnsetConditionalFormat provides a function to unset the conditional format
|
2022-09-18 00:07:15 +08:00
|
|
|
|
// by given worksheet name and range reference.
|
2023-01-02 11:47:31 +08:00
|
|
|
|
func (f *File) UnsetConditionalFormat(sheet, rangeRef string) error {
|
2020-03-03 00:15:03 +08:00
|
|
|
|
ws, err := f.workSheetReader(sheet)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
for i, cf := range ws.ConditionalFormatting {
|
2023-01-02 11:47:31 +08:00
|
|
|
|
if cf.SQRef == rangeRef {
|
2020-03-03 00:15:03 +08:00
|
|
|
|
ws.ConditionalFormatting = append(ws.ConditionalFormatting[:i], ws.ConditionalFormatting[i+1:]...)
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// drawCondFmtCellIs provides a function to create conditional formatting rule
|
|
|
|
|
// for cell value (include between, not between, equal, not equal, greater
|
|
|
|
|
// than and less than) by given priority, criteria type and format settings.
|
2023-11-13 00:16:29 +08:00
|
|
|
|
func drawCondFmtCellIs(p int, ct, ref, GUID string, format *ConditionalFormatOptions) (*xlsxCfRule, *xlsxX14CfRule) {
|
2017-08-11 23:15:33 +08:00
|
|
|
|
c := &xlsxCfRule{
|
2023-02-07 00:08:11 +08:00
|
|
|
|
Priority: p + 1,
|
|
|
|
|
StopIfTrue: format.StopIfTrue,
|
|
|
|
|
Type: validType[format.Type],
|
|
|
|
|
Operator: ct,
|
2023-02-22 22:46:36 +08:00
|
|
|
|
DxfID: intPtr(format.Format),
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
|
|
|
|
// "between" and "not between" criteria require 2 values.
|
2022-10-14 00:48:16 +08:00
|
|
|
|
if ct == "between" || ct == "notBetween" {
|
2023-02-22 22:46:36 +08:00
|
|
|
|
c.Formula = append(c.Formula, []string{format.MinValue, format.MaxValue}...)
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
2023-12-08 00:09:06 +08:00
|
|
|
|
if inStrSlice(cellIsCriteriaType, ct, true) != -1 {
|
2017-08-11 23:15:33 +08:00
|
|
|
|
c.Formula = append(c.Formula, format.Value)
|
|
|
|
|
}
|
2023-02-07 00:08:11 +08:00
|
|
|
|
return c, nil
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-11-14 09:47:57 +08:00
|
|
|
|
// drawCondFmtTimePeriod provides a function to create conditional formatting
|
|
|
|
|
// rule for time period by given priority, criteria type and format settings.
|
|
|
|
|
func drawCondFmtTimePeriod(p int, ct, ref, GUID string, format *ConditionalFormatOptions) (*xlsxCfRule, *xlsxX14CfRule) {
|
|
|
|
|
return &xlsxCfRule{
|
|
|
|
|
Priority: p + 1,
|
|
|
|
|
StopIfTrue: format.StopIfTrue,
|
|
|
|
|
Type: "timePeriod",
|
|
|
|
|
Operator: ct,
|
|
|
|
|
Formula: []string{
|
|
|
|
|
map[string]string{
|
|
|
|
|
"yesterday": fmt.Sprintf("FLOOR(%s,1)=TODAY()-1", ref),
|
|
|
|
|
"today": fmt.Sprintf("FLOOR(%s,1)=TODAY()", ref),
|
|
|
|
|
"tomorrow": fmt.Sprintf("FLOOR(%s,1)=TODAY()+1", ref),
|
|
|
|
|
"last 7 days": fmt.Sprintf("AND(TODAY()-FLOOR(%[1]s,1)<=6,FLOOR(%[1]s,1)<=TODAY())", ref),
|
|
|
|
|
"last week": fmt.Sprintf("AND(TODAY()-ROUNDDOWN(%[1]s,0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(%[1]s,0)<(WEEKDAY(TODAY())+7))", ref),
|
|
|
|
|
"this week": fmt.Sprintf("AND(TODAY()-ROUNDDOWN(%[1]s,0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(%[1]s,0)-TODAY()>=7-WEEKDAY(TODAY()))", ref),
|
|
|
|
|
"continue week": fmt.Sprintf("AND(ROUNDDOWN(%[1]s,0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(%[1]s,0)-TODAY()<(15-WEEKDAY(TODAY())))", ref),
|
|
|
|
|
"last month": fmt.Sprintf("AND(MONTH(%[1]s)=MONTH(TODAY())-1,OR(YEAR(%[1]s)=YEAR(TODAY()),AND(MONTH(%[1]s)=1,YEAR(%[1]s)=YEAR(TODAY())-1)))", ref),
|
|
|
|
|
"this month": fmt.Sprintf("AND(MONTH(%[1]s)=MONTH(TODAY()),YEAR(%[1]s)=YEAR(TODAY()))", ref),
|
|
|
|
|
"continue month": fmt.Sprintf("AND(MONTH(%[1]s)=MONTH(TODAY())+1,OR(YEAR(%[1]s)=YEAR(TODAY()),AND(MONTH(%[1]s)=12,YEAR(%[1]s)=YEAR(TODAY())+1)))", ref),
|
|
|
|
|
}[ct],
|
|
|
|
|
},
|
|
|
|
|
DxfID: intPtr(format.Format),
|
|
|
|
|
}, nil
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-13 00:16:29 +08:00
|
|
|
|
// drawCondFmtText provides a function to create conditional formatting rule for
|
|
|
|
|
// text cell values by given priority, criteria type and format settings.
|
|
|
|
|
func drawCondFmtText(p int, ct, ref, GUID string, format *ConditionalFormatOptions) (*xlsxCfRule, *xlsxX14CfRule) {
|
|
|
|
|
return &xlsxCfRule{
|
|
|
|
|
Priority: p + 1,
|
|
|
|
|
StopIfTrue: format.StopIfTrue,
|
|
|
|
|
Type: map[string]string{
|
|
|
|
|
"containsText": "containsText",
|
|
|
|
|
"notContains": "notContainsText",
|
|
|
|
|
"beginsWith": "beginsWith",
|
|
|
|
|
"endsWith": "endsWith",
|
|
|
|
|
}[ct],
|
|
|
|
|
Text: format.Value,
|
|
|
|
|
Operator: ct,
|
|
|
|
|
Formula: []string{
|
|
|
|
|
map[string]string{
|
|
|
|
|
"containsText": fmt.Sprintf("NOT(ISERROR(SEARCH(\"%s\",%s)))",
|
|
|
|
|
strings.NewReplacer(`"`, `""`).Replace(format.Value), ref),
|
|
|
|
|
"notContains": fmt.Sprintf("ISERROR(SEARCH(\"%s\",%s))",
|
|
|
|
|
strings.NewReplacer(`"`, `""`).Replace(format.Value), ref),
|
|
|
|
|
"beginsWith": fmt.Sprintf("LEFT(%[2]s,LEN(\"%[1]s\"))=\"%[1]s\"",
|
|
|
|
|
strings.NewReplacer(`"`, `""`).Replace(format.Value), ref),
|
|
|
|
|
"endsWith": fmt.Sprintf("RIGHT(%[2]s,LEN(\"%[1]s\"))=\"%[1]s\"",
|
|
|
|
|
strings.NewReplacer(`"`, `""`).Replace(format.Value), ref),
|
|
|
|
|
}[ct],
|
|
|
|
|
},
|
|
|
|
|
DxfID: intPtr(format.Format),
|
|
|
|
|
}, nil
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// drawCondFmtTop10 provides a function to create conditional formatting rule
|
|
|
|
|
// for top N (default is top 10) by given priority, criteria type and format
|
2017-08-11 23:15:33 +08:00
|
|
|
|
// settings.
|
2023-11-13 00:16:29 +08:00
|
|
|
|
func drawCondFmtTop10(p int, ct, ref, GUID string, format *ConditionalFormatOptions) (*xlsxCfRule, *xlsxX14CfRule) {
|
2017-08-11 23:15:33 +08:00
|
|
|
|
c := &xlsxCfRule{
|
2023-02-07 00:08:11 +08:00
|
|
|
|
Priority: p + 1,
|
|
|
|
|
StopIfTrue: format.StopIfTrue,
|
|
|
|
|
Bottom: format.Type == "bottom",
|
|
|
|
|
Type: validType[format.Type],
|
|
|
|
|
Rank: 10,
|
2023-02-22 22:46:36 +08:00
|
|
|
|
DxfID: intPtr(format.Format),
|
2023-02-07 00:08:11 +08:00
|
|
|
|
Percent: format.Percent,
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
2022-10-14 00:48:16 +08:00
|
|
|
|
if rank, err := strconv.Atoi(format.Value); err == nil {
|
2017-08-11 23:15:33 +08:00
|
|
|
|
c.Rank = rank
|
|
|
|
|
}
|
2023-02-07 00:08:11 +08:00
|
|
|
|
return c, nil
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// drawCondFmtAboveAverage provides a function to create conditional
|
|
|
|
|
// formatting rule for above average and below average by given priority,
|
|
|
|
|
// criteria type and format settings.
|
2023-11-13 00:16:29 +08:00
|
|
|
|
func drawCondFmtAboveAverage(p int, ct, ref, GUID string, format *ConditionalFormatOptions) (*xlsxCfRule, *xlsxX14CfRule) {
|
2017-08-11 23:15:33 +08:00
|
|
|
|
return &xlsxCfRule{
|
|
|
|
|
Priority: p + 1,
|
2023-02-07 00:08:11 +08:00
|
|
|
|
StopIfTrue: format.StopIfTrue,
|
2017-08-11 23:15:33 +08:00
|
|
|
|
Type: validType[format.Type],
|
2023-02-22 22:46:36 +08:00
|
|
|
|
AboveAverage: boolPtr(format.AboveAverage),
|
|
|
|
|
DxfID: intPtr(format.Format),
|
2023-02-07 00:08:11 +08:00
|
|
|
|
}, nil
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// drawCondFmtDuplicateUniqueValues provides a function to create conditional
|
2017-08-11 23:15:33 +08:00
|
|
|
|
// formatting rule for duplicate and unique values by given priority, criteria
|
|
|
|
|
// type and format settings.
|
2023-11-13 00:16:29 +08:00
|
|
|
|
func drawCondFmtDuplicateUniqueValues(p int, ct, ref, GUID string, format *ConditionalFormatOptions) (*xlsxCfRule, *xlsxX14CfRule) {
|
2017-08-11 23:15:33 +08:00
|
|
|
|
return &xlsxCfRule{
|
2023-02-07 00:08:11 +08:00
|
|
|
|
Priority: p + 1,
|
|
|
|
|
StopIfTrue: format.StopIfTrue,
|
|
|
|
|
Type: validType[format.Type],
|
2023-02-22 22:46:36 +08:00
|
|
|
|
DxfID: intPtr(format.Format),
|
2023-02-07 00:08:11 +08:00
|
|
|
|
}, nil
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// drawCondFmtColorScale provides a function to create conditional formatting
|
|
|
|
|
// rule for color scale (include 2 color scale and 3 color scale) by given
|
|
|
|
|
// priority, criteria type and format settings.
|
2023-11-13 00:16:29 +08:00
|
|
|
|
func drawCondFmtColorScale(p int, ct, ref, GUID string, format *ConditionalFormatOptions) (*xlsxCfRule, *xlsxX14CfRule) {
|
2018-07-25 04:12:26 +08:00
|
|
|
|
minValue := format.MinValue
|
|
|
|
|
if minValue == "" {
|
|
|
|
|
minValue = "0"
|
|
|
|
|
}
|
|
|
|
|
maxValue := format.MaxValue
|
|
|
|
|
if maxValue == "" {
|
|
|
|
|
maxValue = "0"
|
|
|
|
|
}
|
|
|
|
|
midValue := format.MidValue
|
|
|
|
|
if midValue == "" {
|
|
|
|
|
midValue = "50"
|
|
|
|
|
}
|
|
|
|
|
|
2017-08-11 23:15:33 +08:00
|
|
|
|
c := &xlsxCfRule{
|
2023-02-07 00:08:11 +08:00
|
|
|
|
Priority: p + 1,
|
|
|
|
|
StopIfTrue: format.StopIfTrue,
|
|
|
|
|
Type: "colorScale",
|
2017-08-11 23:15:33 +08:00
|
|
|
|
ColorScale: &xlsxColorScale{
|
|
|
|
|
Cfvo: []*xlsxCfvo{
|
2018-07-25 04:12:26 +08:00
|
|
|
|
{Type: format.MinType, Val: minValue},
|
2017-08-11 23:15:33 +08:00
|
|
|
|
},
|
|
|
|
|
Color: []*xlsxColor{
|
|
|
|
|
{RGB: getPaletteColor(format.MinColor)},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
if validType[format.Type] == "3_color_scale" {
|
2018-07-25 04:12:26 +08:00
|
|
|
|
c.ColorScale.Cfvo = append(c.ColorScale.Cfvo, &xlsxCfvo{Type: format.MidType, Val: midValue})
|
2017-08-11 23:15:33 +08:00
|
|
|
|
c.ColorScale.Color = append(c.ColorScale.Color, &xlsxColor{RGB: getPaletteColor(format.MidColor)})
|
|
|
|
|
}
|
2018-07-25 04:12:26 +08:00
|
|
|
|
c.ColorScale.Cfvo = append(c.ColorScale.Cfvo, &xlsxCfvo{Type: format.MaxType, Val: maxValue})
|
2017-08-11 23:15:33 +08:00
|
|
|
|
c.ColorScale.Color = append(c.ColorScale.Color, &xlsxColor{RGB: getPaletteColor(format.MaxColor)})
|
2023-02-07 00:08:11 +08:00
|
|
|
|
return c, nil
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// drawCondFmtDataBar provides a function to create conditional formatting
|
|
|
|
|
// rule for data bar by given priority, criteria type and format settings.
|
2023-11-13 00:16:29 +08:00
|
|
|
|
func drawCondFmtDataBar(p int, ct, ref, GUID string, format *ConditionalFormatOptions) (*xlsxCfRule, *xlsxX14CfRule) {
|
2023-02-07 00:08:11 +08:00
|
|
|
|
var x14CfRule *xlsxX14CfRule
|
|
|
|
|
var extLst *xlsxExtLst
|
2023-02-08 00:03:45 +08:00
|
|
|
|
if format.BarSolid || format.BarDirection == "leftToRight" || format.BarDirection == "rightToLeft" || format.BarBorderColor != "" {
|
2023-02-07 00:08:11 +08:00
|
|
|
|
extLst = &xlsxExtLst{Ext: fmt.Sprintf(`<ext uri="%s" xmlns:x14="%s"><x14:id>%s</x14:id></ext>`, ExtURIConditionalFormattingRuleID, NameSpaceSpreadSheetX14.Value, GUID)}
|
|
|
|
|
x14CfRule = &xlsxX14CfRule{
|
|
|
|
|
Type: validType[format.Type],
|
|
|
|
|
ID: GUID,
|
|
|
|
|
DataBar: &xlsx14DataBar{
|
|
|
|
|
MaxLength: 100,
|
2023-02-08 00:03:45 +08:00
|
|
|
|
Border: format.BarBorderColor != "",
|
|
|
|
|
Gradient: !format.BarSolid,
|
|
|
|
|
Direction: format.BarDirection,
|
2023-02-07 00:08:11 +08:00
|
|
|
|
Cfvo: []*xlsxCfvo{{Type: "autoMin"}, {Type: "autoMax"}},
|
|
|
|
|
NegativeFillColor: &xlsxColor{RGB: "FFFF0000"},
|
|
|
|
|
AxisColor: &xlsxColor{RGB: "FFFF0000"},
|
|
|
|
|
},
|
|
|
|
|
}
|
2023-02-08 00:03:45 +08:00
|
|
|
|
if x14CfRule.DataBar.Border {
|
2023-02-07 00:08:11 +08:00
|
|
|
|
x14CfRule.DataBar.BorderColor = &xlsxColor{RGB: getPaletteColor(format.BarBorderColor)}
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-08-11 23:15:33 +08:00
|
|
|
|
return &xlsxCfRule{
|
2023-02-07 00:08:11 +08:00
|
|
|
|
Priority: p + 1,
|
|
|
|
|
StopIfTrue: format.StopIfTrue,
|
|
|
|
|
Type: validType[format.Type],
|
2017-08-11 23:15:33 +08:00
|
|
|
|
DataBar: &xlsxDataBar{
|
2023-02-07 00:08:11 +08:00
|
|
|
|
ShowValue: boolPtr(!format.BarOnly),
|
2023-03-14 00:58:20 +08:00
|
|
|
|
Cfvo: []*xlsxCfvo{{Type: format.MinType, Val: format.MinValue}, {Type: format.MaxType, Val: format.MaxValue}},
|
2023-02-07 00:08:11 +08:00
|
|
|
|
Color: []*xlsxColor{{RGB: getPaletteColor(format.BarColor)}},
|
2017-08-11 23:15:33 +08:00
|
|
|
|
},
|
2023-02-07 00:08:11 +08:00
|
|
|
|
ExtLst: extLst,
|
|
|
|
|
}, x14CfRule
|
2017-08-11 23:15:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-08-27 00:45:46 +08:00
|
|
|
|
// drawCondFmtExp provides a function to create conditional formatting rule
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// for expression by given priority, criteria type and format settings.
|
2023-11-13 00:16:29 +08:00
|
|
|
|
func drawCondFmtExp(p int, ct, ref, GUID string, format *ConditionalFormatOptions) (*xlsxCfRule, *xlsxX14CfRule) {
|
2017-08-18 20:55:27 +08:00
|
|
|
|
return &xlsxCfRule{
|
2023-02-07 00:08:11 +08:00
|
|
|
|
Priority: p + 1,
|
|
|
|
|
StopIfTrue: format.StopIfTrue,
|
|
|
|
|
Type: validType[format.Type],
|
|
|
|
|
Formula: []string{format.Criteria},
|
2023-02-22 22:46:36 +08:00
|
|
|
|
DxfID: intPtr(format.Format),
|
2023-02-07 00:08:11 +08:00
|
|
|
|
}, nil
|
2017-08-18 20:55:27 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-11-13 00:16:29 +08:00
|
|
|
|
// drawCondFmtErrors provides a function to create conditional formatting rule
|
|
|
|
|
// for cells with errors by given priority, criteria type and format settings.
|
|
|
|
|
func drawCondFmtErrors(p int, ct, ref, GUID string, format *ConditionalFormatOptions) (*xlsxCfRule, *xlsxX14CfRule) {
|
|
|
|
|
return &xlsxCfRule{
|
|
|
|
|
Priority: p + 1,
|
|
|
|
|
StopIfTrue: format.StopIfTrue,
|
|
|
|
|
Type: validType[format.Type],
|
|
|
|
|
Formula: []string{fmt.Sprintf("ISERROR(%s)", ref)},
|
|
|
|
|
DxfID: intPtr(format.Format),
|
|
|
|
|
}, nil
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-07 15:22:26 +08:00
|
|
|
|
// drawCondFmtNoErrors provides a function to create conditional formatting rule
|
2023-11-13 00:16:29 +08:00
|
|
|
|
// for cells without errors by given priority, criteria type and format settings.
|
|
|
|
|
func drawCondFmtNoErrors(p int, ct, ref, GUID string, format *ConditionalFormatOptions) (*xlsxCfRule, *xlsxX14CfRule) {
|
|
|
|
|
return &xlsxCfRule{
|
|
|
|
|
Priority: p + 1,
|
|
|
|
|
StopIfTrue: format.StopIfTrue,
|
|
|
|
|
Type: validType[format.Type],
|
|
|
|
|
Formula: []string{fmt.Sprintf("NOT(ISERROR(%s))", ref)},
|
|
|
|
|
DxfID: intPtr(format.Format),
|
|
|
|
|
}, nil
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-07 15:22:26 +08:00
|
|
|
|
// drawCondFmtBlanks provides a function to create conditional formatting rule
|
2023-11-13 00:16:29 +08:00
|
|
|
|
// for blank cells by given priority, criteria type and format settings.
|
|
|
|
|
func drawCondFmtBlanks(p int, ct, ref, GUID string, format *ConditionalFormatOptions) (*xlsxCfRule, *xlsxX14CfRule) {
|
|
|
|
|
return &xlsxCfRule{
|
|
|
|
|
Priority: p + 1,
|
|
|
|
|
StopIfTrue: format.StopIfTrue,
|
|
|
|
|
Type: validType[format.Type],
|
|
|
|
|
Formula: []string{fmt.Sprintf("LEN(TRIM(%s))=0", ref)},
|
|
|
|
|
DxfID: intPtr(format.Format),
|
|
|
|
|
}, nil
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-07 15:22:26 +08:00
|
|
|
|
// drawCondFmtNoBlanks provides a function to create conditional formatting rule
|
2023-11-13 00:16:29 +08:00
|
|
|
|
// for no blanks cells by given priority, criteria type and format settings.
|
|
|
|
|
func drawCondFmtNoBlanks(p int, ct, ref, GUID string, format *ConditionalFormatOptions) (*xlsxCfRule, *xlsxX14CfRule) {
|
|
|
|
|
return &xlsxCfRule{
|
|
|
|
|
Priority: p + 1,
|
|
|
|
|
StopIfTrue: format.StopIfTrue,
|
|
|
|
|
Type: validType[format.Type],
|
|
|
|
|
Formula: []string{fmt.Sprintf("LEN(TRIM(%s))>0", ref)},
|
|
|
|
|
DxfID: intPtr(format.Format),
|
|
|
|
|
}, nil
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-08 00:03:45 +08:00
|
|
|
|
// drawCondFmtIconSet provides a function to create conditional formatting rule
|
|
|
|
|
// for icon set by given priority, criteria type and format settings.
|
2023-11-13 00:16:29 +08:00
|
|
|
|
func drawCondFmtIconSet(p int, ct, ref, GUID string, format *ConditionalFormatOptions) (*xlsxCfRule, *xlsxX14CfRule) {
|
2023-12-08 00:09:06 +08:00
|
|
|
|
cfRule, ok := condFmtIconSetPresets[format.IconStyle]
|
2023-02-08 00:03:45 +08:00
|
|
|
|
if !ok {
|
|
|
|
|
return nil, nil
|
|
|
|
|
}
|
|
|
|
|
cfRule.Priority = p + 1
|
|
|
|
|
cfRule.IconSet.IconSet = format.IconStyle
|
|
|
|
|
cfRule.IconSet.Reverse = format.ReverseIcons
|
|
|
|
|
cfRule.IconSet.ShowValue = boolPtr(!format.IconsOnly)
|
2023-02-22 22:46:36 +08:00
|
|
|
|
cfRule.Type = validType[format.Type]
|
2023-02-08 00:03:45 +08:00
|
|
|
|
return cfRule, nil
|
|
|
|
|
}
|
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// getPaletteColor provides a function to convert the RBG color by given
|
|
|
|
|
// string.
|
2017-03-19 17:14:40 +08:00
|
|
|
|
func getPaletteColor(color string) string {
|
2022-06-12 00:19:12 +08:00
|
|
|
|
return "FF" + strings.ReplaceAll(strings.ToUpper(color), "#", "")
|
2017-03-19 17:14:40 +08:00
|
|
|
|
}
|
2018-07-07 15:59:48 +08:00
|
|
|
|
|
2018-08-06 10:21:24 +08:00
|
|
|
|
// themeReader provides a function to get the pointer to the xl/theme/theme1.xml
|
2018-07-07 15:59:48 +08:00
|
|
|
|
// structure after deserialization.
|
2023-10-20 00:04:31 +08:00
|
|
|
|
func (f *File) themeReader() (*decodeTheme, error) {
|
2022-10-28 00:31:55 +08:00
|
|
|
|
if _, ok := f.Pkg.Load(defaultXMLPathTheme); !ok {
|
2022-11-13 00:40:04 +08:00
|
|
|
|
return nil, nil
|
2022-10-28 00:31:55 +08:00
|
|
|
|
}
|
2023-10-20 00:04:31 +08:00
|
|
|
|
theme := decodeTheme{}
|
2022-10-28 00:31:55 +08:00
|
|
|
|
if err := f.xmlNewDecoder(bytes.NewReader(namespaceStrictToTransitional(f.readXML(defaultXMLPathTheme)))).
|
2019-12-20 00:30:48 +08:00
|
|
|
|
Decode(&theme); err != nil && err != io.EOF {
|
2022-11-13 00:40:04 +08:00
|
|
|
|
return &theme, err
|
2019-12-20 00:30:48 +08:00
|
|
|
|
}
|
2022-11-13 00:40:04 +08:00
|
|
|
|
return &theme, nil
|
2018-07-07 15:59:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ThemeColor applied the color with tint value.
|
|
|
|
|
func ThemeColor(baseColor string, tint float64) string {
|
|
|
|
|
if tint == 0 {
|
|
|
|
|
return "FF" + baseColor
|
|
|
|
|
}
|
2021-11-17 00:25:36 +08:00
|
|
|
|
r, _ := strconv.ParseUint(baseColor[:2], 16, 64)
|
2021-07-20 23:04:50 +08:00
|
|
|
|
g, _ := strconv.ParseUint(baseColor[2:4], 16, 64)
|
|
|
|
|
b, _ := strconv.ParseUint(baseColor[4:6], 16, 64)
|
2020-10-23 00:01:52 +08:00
|
|
|
|
var h, s, l float64
|
2021-07-20 23:04:50 +08:00
|
|
|
|
if r <= math.MaxUint8 && g <= math.MaxUint8 && b <= math.MaxUint8 {
|
2020-10-23 00:01:52 +08:00
|
|
|
|
h, s, l = RGBToHSL(uint8(r), uint8(g), uint8(b))
|
|
|
|
|
}
|
2018-07-07 15:59:48 +08:00
|
|
|
|
if tint < 0 {
|
2022-03-24 00:19:30 +08:00
|
|
|
|
l *= 1 + tint
|
2018-07-07 15:59:48 +08:00
|
|
|
|
} else {
|
|
|
|
|
l = l*(1-tint) + (1 - (1 - tint))
|
|
|
|
|
}
|
|
|
|
|
br, bg, bb := HSLToRGB(h, s, l)
|
|
|
|
|
return fmt.Sprintf("FF%02X%02X%02X", br, bg, bb)
|
|
|
|
|
}
|