This closes #1867, breaking changes: change the data type for the ConditionalFormatOptions structure field Format as a pointer
This commit is contained in:
parent
5dc22e874b
commit
5f8a5b8690
|
@ -999,7 +999,7 @@ func TestAdjustConditionalFormats(t *testing.T) {
|
||||||
{
|
{
|
||||||
Type: "cell",
|
Type: "cell",
|
||||||
Criteria: "greater than",
|
Criteria: "greater than",
|
||||||
Format: formatID,
|
Format: &formatID,
|
||||||
Value: "0",
|
Value: "0",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -1088,7 +1088,7 @@ func TestConditionalFormat(t *testing.T) {
|
||||||
{
|
{
|
||||||
Type: "cell",
|
Type: "cell",
|
||||||
Criteria: "between",
|
Criteria: "between",
|
||||||
Format: format1,
|
Format: &format1,
|
||||||
MinValue: "6",
|
MinValue: "6",
|
||||||
MaxValue: "8",
|
MaxValue: "8",
|
||||||
},
|
},
|
||||||
|
@ -1100,7 +1100,7 @@ func TestConditionalFormat(t *testing.T) {
|
||||||
{
|
{
|
||||||
Type: "cell",
|
Type: "cell",
|
||||||
Criteria: ">",
|
Criteria: ">",
|
||||||
Format: format3,
|
Format: &format3,
|
||||||
Value: "6",
|
Value: "6",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -1111,7 +1111,7 @@ func TestConditionalFormat(t *testing.T) {
|
||||||
{
|
{
|
||||||
Type: "top",
|
Type: "top",
|
||||||
Criteria: "=",
|
Criteria: "=",
|
||||||
Format: format3,
|
Format: &format3,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
))
|
))
|
||||||
|
@ -1121,7 +1121,7 @@ func TestConditionalFormat(t *testing.T) {
|
||||||
{
|
{
|
||||||
Type: "unique",
|
Type: "unique",
|
||||||
Criteria: "=",
|
Criteria: "=",
|
||||||
Format: format2,
|
Format: &format2,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
))
|
))
|
||||||
|
@ -1131,7 +1131,7 @@ func TestConditionalFormat(t *testing.T) {
|
||||||
{
|
{
|
||||||
Type: "duplicate",
|
Type: "duplicate",
|
||||||
Criteria: "=",
|
Criteria: "=",
|
||||||
Format: format2,
|
Format: &format2,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
))
|
))
|
||||||
|
@ -1141,7 +1141,7 @@ func TestConditionalFormat(t *testing.T) {
|
||||||
{
|
{
|
||||||
Type: "top",
|
Type: "top",
|
||||||
Criteria: "=",
|
Criteria: "=",
|
||||||
Format: format1,
|
Format: &format1,
|
||||||
Value: "6",
|
Value: "6",
|
||||||
Percent: true,
|
Percent: true,
|
||||||
},
|
},
|
||||||
|
@ -1153,7 +1153,7 @@ func TestConditionalFormat(t *testing.T) {
|
||||||
{
|
{
|
||||||
Type: "average",
|
Type: "average",
|
||||||
Criteria: "=",
|
Criteria: "=",
|
||||||
Format: format3,
|
Format: &format3,
|
||||||
AboveAverage: true,
|
AboveAverage: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -1164,7 +1164,7 @@ func TestConditionalFormat(t *testing.T) {
|
||||||
{
|
{
|
||||||
Type: "average",
|
Type: "average",
|
||||||
Criteria: "=",
|
Criteria: "=",
|
||||||
Format: format1,
|
Format: &format1,
|
||||||
AboveAverage: false,
|
AboveAverage: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -1187,7 +1187,7 @@ func TestConditionalFormat(t *testing.T) {
|
||||||
{
|
{
|
||||||
Type: "formula",
|
Type: "formula",
|
||||||
Criteria: "L2<3",
|
Criteria: "L2<3",
|
||||||
Format: format1,
|
Format: &format1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
))
|
))
|
||||||
|
@ -1197,7 +1197,7 @@ func TestConditionalFormat(t *testing.T) {
|
||||||
{
|
{
|
||||||
Type: "cell",
|
Type: "cell",
|
||||||
Criteria: ">",
|
Criteria: ">",
|
||||||
Format: format4,
|
Format: &format4,
|
||||||
Value: "0",
|
Value: "0",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -892,7 +892,7 @@ func TestDuplicateRow(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
expected := []ConditionalFormatOptions{
|
expected := []ConditionalFormatOptions{
|
||||||
{Type: "cell", Criteria: "greater than", Format: format, Value: "0"},
|
{Type: "cell", Criteria: "greater than", Format: &format, Value: "0"},
|
||||||
}
|
}
|
||||||
assert.NoError(t, f.SetConditionalFormat("Sheet1", "A1", expected))
|
assert.NoError(t, f.SetConditionalFormat("Sheet1", "A1", expected))
|
||||||
|
|
||||||
|
|
107
styles.go
107
styles.go
|
@ -2445,7 +2445,7 @@ func (f *File) SetCellStyle(sheet, topLeftCell, bottomRightCell string, styleID
|
||||||
// {
|
// {
|
||||||
// Type: "cell",
|
// Type: "cell",
|
||||||
// Criteria: ">",
|
// Criteria: ">",
|
||||||
// Format: format,
|
// Format: &format,
|
||||||
// Value: "6",
|
// Value: "6",
|
||||||
// },
|
// },
|
||||||
// },
|
// },
|
||||||
|
@ -2458,7 +2458,7 @@ func (f *File) SetCellStyle(sheet, topLeftCell, bottomRightCell string, styleID
|
||||||
// {
|
// {
|
||||||
// Type: "cell",
|
// Type: "cell",
|
||||||
// Criteria: ">",
|
// Criteria: ">",
|
||||||
// Format: format,
|
// Format: &format,
|
||||||
// Value: "$C$1",
|
// Value: "$C$1",
|
||||||
// },
|
// },
|
||||||
// },
|
// },
|
||||||
|
@ -2482,7 +2482,7 @@ func (f *File) SetCellStyle(sheet, topLeftCell, bottomRightCell string, styleID
|
||||||
// }
|
// }
|
||||||
// err = f.SetConditionalFormat("Sheet1", "D1:D10",
|
// err = f.SetConditionalFormat("Sheet1", "D1:D10",
|
||||||
// []excelize.ConditionalFormatOptions{
|
// []excelize.ConditionalFormatOptions{
|
||||||
// {Type: "cell", Criteria: ">", Format: format, Value: "6"},
|
// {Type: "cell", Criteria: ">", Format: &format, Value: "6"},
|
||||||
// },
|
// },
|
||||||
// )
|
// )
|
||||||
//
|
//
|
||||||
|
@ -2534,7 +2534,7 @@ func (f *File) SetCellStyle(sheet, topLeftCell, bottomRightCell string, styleID
|
||||||
// {
|
// {
|
||||||
// Type: "cell",
|
// Type: "cell",
|
||||||
// Criteria: "between",
|
// Criteria: "between",
|
||||||
// Format: format,
|
// Format: &format,
|
||||||
// MinValue: 6",
|
// MinValue: 6",
|
||||||
// MaxValue: 8",
|
// MaxValue: 8",
|
||||||
// },
|
// },
|
||||||
|
@ -2554,7 +2554,7 @@ func (f *File) SetCellStyle(sheet, topLeftCell, bottomRightCell string, styleID
|
||||||
// {
|
// {
|
||||||
// Type: "average",
|
// Type: "average",
|
||||||
// Criteria: "=",
|
// Criteria: "=",
|
||||||
// Format: format1,
|
// Format: &format1,
|
||||||
// AboveAverage: true,
|
// AboveAverage: true,
|
||||||
// },
|
// },
|
||||||
// },
|
// },
|
||||||
|
@ -2566,7 +2566,7 @@ func (f *File) SetCellStyle(sheet, topLeftCell, bottomRightCell string, styleID
|
||||||
// {
|
// {
|
||||||
// Type: "average",
|
// Type: "average",
|
||||||
// Criteria: "=",
|
// Criteria: "=",
|
||||||
// Format: format2,
|
// Format: &format2,
|
||||||
// AboveAverage: false,
|
// AboveAverage: false,
|
||||||
// },
|
// },
|
||||||
// },
|
// },
|
||||||
|
@ -2578,7 +2578,7 @@ func (f *File) SetCellStyle(sheet, topLeftCell, bottomRightCell string, styleID
|
||||||
// // Highlight cells rules: Duplicate Values...
|
// // Highlight cells rules: Duplicate Values...
|
||||||
// err := f.SetConditionalFormat("Sheet1", "A1:A10",
|
// err := f.SetConditionalFormat("Sheet1", "A1:A10",
|
||||||
// []excelize.ConditionalFormatOptions{
|
// []excelize.ConditionalFormatOptions{
|
||||||
// {Type: "duplicate", Criteria: "=", Format: format},
|
// {Type: "duplicate", Criteria: "=", Format: &format},
|
||||||
// },
|
// },
|
||||||
// )
|
// )
|
||||||
//
|
//
|
||||||
|
@ -2587,7 +2587,7 @@ func (f *File) SetCellStyle(sheet, topLeftCell, bottomRightCell string, styleID
|
||||||
// // Highlight cells rules: Not Equal To...
|
// // Highlight cells rules: Not Equal To...
|
||||||
// err := f.SetConditionalFormat("Sheet1", "A1:A10",
|
// err := f.SetConditionalFormat("Sheet1", "A1:A10",
|
||||||
// []excelize.ConditionalFormatOptions{
|
// []excelize.ConditionalFormatOptions{
|
||||||
// {Type: "unique", Criteria: "=", Format: format},
|
// {Type: "unique", Criteria: "=", Format: &format},
|
||||||
// },
|
// },
|
||||||
// )
|
// )
|
||||||
//
|
//
|
||||||
|
@ -2600,7 +2600,7 @@ func (f *File) SetCellStyle(sheet, topLeftCell, bottomRightCell string, styleID
|
||||||
// {
|
// {
|
||||||
// Type: "top",
|
// Type: "top",
|
||||||
// Criteria: "=",
|
// Criteria: "=",
|
||||||
// Format: format,
|
// Format: &format,
|
||||||
// Value: "6",
|
// Value: "6",
|
||||||
// },
|
// },
|
||||||
// },
|
// },
|
||||||
|
@ -2613,7 +2613,7 @@ func (f *File) SetCellStyle(sheet, topLeftCell, bottomRightCell string, styleID
|
||||||
// {
|
// {
|
||||||
// Type: "top",
|
// Type: "top",
|
||||||
// Criteria: "=",
|
// Criteria: "=",
|
||||||
// Format: format,
|
// Format: &format,
|
||||||
// Value: "6",
|
// Value: "6",
|
||||||
// Percent: true,
|
// Percent: true,
|
||||||
// },
|
// },
|
||||||
|
@ -2931,10 +2931,7 @@ func (f *File) appendCfRule(ws *xlsxWorksheet, rule *xlsxX14CfRule) error {
|
||||||
// settings for cell value (include between, not between, equal, not equal,
|
// settings for cell value (include between, not between, equal, not equal,
|
||||||
// greater than and less than) by given conditional formatting rule.
|
// greater than and less than) by given conditional formatting rule.
|
||||||
func (f *File) extractCondFmtCellIs(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
func (f *File) extractCondFmtCellIs(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
||||||
format := ConditionalFormatOptions{StopIfTrue: c.StopIfTrue, Type: "cell", Criteria: operatorType[c.Operator]}
|
format := ConditionalFormatOptions{Format: c.DxfID, StopIfTrue: c.StopIfTrue, Type: "cell", Criteria: operatorType[c.Operator]}
|
||||||
if c.DxfID != nil {
|
|
||||||
format.Format = *c.DxfID
|
|
||||||
}
|
|
||||||
if len(c.Formula) == 2 {
|
if len(c.Formula) == 2 {
|
||||||
format.MinValue, format.MaxValue = c.Formula[0], c.Formula[1]
|
format.MinValue, format.MaxValue = c.Formula[0], c.Formula[1]
|
||||||
return format
|
return format
|
||||||
|
@ -2946,21 +2943,13 @@ func (f *File) extractCondFmtCellIs(c *xlsxCfRule, extLst *xlsxExtLst) Condition
|
||||||
// extractCondFmtTimePeriod provides a function to extract conditional format
|
// extractCondFmtTimePeriod provides a function to extract conditional format
|
||||||
// settings for time period by given conditional formatting rule.
|
// settings for time period by given conditional formatting rule.
|
||||||
func (f *File) extractCondFmtTimePeriod(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
func (f *File) extractCondFmtTimePeriod(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
||||||
format := ConditionalFormatOptions{StopIfTrue: c.StopIfTrue, Type: "time_period", Criteria: operatorType[c.Operator]}
|
return ConditionalFormatOptions{Format: c.DxfID, StopIfTrue: c.StopIfTrue, Type: "time_period", Criteria: operatorType[c.Operator]}
|
||||||
if c.DxfID != nil {
|
|
||||||
format.Format = *c.DxfID
|
|
||||||
}
|
|
||||||
return format
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// extractCondFmtText provides a function to extract conditional format
|
// extractCondFmtText provides a function to extract conditional format
|
||||||
// settings for text cell values by given conditional formatting rule.
|
// settings for text cell values by given conditional formatting rule.
|
||||||
func (f *File) extractCondFmtText(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
func (f *File) extractCondFmtText(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
||||||
format := ConditionalFormatOptions{StopIfTrue: c.StopIfTrue, Type: "text", Criteria: operatorType[c.Operator], Value: c.Text}
|
return ConditionalFormatOptions{Format: c.DxfID, StopIfTrue: c.StopIfTrue, Type: "text", Criteria: operatorType[c.Operator], Value: c.Text}
|
||||||
if c.DxfID != nil {
|
|
||||||
format.Format = *c.DxfID
|
|
||||||
}
|
|
||||||
return format
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// extractCondFmtTop10 provides a function to extract conditional format
|
// extractCondFmtTop10 provides a function to extract conditional format
|
||||||
|
@ -2968,15 +2957,13 @@ func (f *File) extractCondFmtText(c *xlsxCfRule, extLst *xlsxExtLst) Conditional
|
||||||
// rule.
|
// rule.
|
||||||
func (f *File) extractCondFmtTop10(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
func (f *File) extractCondFmtTop10(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
||||||
format := ConditionalFormatOptions{
|
format := ConditionalFormatOptions{
|
||||||
|
Format: c.DxfID,
|
||||||
StopIfTrue: c.StopIfTrue,
|
StopIfTrue: c.StopIfTrue,
|
||||||
Type: "top",
|
Type: "top",
|
||||||
Criteria: "=",
|
Criteria: "=",
|
||||||
Percent: c.Percent,
|
Percent: c.Percent,
|
||||||
Value: strconv.Itoa(c.Rank),
|
Value: strconv.Itoa(c.Rank),
|
||||||
}
|
}
|
||||||
if c.DxfID != nil {
|
|
||||||
format.Format = *c.DxfID
|
|
||||||
}
|
|
||||||
if c.Bottom {
|
if c.Bottom {
|
||||||
format.Type = "bottom"
|
format.Type = "bottom"
|
||||||
}
|
}
|
||||||
|
@ -2988,13 +2975,11 @@ func (f *File) extractCondFmtTop10(c *xlsxCfRule, extLst *xlsxExtLst) Conditiona
|
||||||
// rule.
|
// rule.
|
||||||
func (f *File) extractCondFmtAboveAverage(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
func (f *File) extractCondFmtAboveAverage(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
||||||
format := ConditionalFormatOptions{
|
format := ConditionalFormatOptions{
|
||||||
|
Format: c.DxfID,
|
||||||
StopIfTrue: c.StopIfTrue,
|
StopIfTrue: c.StopIfTrue,
|
||||||
Type: "average",
|
Type: "average",
|
||||||
Criteria: "=",
|
Criteria: "=",
|
||||||
}
|
}
|
||||||
if c.DxfID != nil {
|
|
||||||
format.Format = *c.DxfID
|
|
||||||
}
|
|
||||||
if c.AboveAverage != nil {
|
if c.AboveAverage != nil {
|
||||||
format.AboveAverage = *c.AboveAverage
|
format.AboveAverage = *c.AboveAverage
|
||||||
}
|
}
|
||||||
|
@ -3005,7 +2990,8 @@ func (f *File) extractCondFmtAboveAverage(c *xlsxCfRule, extLst *xlsxExtLst) Con
|
||||||
// conditional format settings for duplicate and unique values by given
|
// conditional format settings for duplicate and unique values by given
|
||||||
// conditional formatting rule.
|
// conditional formatting rule.
|
||||||
func (f *File) extractCondFmtDuplicateUniqueValues(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
func (f *File) extractCondFmtDuplicateUniqueValues(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
||||||
format := ConditionalFormatOptions{
|
return ConditionalFormatOptions{
|
||||||
|
Format: c.DxfID,
|
||||||
StopIfTrue: c.StopIfTrue,
|
StopIfTrue: c.StopIfTrue,
|
||||||
Type: map[string]string{
|
Type: map[string]string{
|
||||||
"duplicateValues": "duplicate",
|
"duplicateValues": "duplicate",
|
||||||
|
@ -3013,62 +2999,46 @@ func (f *File) extractCondFmtDuplicateUniqueValues(c *xlsxCfRule, extLst *xlsxEx
|
||||||
}[c.Type],
|
}[c.Type],
|
||||||
Criteria: "=",
|
Criteria: "=",
|
||||||
}
|
}
|
||||||
if c.DxfID != nil {
|
|
||||||
format.Format = *c.DxfID
|
|
||||||
}
|
|
||||||
return format
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// extractCondFmtBlanks provides a function to extract conditional format
|
// extractCondFmtBlanks provides a function to extract conditional format
|
||||||
// settings for blank cells by given conditional formatting rule.
|
// settings for blank cells by given conditional formatting rule.
|
||||||
func (f *File) extractCondFmtBlanks(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
func (f *File) extractCondFmtBlanks(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
||||||
format := ConditionalFormatOptions{
|
return ConditionalFormatOptions{
|
||||||
|
Format: c.DxfID,
|
||||||
StopIfTrue: c.StopIfTrue,
|
StopIfTrue: c.StopIfTrue,
|
||||||
Type: "blanks",
|
Type: "blanks",
|
||||||
}
|
}
|
||||||
if c.DxfID != nil {
|
|
||||||
format.Format = *c.DxfID
|
|
||||||
}
|
|
||||||
return format
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// extractCondFmtNoBlanks provides a function to extract conditional format
|
// extractCondFmtNoBlanks provides a function to extract conditional format
|
||||||
// settings for no blank cells by given conditional formatting rule.
|
// settings for no blank cells by given conditional formatting rule.
|
||||||
func (f *File) extractCondFmtNoBlanks(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
func (f *File) extractCondFmtNoBlanks(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
||||||
format := ConditionalFormatOptions{
|
return ConditionalFormatOptions{
|
||||||
|
Format: c.DxfID,
|
||||||
StopIfTrue: c.StopIfTrue,
|
StopIfTrue: c.StopIfTrue,
|
||||||
Type: "no_blanks",
|
Type: "no_blanks",
|
||||||
}
|
}
|
||||||
if c.DxfID != nil {
|
|
||||||
format.Format = *c.DxfID
|
|
||||||
}
|
|
||||||
return format
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// extractCondFmtErrors provides a function to extract conditional format
|
// extractCondFmtErrors provides a function to extract conditional format
|
||||||
// settings for cells with errors by given conditional formatting rule.
|
// settings for cells with errors by given conditional formatting rule.
|
||||||
func (f *File) extractCondFmtErrors(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
func (f *File) extractCondFmtErrors(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
||||||
format := ConditionalFormatOptions{
|
return ConditionalFormatOptions{
|
||||||
|
Format: c.DxfID,
|
||||||
StopIfTrue: c.StopIfTrue,
|
StopIfTrue: c.StopIfTrue,
|
||||||
Type: "errors",
|
Type: "errors",
|
||||||
}
|
}
|
||||||
if c.DxfID != nil {
|
|
||||||
format.Format = *c.DxfID
|
|
||||||
}
|
|
||||||
return format
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// extractCondFmtNoErrors provides a function to extract conditional format
|
// extractCondFmtNoErrors provides a function to extract conditional format
|
||||||
// settings for cells without errors by given conditional formatting rule.
|
// settings for cells without errors by given conditional formatting rule.
|
||||||
func (f *File) extractCondFmtNoErrors(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
func (f *File) extractCondFmtNoErrors(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
||||||
format := ConditionalFormatOptions{
|
return ConditionalFormatOptions{
|
||||||
|
Format: c.DxfID,
|
||||||
StopIfTrue: c.StopIfTrue,
|
StopIfTrue: c.StopIfTrue,
|
||||||
Type: "no_errors",
|
Type: "no_errors",
|
||||||
}
|
}
|
||||||
if c.DxfID != nil {
|
|
||||||
format.Format = *c.DxfID
|
|
||||||
}
|
|
||||||
return format
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// extractCondFmtColorScale provides a function to extract conditional format
|
// extractCondFmtColorScale provides a function to extract conditional format
|
||||||
|
@ -3165,10 +3135,7 @@ func (f *File) extractCondFmtDataBar(c *xlsxCfRule, extLst *xlsxExtLst) Conditio
|
||||||
// extractCondFmtExp provides a function to extract conditional format settings
|
// extractCondFmtExp provides a function to extract conditional format settings
|
||||||
// for expression by given conditional formatting rule.
|
// for expression by given conditional formatting rule.
|
||||||
func (f *File) extractCondFmtExp(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
func (f *File) extractCondFmtExp(c *xlsxCfRule, extLst *xlsxExtLst) ConditionalFormatOptions {
|
||||||
format := ConditionalFormatOptions{StopIfTrue: c.StopIfTrue, Type: "formula"}
|
format := ConditionalFormatOptions{Format: c.DxfID, StopIfTrue: c.StopIfTrue, Type: "formula"}
|
||||||
if c.DxfID != nil {
|
|
||||||
format.Format = *c.DxfID
|
|
||||||
}
|
|
||||||
if len(c.Formula) > 0 {
|
if len(c.Formula) > 0 {
|
||||||
format.Criteria = c.Formula[0]
|
format.Criteria = c.Formula[0]
|
||||||
}
|
}
|
||||||
|
@ -3234,7 +3201,7 @@ func drawCondFmtCellIs(p int, ct, ref, GUID string, format *ConditionalFormatOpt
|
||||||
StopIfTrue: format.StopIfTrue,
|
StopIfTrue: format.StopIfTrue,
|
||||||
Type: validType[format.Type],
|
Type: validType[format.Type],
|
||||||
Operator: ct,
|
Operator: ct,
|
||||||
DxfID: intPtr(format.Format),
|
DxfID: format.Format,
|
||||||
}
|
}
|
||||||
// "between" and "not between" criteria require 2 values.
|
// "between" and "not between" criteria require 2 values.
|
||||||
if ct == "between" || ct == "notBetween" {
|
if ct == "between" || ct == "notBetween" {
|
||||||
|
@ -3268,7 +3235,7 @@ func drawCondFmtTimePeriod(p int, ct, ref, GUID string, format *ConditionalForma
|
||||||
"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),
|
"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],
|
}[ct],
|
||||||
},
|
},
|
||||||
DxfID: intPtr(format.Format),
|
DxfID: format.Format,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3298,7 +3265,7 @@ func drawCondFmtText(p int, ct, ref, GUID string, format *ConditionalFormatOptio
|
||||||
strings.NewReplacer(`"`, `""`).Replace(format.Value), ref),
|
strings.NewReplacer(`"`, `""`).Replace(format.Value), ref),
|
||||||
}[ct],
|
}[ct],
|
||||||
},
|
},
|
||||||
DxfID: intPtr(format.Format),
|
DxfID: format.Format,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3312,7 +3279,7 @@ func drawCondFmtTop10(p int, ct, ref, GUID string, format *ConditionalFormatOpti
|
||||||
Bottom: format.Type == "bottom",
|
Bottom: format.Type == "bottom",
|
||||||
Type: validType[format.Type],
|
Type: validType[format.Type],
|
||||||
Rank: 10,
|
Rank: 10,
|
||||||
DxfID: intPtr(format.Format),
|
DxfID: format.Format,
|
||||||
Percent: format.Percent,
|
Percent: format.Percent,
|
||||||
}
|
}
|
||||||
if rank, err := strconv.Atoi(format.Value); err == nil {
|
if rank, err := strconv.Atoi(format.Value); err == nil {
|
||||||
|
@ -3330,7 +3297,7 @@ func drawCondFmtAboveAverage(p int, ct, ref, GUID string, format *ConditionalFor
|
||||||
StopIfTrue: format.StopIfTrue,
|
StopIfTrue: format.StopIfTrue,
|
||||||
Type: validType[format.Type],
|
Type: validType[format.Type],
|
||||||
AboveAverage: boolPtr(format.AboveAverage),
|
AboveAverage: boolPtr(format.AboveAverage),
|
||||||
DxfID: intPtr(format.Format),
|
DxfID: format.Format,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3342,7 +3309,7 @@ func drawCondFmtDuplicateUniqueValues(p int, ct, ref, GUID string, format *Condi
|
||||||
Priority: p + 1,
|
Priority: p + 1,
|
||||||
StopIfTrue: format.StopIfTrue,
|
StopIfTrue: format.StopIfTrue,
|
||||||
Type: validType[format.Type],
|
Type: validType[format.Type],
|
||||||
DxfID: intPtr(format.Format),
|
DxfID: format.Format,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3430,7 +3397,7 @@ func drawCondFmtExp(p int, ct, ref, GUID string, format *ConditionalFormatOption
|
||||||
StopIfTrue: format.StopIfTrue,
|
StopIfTrue: format.StopIfTrue,
|
||||||
Type: validType[format.Type],
|
Type: validType[format.Type],
|
||||||
Formula: []string{format.Criteria},
|
Formula: []string{format.Criteria},
|
||||||
DxfID: intPtr(format.Format),
|
DxfID: format.Format,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3442,7 +3409,7 @@ func drawCondFmtErrors(p int, ct, ref, GUID string, format *ConditionalFormatOpt
|
||||||
StopIfTrue: format.StopIfTrue,
|
StopIfTrue: format.StopIfTrue,
|
||||||
Type: validType[format.Type],
|
Type: validType[format.Type],
|
||||||
Formula: []string{fmt.Sprintf("ISERROR(%s)", ref)},
|
Formula: []string{fmt.Sprintf("ISERROR(%s)", ref)},
|
||||||
DxfID: intPtr(format.Format),
|
DxfID: format.Format,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3454,7 +3421,7 @@ func drawCondFmtNoErrors(p int, ct, ref, GUID string, format *ConditionalFormatO
|
||||||
StopIfTrue: format.StopIfTrue,
|
StopIfTrue: format.StopIfTrue,
|
||||||
Type: validType[format.Type],
|
Type: validType[format.Type],
|
||||||
Formula: []string{fmt.Sprintf("NOT(ISERROR(%s))", ref)},
|
Formula: []string{fmt.Sprintf("NOT(ISERROR(%s))", ref)},
|
||||||
DxfID: intPtr(format.Format),
|
DxfID: format.Format,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3466,7 +3433,7 @@ func drawCondFmtBlanks(p int, ct, ref, GUID string, format *ConditionalFormatOpt
|
||||||
StopIfTrue: format.StopIfTrue,
|
StopIfTrue: format.StopIfTrue,
|
||||||
Type: validType[format.Type],
|
Type: validType[format.Type],
|
||||||
Formula: []string{fmt.Sprintf("LEN(TRIM(%s))=0", ref)},
|
Formula: []string{fmt.Sprintf("LEN(TRIM(%s))=0", ref)},
|
||||||
DxfID: intPtr(format.Format),
|
DxfID: format.Format,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3478,7 +3445,7 @@ func drawCondFmtNoBlanks(p int, ct, ref, GUID string, format *ConditionalFormatO
|
||||||
StopIfTrue: format.StopIfTrue,
|
StopIfTrue: format.StopIfTrue,
|
||||||
Type: validType[format.Type],
|
Type: validType[format.Type],
|
||||||
Formula: []string{fmt.Sprintf("LEN(TRIM(%s))>0", ref)},
|
Formula: []string{fmt.Sprintf("LEN(TRIM(%s))>0", ref)},
|
||||||
DxfID: intPtr(format.Format),
|
DxfID: format.Format,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -172,7 +172,7 @@ func TestSetConditionalFormat(t *testing.T) {
|
||||||
// Test creating a conditional format with a solid color data bar style
|
// Test creating a conditional format with a solid color data bar style
|
||||||
f := NewFile()
|
f := NewFile()
|
||||||
condFmts := []ConditionalFormatOptions{
|
condFmts := []ConditionalFormatOptions{
|
||||||
{Type: "data_bar", BarColor: "#A9D08E", BarSolid: true, Format: 0, Criteria: "=", MinType: "min", MaxType: "max"},
|
{Type: "data_bar", BarColor: "#A9D08E", BarSolid: true, Format: intPtr(0), Criteria: "=", MinType: "min", MaxType: "max"},
|
||||||
}
|
}
|
||||||
for _, ref := range []string{"A1:A2", "B1:B2"} {
|
for _, ref := range []string{"A1:A2", "B1:B2"} {
|
||||||
assert.NoError(t, f.SetConditionalFormat("Sheet1", ref, condFmts))
|
assert.NoError(t, f.SetConditionalFormat("Sheet1", ref, condFmts))
|
||||||
|
@ -243,36 +243,36 @@ func TestSetConditionalFormat(t *testing.T) {
|
||||||
|
|
||||||
func TestGetConditionalFormats(t *testing.T) {
|
func TestGetConditionalFormats(t *testing.T) {
|
||||||
for _, format := range [][]ConditionalFormatOptions{
|
for _, format := range [][]ConditionalFormatOptions{
|
||||||
{{Type: "cell", Format: 1, Criteria: "greater than", Value: "6"}},
|
{{Type: "cell", Format: intPtr(1), Criteria: "greater than", Value: "6"}},
|
||||||
{{Type: "cell", Format: 1, Criteria: "between", MinValue: "6", MaxValue: "8"}},
|
{{Type: "cell", Format: intPtr(1), Criteria: "between", MinValue: "6", MaxValue: "8"}},
|
||||||
{{Type: "time_period", Format: 1, Criteria: "yesterday"}},
|
{{Type: "time_period", Format: intPtr(1), Criteria: "yesterday"}},
|
||||||
{{Type: "time_period", Format: 1, Criteria: "today"}},
|
{{Type: "time_period", Format: intPtr(1), Criteria: "today"}},
|
||||||
{{Type: "time_period", Format: 1, Criteria: "tomorrow"}},
|
{{Type: "time_period", Format: intPtr(1), Criteria: "tomorrow"}},
|
||||||
{{Type: "time_period", Format: 1, Criteria: "last 7 days"}},
|
{{Type: "time_period", Format: intPtr(1), Criteria: "last 7 days"}},
|
||||||
{{Type: "time_period", Format: 1, Criteria: "last week"}},
|
{{Type: "time_period", Format: intPtr(1), Criteria: "last week"}},
|
||||||
{{Type: "time_period", Format: 1, Criteria: "this week"}},
|
{{Type: "time_period", Format: intPtr(1), Criteria: "this week"}},
|
||||||
{{Type: "time_period", Format: 1, Criteria: "continue week"}},
|
{{Type: "time_period", Format: intPtr(1), Criteria: "continue week"}},
|
||||||
{{Type: "time_period", Format: 1, Criteria: "last month"}},
|
{{Type: "time_period", Format: intPtr(1), Criteria: "last month"}},
|
||||||
{{Type: "time_period", Format: 1, Criteria: "this month"}},
|
{{Type: "time_period", Format: intPtr(1), Criteria: "this month"}},
|
||||||
{{Type: "time_period", Format: 1, Criteria: "continue month"}},
|
{{Type: "time_period", Format: intPtr(1), Criteria: "continue month"}},
|
||||||
{{Type: "text", Format: 1, Criteria: "containing", Value: "~!@#$%^&*()_+{}|:<>?\"';"}},
|
{{Type: "text", Format: intPtr(1), Criteria: "containing", Value: "~!@#$%^&*()_+{}|:<>?\"';"}},
|
||||||
{{Type: "text", Format: 1, Criteria: "not containing", Value: "text"}},
|
{{Type: "text", Format: intPtr(1), Criteria: "not containing", Value: "text"}},
|
||||||
{{Type: "text", Format: 1, Criteria: "begins with", Value: "prefix"}},
|
{{Type: "text", Format: intPtr(1), Criteria: "begins with", Value: "prefix"}},
|
||||||
{{Type: "text", Format: 1, Criteria: "ends with", Value: "suffix"}},
|
{{Type: "text", Format: intPtr(1), Criteria: "ends with", Value: "suffix"}},
|
||||||
{{Type: "top", Format: 1, Criteria: "=", Value: "6"}},
|
{{Type: "top", Format: intPtr(1), Criteria: "=", Value: "6"}},
|
||||||
{{Type: "bottom", Format: 1, Criteria: "=", Value: "6"}},
|
{{Type: "bottom", Format: intPtr(1), Criteria: "=", Value: "6"}},
|
||||||
{{Type: "average", AboveAverage: true, Format: 1, Criteria: "="}},
|
{{Type: "average", AboveAverage: true, Format: intPtr(1), Criteria: "="}},
|
||||||
{{Type: "duplicate", Format: 1, Criteria: "="}},
|
{{Type: "duplicate", Format: intPtr(1), Criteria: "="}},
|
||||||
{{Type: "unique", Format: 1, Criteria: "="}},
|
{{Type: "unique", Format: intPtr(1), Criteria: "="}},
|
||||||
{{Type: "3_color_scale", Criteria: "=", MinType: "num", MidType: "num", MaxType: "num", MinValue: "-10", MidValue: "50", MaxValue: "10", MinColor: "#FF0000", MidColor: "#00FF00", MaxColor: "#0000FF"}},
|
{{Type: "3_color_scale", Criteria: "=", MinType: "num", MidType: "num", MaxType: "num", MinValue: "-10", MidValue: "50", MaxValue: "10", MinColor: "#FF0000", MidColor: "#00FF00", MaxColor: "#0000FF"}},
|
||||||
{{Type: "2_color_scale", Criteria: "=", MinType: "num", MaxType: "num", MinColor: "#FF0000", MaxColor: "#0000FF"}},
|
{{Type: "2_color_scale", Criteria: "=", MinType: "num", MaxType: "num", MinColor: "#FF0000", MaxColor: "#0000FF"}},
|
||||||
{{Type: "data_bar", Criteria: "=", MinType: "num", MaxType: "num", MinValue: "-10", MaxValue: "10", BarBorderColor: "#0000FF", BarColor: "#638EC6", BarOnly: true, BarSolid: true, StopIfTrue: true}},
|
{{Type: "data_bar", Criteria: "=", MinType: "num", MaxType: "num", MinValue: "-10", MaxValue: "10", BarBorderColor: "#0000FF", BarColor: "#638EC6", BarOnly: true, BarSolid: true, StopIfTrue: true}},
|
||||||
{{Type: "data_bar", Criteria: "=", MinType: "min", MaxType: "max", BarBorderColor: "#0000FF", BarColor: "#638EC6", BarDirection: "rightToLeft", BarOnly: true, BarSolid: true, StopIfTrue: true}},
|
{{Type: "data_bar", Criteria: "=", MinType: "min", MaxType: "max", BarBorderColor: "#0000FF", BarColor: "#638EC6", BarDirection: "rightToLeft", BarOnly: true, BarSolid: true, StopIfTrue: true}},
|
||||||
{{Type: "formula", Format: 1, Criteria: "="}},
|
{{Type: "formula", Format: intPtr(1), Criteria: "="}},
|
||||||
{{Type: "blanks", Format: 1}},
|
{{Type: "blanks", Format: intPtr(1)}},
|
||||||
{{Type: "no_blanks", Format: 1}},
|
{{Type: "no_blanks", Format: intPtr(1)}},
|
||||||
{{Type: "errors", Format: 1}},
|
{{Type: "errors", Format: intPtr(1)}},
|
||||||
{{Type: "no_errors", Format: 1}},
|
{{Type: "no_errors", Format: intPtr(1)}},
|
||||||
{{Type: "icon_set", IconStyle: "3Arrows", ReverseIcons: true, IconsOnly: true}},
|
{{Type: "icon_set", IconStyle: "3Arrows", ReverseIcons: true, IconsOnly: true}},
|
||||||
} {
|
} {
|
||||||
f := NewFile()
|
f := NewFile()
|
||||||
|
@ -309,7 +309,7 @@ func TestUnsetConditionalFormat(t *testing.T) {
|
||||||
assert.NoError(t, f.UnsetConditionalFormat("Sheet1", "A1:A10"))
|
assert.NoError(t, f.UnsetConditionalFormat("Sheet1", "A1:A10"))
|
||||||
format, err := f.NewConditionalStyle(&Style{Font: &Font{Color: "9A0511"}, Fill: Fill{Type: "pattern", Color: []string{"FEC7CE"}, Pattern: 1}})
|
format, err := f.NewConditionalStyle(&Style{Font: &Font{Color: "9A0511"}, Fill: Fill{Type: "pattern", Color: []string{"FEC7CE"}, Pattern: 1}})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.NoError(t, f.SetConditionalFormat("Sheet1", "A1:A10", []ConditionalFormatOptions{{Type: "cell", Criteria: ">", Format: format, Value: "6"}}))
|
assert.NoError(t, f.SetConditionalFormat("Sheet1", "A1:A10", []ConditionalFormatOptions{{Type: "cell", Criteria: ">", Format: &format, Value: "6"}}))
|
||||||
assert.NoError(t, f.UnsetConditionalFormat("Sheet1", "A1:A10"))
|
assert.NoError(t, f.UnsetConditionalFormat("Sheet1", "A1:A10"))
|
||||||
// Test unset conditional format on not exists worksheet
|
// Test unset conditional format on not exists worksheet
|
||||||
assert.EqualError(t, f.UnsetConditionalFormat("SheetN", "A1:A10"), "sheet SheetN does not exist")
|
assert.EqualError(t, f.UnsetConditionalFormat("SheetN", "A1:A10"), "sheet SheetN does not exist")
|
||||||
|
|
|
@ -917,7 +917,7 @@ type ConditionalFormatOptions struct {
|
||||||
Type string
|
Type string
|
||||||
AboveAverage bool
|
AboveAverage bool
|
||||||
Percent bool
|
Percent bool
|
||||||
Format int
|
Format *int
|
||||||
Criteria string
|
Criteria string
|
||||||
Value string
|
Value string
|
||||||
MinType string
|
MinType string
|
||||||
|
|
Loading…
Reference in New Issue