diff options
-rw-r--r-- | cell.go | 10 | ||||
-rw-r--r-- | excelize.go | 27 | ||||
-rw-r--r-- | excelize_test.go | 7 | ||||
-rw-r--r-- | rows.go | 2 | ||||
-rw-r--r-- | styles.go | 6 | ||||
-rw-r--r-- | xmlContentTypes.go | 7 | ||||
-rw-r--r-- | xmlDrawing.go | 8 | ||||
-rw-r--r-- | xmlStyles.go | 28 | ||||
-rw-r--r-- | xmlWorksheet.go | 10 |
9 files changed, 64 insertions, 41 deletions
@@ -111,7 +111,7 @@ func (f *File) SetCellFormula(sheet, axis, formula string) { } ok := f.checked[name] if !ok { - xlsx = checkRow(xlsx) + checkRow(&xlsx) f.checked[name] = true } if xlsx.MergeCells != nil { @@ -129,8 +129,8 @@ func (f *File) SetCellFormula(sheet, axis, formula string) { rows := xAxis + 1 cell := yAxis + 1 - xlsx = completeRow(xlsx, rows, cell) - xlsx = completeCol(xlsx, rows, cell) + completeRow(&xlsx, rows, cell) + completeCol(&xlsx, rows, cell) if xlsx.SheetData.Row[xAxis].C[yAxis].F != nil { xlsx.SheetData.Row[xAxis].C[yAxis].F.Content = formula @@ -156,7 +156,7 @@ func (f *File) SetCellHyperLink(sheet, axis, link string) { } ok := f.checked[name] if !ok { - xlsx = checkRow(xlsx) + checkRow(&xlsx) f.checked[name] = true } if xlsx.MergeCells != nil { @@ -226,7 +226,7 @@ func (f *File) MergeCell(sheet, hcell, vcell string) { } ok := f.checked[name] if !ok { - xlsx = checkRow(xlsx) + checkRow(&xlsx) f.checked[name] = true } if xlsx.MergeCells != nil { diff --git a/excelize.go b/excelize.go index 4079783..62456ee 100644 --- a/excelize.go +++ b/excelize.go @@ -96,7 +96,7 @@ func (f *File) SetCellInt(sheet, axis string, value int) { } ok := f.checked[name] if !ok { - xlsx = checkRow(xlsx) + checkRow(&xlsx) f.checked[name] = true } @@ -115,8 +115,8 @@ func (f *File) SetCellInt(sheet, axis string, value int) { rows := xAxis + 1 cell := yAxis + 1 - xlsx = completeRow(xlsx, rows, cell) - xlsx = completeCol(xlsx, rows, cell) + completeRow(&xlsx, rows, cell) + completeCol(&xlsx, rows, cell) xlsx.SheetData.Row[xAxis].C[yAxis].T = "" xlsx.SheetData.Row[xAxis].C[yAxis].V = strconv.Itoa(value) @@ -137,7 +137,7 @@ func (f *File) SetCellStr(sheet, axis, value string) { } ok := f.checked[name] if !ok { - xlsx = checkRow(xlsx) + checkRow(&xlsx) f.checked[name] = true } if xlsx.MergeCells != nil { @@ -158,8 +158,8 @@ func (f *File) SetCellStr(sheet, axis, value string) { rows := xAxis + 1 cell := yAxis + 1 - xlsx = completeRow(xlsx, rows, cell) - xlsx = completeCol(xlsx, rows, cell) + completeRow(&xlsx, rows, cell) + completeCol(&xlsx, rows, cell) xlsx.SheetData.Row[xAxis].C[yAxis].T = "str" xlsx.SheetData.Row[xAxis].C[yAxis].V = value @@ -180,7 +180,7 @@ func (f *File) SetCellDefault(sheet, axis, value string) { } ok := f.checked[name] if !ok { - xlsx = checkRow(xlsx) + checkRow(&xlsx) f.checked[name] = true } if xlsx.MergeCells != nil { @@ -198,8 +198,8 @@ func (f *File) SetCellDefault(sheet, axis, value string) { rows := xAxis + 1 cell := yAxis + 1 - xlsx = completeRow(xlsx, rows, cell) - xlsx = completeCol(xlsx, rows, cell) + completeRow(&xlsx, rows, cell) + completeCol(&xlsx, rows, cell) xlsx.SheetData.Row[xAxis].C[yAxis].T = "" xlsx.SheetData.Row[xAxis].C[yAxis].V = value @@ -209,7 +209,7 @@ func (f *File) SetCellDefault(sheet, axis, value string) { } // Completion column element tags of XML in a sheet. -func completeCol(xlsx xlsxWorksheet, row int, cell int) xlsxWorksheet { +func completeCol(xlsx *xlsxWorksheet, row int, cell int) { if len(xlsx.SheetData.Row) < cell { for i := len(xlsx.SheetData.Row); i < cell; i++ { xlsx.SheetData.Row = append(xlsx.SheetData.Row, xlsxRow{ @@ -231,11 +231,10 @@ func completeCol(xlsx xlsxWorksheet, row int, cell int) xlsxWorksheet { } } } - return xlsx } // Completion row element tags of XML in a sheet. -func completeRow(xlsx xlsxWorksheet, row, cell int) xlsxWorksheet { +func completeRow(xlsx *xlsxWorksheet, row, cell int) { currentRows := len(xlsx.SheetData.Row) if currentRows > 1 { lastRow := xlsx.SheetData.Row[currentRows-1].R @@ -273,7 +272,6 @@ func completeRow(xlsx xlsxWorksheet, row, cell int) xlsxWorksheet { } } xlsx.SheetData = sheetData - return xlsx } // Replace xl/worksheets/sheet%d.xml XML tags to self-closing for compatible @@ -308,7 +306,7 @@ func replaceWorkSheetsRelationshipsNameSpace(workbookMarshal string) string { // // Noteice: this method could be very slow for large spreadsheets (more than // 3000 rows one sheet). -func checkRow(xlsx xlsxWorksheet) xlsxWorksheet { +func checkRow(xlsx *xlsxWorksheet) { buffer := bytes.Buffer{} for k, v := range xlsx.SheetData.Row { lenCol := len(v.C) @@ -337,7 +335,6 @@ func checkRow(xlsx xlsxWorksheet) xlsxWorksheet { } } } - return xlsx } // UpdateLinkedValue fix linked values within a spreadsheet are not updating in diff --git a/excelize_test.go b/excelize_test.go index 494156b..e4892e6 100644 --- a/excelize_test.go +++ b/excelize_test.go @@ -283,12 +283,15 @@ func TestSetBorder(t *testing.T) { t.Log(err) } // Test set border with invalid style index number. - err = xlsx.SetBorder("Sheet1", "J21", "L25", "") + err = xlsx.SetBorder("Sheet1", "J21", "L25", `{"border":[{"type":"left","color":"0000FF","style":-1},{"type":"top","color":"00FF00","style":14},{"type":"bottom","color":"FFFF00","style":5},{"type":"right","color":"FF0000","style":6},{"type":"diagonalDown","color":"A020F0","style":9},{"type":"diagonalUp","color":"A020F0","style":8}]}`) + if err != nil { + t.Log(err) + } if err != nil { t.Log(err) } // Test set border on overlapping area. - err = xlsx.SetBorder("Sheet1", "J21", "L25", `{"border":[{"type":"left","color":"0000FF","style":-1},{"type":"top","color":"00FF00","style":14},{"type":"bottom","color":"FFFF00","style":5},{"type":"right","color":"FF0000","style":6},{"type":"diagonalDown","color":"A020F0","style":9},{"type":"diagonalUp","color":"A020F0","style":8}]}`) + err = xlsx.SetBorder("Sheet1", "J21", "L25", `{"border":[{"type":"left","color":"0000FF","style":2},{"type":"top","color":"00FF00","style":12},{"type":"bottom","color":"FFFF00","style":5},{"type":"right","color":"FF0000","style":6},{"type":"diagonalDown","color":"A020F0","style":9},{"type":"diagonalUp","color":"A020F0","style":8}]}`) if err != nil { t.Log(err) } @@ -112,7 +112,7 @@ func (f *File) SetRowHeight(sheet string, rowIndex int, height float64) { rows := rowIndex + 1 cells := 0 - xlsx = completeRow(xlsx, rows, cells) + completeRow(&xlsx, rows, cells) xlsx.SheetData.Row[rowIndex].Ht = strconv.FormatFloat(height, 'f', -1, 64) xlsx.SheetData.Row[rowIndex].CustomHeight = true @@ -204,12 +204,12 @@ func (f *File) setCellStyle(sheet, hcell, vcell string, styleID int) { } ok := f.checked[name] if !ok { - xlsx = checkRow(xlsx) + checkRow(&xlsx) f.checked[name] = true } - xlsx = completeRow(xlsx, vxAxis+1, vyAxis+1) - xlsx = completeCol(xlsx, vxAxis+1, vyAxis+1) + completeRow(&xlsx, vxAxis+1, vyAxis+1) + completeCol(&xlsx, vxAxis+1, vyAxis+1) for r, row := range xlsx.SheetData.Row { for k, c := range row.C { diff --git a/xmlContentTypes.go b/xmlContentTypes.go index 4e185a0..c44b8d5 100644 --- a/xmlContentTypes.go +++ b/xmlContentTypes.go @@ -2,17 +2,24 @@ package excelize import "encoding/xml" +// xlsxTypes directly maps the types elemen of content types for relationship +// parts, it takes a Multipurpose Internet Mail Extension (MIME) media type as a +// value. type xlsxTypes struct { XMLName xml.Name `xml:"http://schemas.openxmlformats.org/package/2006/content-types Types"` Overrides []xlsxOverride `xml:"Override"` Defaults []xlsxDefault `xml:"Default"` } +// xlsxOverride directly maps the override element in the namespace +// http://schemas.openxmlformats.org/package/2006/content-types type xlsxOverride struct { PartName string `xml:",attr"` ContentType string `xml:",attr"` } +// xlsxDefault directly maps the default element in the namespace +// http://schemas.openxmlformats.org/package/2006/content-types type xlsxDefault struct { Extension string `xml:",attr"` ContentType string `xml:",attr"` diff --git a/xmlDrawing.go b/xmlDrawing.go index 521fe6d..3540a38 100644 --- a/xmlDrawing.go +++ b/xmlDrawing.go @@ -39,10 +39,10 @@ type xlsxPicLocks struct { NoSelect bool `xml:"noSelect,attr,omitempty"` } -// xlsxBlip directly maps the blip element in the namespace http://purl.oclc.or -// g/ooxml/officeDoc ument/relationships - This element specifies the existence -// of an image (binary large image or picture) and contains a reference to the -// image data. +// xlsxBlip directly maps the blip element in the namespace +// http://purl.oclc.org/ooxml/officeDoc ument/relationships - This element +// specifies the existence of an image (binary large image or picture) and +// contains a reference to the image data. type xlsxBlip struct { Embed string `xml:"r:embed,attr"` Cstate string `xml:"cstate,attr,omitempty"` diff --git a/xmlStyles.go b/xmlStyles.go index 4da8ec9..7aa6479 100644 --- a/xmlStyles.go +++ b/xmlStyles.go @@ -47,9 +47,10 @@ type xlsxLine struct { // in the namespace http://schemas.openxmlformats.org/spreadsheetml/2006/main - // currently I have not checked it for completeness - it does as much as I need. type xlsxColor struct { - RGB string `xml:"rgb,attr,omitempty"` - Theme *int `xml:"theme,attr,omitempty"` - Tint float64 `xml:"tint,attr,omitempty"` + RGB string `xml:"rgb,attr,omitempty"` + Indexed *int `xml:"indexed,attr,omitempty"` + Theme *int `xml:"theme,attr,omitempty"` + Tint float64 `xml:"tint,attr,omitempty"` } // xlsxFonts directly maps the fonts element. This element contains all font @@ -77,7 +78,20 @@ type xlsxFills struct { // xlsxFill directly maps the fill element. This element specifies fill // formatting. type xlsxFill struct { - Fill string `xml:",innerxml"` + PatternFill xlsxPatternFill `xml:"patternFill,omitempty"` +} + +// xlsxPatternFill directly maps the patternFill element in the namespace +// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have +// not checked it for completeness - it does as much as I need. This element is +// used to specify cell fill information for pattern and solid color cell fills. +// For solid cell fills (no pattern), fgColor is used. For cell fills with +// patterns specified, then the cell fill color is specified by the bgColor +// element. +type xlsxPatternFill struct { + PatternType string `xml:"patternType,attr,omitempty"` + FgColor xlsxColor `xml:"fgColor,omitempty"` + BgColor xlsxColor `xml:"bgColor,omitempty"` } // xlsxBorders directly maps the borders element. This element contains borders @@ -118,8 +132,8 @@ type xlsxCellStyles struct { // workbook. type xlsxCellStyle struct { XMLName xml.Name `xml:"cellStyle"` - BuiltInID *int `xml:"builtInId,attr,omitempty"` - CustomBuiltIn *bool `xml:"customBuiltIn,attr,omitempty"` + BuiltInID *int `xml:"builtinId,attr,omitempty"` + CustomBuiltIn *bool `xml:"customBuiltin,attr,omitempty"` Hidden *bool `xml:"hidden,attr,omitempty"` ILevel *bool `xml:"iLevel,attr,omitempty"` Name string `xml:"name,attr"` @@ -202,7 +216,7 @@ type xlsxTableStyles struct { // should format and display a table. type xlsxTableStyle struct { Name string `xml:"name,attr,omitempty"` - Pivot int `xml:"pivot,attr,omitempty"` + Pivot int `xml:"pivot,attr"` Count int `xml:"count,attr,omitempty"` Table bool `xml:"table,attr,omitempty"` TableStyleElement string `xml:",innerxml"` diff --git a/xmlWorksheet.go b/xmlWorksheet.go index 831bf3d..5919edb 100644 --- a/xmlWorksheet.go +++ b/xmlWorksheet.go @@ -112,15 +112,17 @@ type xlsxPageMargins struct { } // xlsxSheetFormatPr directly maps the sheetFormatPr element in the namespace -// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have -// not checked it for completeness - it does as much as I need. +// http://schemas.openxmlformats.org/spreadsheetml/2006/main. This element +// specifies the sheet formatting properties. type xlsxSheetFormatPr struct { + BaseColWidth uint8 `xml:"baseColWidth,attr,omitempty"` + CustomHeight float64 `xml:"customHeight,attr,omitempty"` DefaultColWidth float64 `xml:"defaultColWidth,attr,omitempty"` DefaultRowHeight float64 `xml:"defaultRowHeight,attr"` - CustomHeight float64 `xml:"customHeight,attr,omitempty"` - ZeroHeight float64 `xml:"zeroHeight,attr,omitempty"` + ThickTop bool `xml:"thickTop,attr,omitempty"` OutlineLevelCol uint8 `xml:"outlineLevelCol,attr,omitempty"` OutlineLevelRow uint8 `xml:"outlineLevelRow,attr,omitempty"` + ZeroHeight float64 `xml:"zeroHeight,attr,omitempty"` } // xlsxSheetViews directly maps the sheetViews element in the namespace |