diff --git a/cellmerged.go b/cellmerged.go index 53924637..a78b2445 100644 --- a/cellmerged.go +++ b/cellmerged.go @@ -1,8 +1,18 @@ +// Copyright 2016 - 2019 The excelize Authors. All rights reserved. Use of +// this source code is governed by a BSD-style license that can be found in +// the LICENSE file. +// +// Package excelize providing a set of functions that allow you to write to +// and read from XLSX files. Support reads and writes XLSX file generated by +// Microsoft Excelâ„¢ 2007 and later. Support save file without losing original +// charts of XLSX. This library needs Go version 1.8 or later. + package excelize import "strings" -// GetMergeCells provides a function to get all merged cells from a worksheet currently. +// GetMergeCells provides a function to get all merged cells from a worksheet +// currently. func (f *File) GetMergeCells(sheet string) ([]MergeCell, error) { var mergeCells []MergeCell xlsx, err := f.workSheetReader(sheet) @@ -45,4 +55,4 @@ func (m *MergeCell) GetStartAxis() string { func (m *MergeCell) GetEndAxis() string { axis := strings.Split((*m)[0], ":") return axis[1] -} \ No newline at end of file +} diff --git a/docProps.go b/docProps.go old mode 100755 new mode 100644 diff --git a/docProps_test.go b/docProps_test.go new file mode 100644 index 00000000..1f52beb2 --- /dev/null +++ b/docProps_test.go @@ -0,0 +1,56 @@ +// Copyright 2016 - 2019 The excelize Authors. All rights reserved. Use of +// this source code is governed by a BSD-style license that can be found in +// the LICENSE file. +// +// Package excelize providing a set of functions that allow you to write to +// and read from XLSX files. Support reads and writes XLSX file generated by +// Microsoft Excelâ„¢ 2007 and later. Support save file without losing original +// charts of XLSX. This library needs Go version 1.8 or later. + +package excelize + +import ( + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestSetDocProps(t *testing.T) { + f, err := OpenFile(filepath.Join("test", "Book1.xlsx")) + if !assert.NoError(t, err) { + t.FailNow() + } + assert.NoError(t, f.SetDocProps(&DocProperties{ + Category: "category", + ContentStatus: "Draft", + Created: "2019-06-04T22:00:10Z", + Creator: "Go Excelize", + Description: "This file created by Go Excelize", + Identifier: "xlsx", + Keywords: "Spreadsheet", + LastModifiedBy: "Go Author", + Modified: "2019-06-04T22:00:10Z", + Revision: "0", + Subject: "Test Subject", + Title: "Test Title", + Language: "en-US", + Version: "1.0.0", + })) + assert.NoError(t, f.SaveAs(filepath.Join("test", "TestSetDocProps.xlsx"))) + f.XLSX["docProps/core.xml"] = nil + assert.EqualError(t, f.SetDocProps(&DocProperties{}), "EOF") +} + +func TestGetDocProps(t *testing.T) { + f, err := OpenFile(filepath.Join("test", "Book1.xlsx")) + if !assert.NoError(t, err) { + t.FailNow() + } + props, err := f.GetDocProps() + assert.NoError(t, err) + assert.Equal(t, props.Creator, "Microsoft Office User") + f.XLSX["docProps/core.xml"] = nil + _, err = f.GetDocProps() + assert.EqualError(t, err, "EOF") +} diff --git a/excelize_test.go b/excelize_test.go index 85df09b9..1a3dde6c 100644 --- a/excelize_test.go +++ b/excelize_test.go @@ -192,7 +192,7 @@ func TestBrokenFile(t *testing.T) { t.Run("SaveAsEmptyStruct", func(t *testing.T) { // Test write file with broken file struct with given path. - assert.NoError(t, f.SaveAs(filepath.Join("test", "TestBrokenFile.SaveAsEmptyStruct.xlsx"))) + assert.NoError(t, f.SaveAs(filepath.Join("test", "BrokenFile.SaveAsEmptyStruct.xlsx"))) }) t.Run("OpenBadWorkbook", func(t *testing.T) { diff --git a/xmlChart.go b/xmlChart.go index 163812d5..972ead37 100644 --- a/xmlChart.go +++ b/xmlChart.go @@ -11,66 +11,66 @@ package excelize import "encoding/xml" -// xlsxChartSpace directly maps the c:chartSpace element. The chart namespace in +// xlsxChartSpace directly maps the chartSpace element. The chart namespace in // DrawingML is for representing visualizations of numeric data with column // charts, pie charts, scatter charts, or other types of charts. type xlsxChartSpace struct { - XMLName xml.Name `xml:"c:chartSpace"` + XMLName xml.Name `xml:"http://schemas.openxmlformats.org/drawingml/2006/chart chartSpace"` XMLNSc string `xml:"xmlns:c,attr"` XMLNSa string `xml:"xmlns:a,attr"` XMLNSr string `xml:"xmlns:r,attr"` XMLNSc16r2 string `xml:"xmlns:c16r2,attr"` - Date1904 *attrValBool `xml:"c:date1904"` - Lang *attrValString `xml:"c:lang"` - RoundedCorners *attrValBool `xml:"c:roundedCorners"` - Chart cChart `xml:"c:chart"` - SpPr *cSpPr `xml:"c:spPr"` - TxPr *cTxPr `xml:"c:txPr"` - PrintSettings *cPrintSettings `xml:"c:printSettings"` + Date1904 *attrValBool `xml:"date1904"` + Lang *attrValString `xml:"lang"` + RoundedCorners *attrValBool `xml:"roundedCorners"` + Chart cChart `xml:"chart"` + SpPr *cSpPr `xml:"spPr"` + TxPr *cTxPr `xml:"txPr"` + PrintSettings *cPrintSettings `xml:"printSettings"` } -// cThicknessSpPr directly maps the element that specifies the thickness of the -// walls or floor as a percentage of the largest dimension of the plot volume -// and SpPr element. +// cThicknessSpPr directly maps the element that specifies the thickness of +// the walls or floor as a percentage of the largest dimension of the plot +// volume and SpPr element. type cThicknessSpPr struct { - Thickness *attrValInt `xml:"c:thickness"` - SpPr *cSpPr `xml:"c:spPr"` + Thickness *attrValInt `xml:"thickness"` + SpPr *cSpPr `xml:"spPr"` } -// cChart (Chart) directly maps the c:chart element. This element specifies a +// cChart (Chart) directly maps the chart element. This element specifies a // title. type cChart struct { - Title *cTitle `xml:"c:title"` - AutoTitleDeleted *cAutoTitleDeleted `xml:"c:autoTitleDeleted"` - View3D *cView3D `xml:"c:view3D"` - Floor *cThicknessSpPr `xml:"c:floor"` - SideWall *cThicknessSpPr `xml:"c:sideWall"` - BackWall *cThicknessSpPr `xml:"c:backWall"` - PlotArea *cPlotArea `xml:"c:plotArea"` - Legend *cLegend `xml:"c:legend"` - PlotVisOnly *attrValBool `xml:"c:plotVisOnly"` - DispBlanksAs *attrValString `xml:"c:dispBlanksAs"` - ShowDLblsOverMax *attrValBool `xml:"c:showDLblsOverMax"` + Title *cTitle `xml:"title"` + AutoTitleDeleted *cAutoTitleDeleted `xml:"autoTitleDeleted"` + View3D *cView3D `xml:"view3D"` + Floor *cThicknessSpPr `xml:"floor"` + SideWall *cThicknessSpPr `xml:"sideWall"` + BackWall *cThicknessSpPr `xml:"backWall"` + PlotArea *cPlotArea `xml:"plotArea"` + Legend *cLegend `xml:"legend"` + PlotVisOnly *attrValBool `xml:"plotVisOnly"` + DispBlanksAs *attrValString `xml:"dispBlanksAs"` + ShowDLblsOverMax *attrValBool `xml:"showDLblsOverMax"` } -// cTitle (Title) directly maps the c:title element. This element specifies a +// cTitle (Title) directly maps the title element. This element specifies a // title. type cTitle struct { - Tx cTx `xml:"c:tx,omitempty"` - Layout string `xml:"c:layout,omitempty"` - Overlay attrValBool `xml:"c:overlay,omitempty"` - SpPr cSpPr `xml:"c:spPr,omitempty"` - TxPr cTxPr `xml:"c:txPr,omitempty"` + Tx cTx `xml:"tx,omitempty"` + Layout string `xml:"layout,omitempty"` + Overlay attrValBool `xml:"overlay,omitempty"` + SpPr cSpPr `xml:"spPr,omitempty"` + TxPr cTxPr `xml:"txPr,omitempty"` } -// cTx (Chart Text) directly maps the c:tx element. This element specifies text +// cTx (Chart Text) directly maps the tx element. This element specifies text // to use on a chart, including rich text formatting. type cTx struct { - StrRef *cStrRef `xml:"c:strRef"` - Rich *cRich `xml:"c:rich,omitempty"` + StrRef *cStrRef `xml:"strRef"` + Rich *cRich `xml:"rich,omitempty"` } -// cRich (Rich Text) directly maps the c:rich element. This element contains a +// cRich (Rich Text) directly maps the rich element. This element contains a // string with rich text formatting. type cRich struct { BodyPr aBodyPr `xml:"a:bodyPr,omitempty"` @@ -186,7 +186,7 @@ type aR struct { T string `xml:"a:t,omitempty"` } -// aRPr (Run Properties) directly maps the c:rPr element. This element +// aRPr (Run Properties) directly maps the rPr element. This element // specifies a set of run properties which shall be applied to the contents of // the parent run after all style formatting has been applied to the text. These // properties are defined as direct formatting, since they are directly applied @@ -217,7 +217,7 @@ type aRPr struct { Cs *aCs `xml:"a:cs"` } -// cSpPr (Shape Properties) directly maps the c:spPr element. This element +// cSpPr (Shape Properties) directly maps the spPr element. This element // specifies the visual shape properties that can be applied to a shape. These // properties include the shape fill, outline, geometry, effects, and 3D // orientation. @@ -259,7 +259,7 @@ type aLn struct { SolidFill *aSolidFill `xml:"a:solidFill"` } -// cTxPr (Text Properties) directly maps the c:txPr element. This element +// cTxPr (Text Properties) directly maps the txPr element. This element // specifies text formatting. The lstStyle element is not supported. type cTxPr struct { BodyPr aBodyPr `xml:"a:bodyPr,omitempty"` @@ -282,207 +282,207 @@ type aEndParaRPr struct { } // cAutoTitleDeleted (Auto Title Is Deleted) directly maps the -// c:autoTitleDeleted element. This element specifies the title shall not be +// autoTitleDeleted element. This element specifies the title shall not be // shown for this chart. type cAutoTitleDeleted struct { Val bool `xml:"val,attr"` } -// cView3D (View In 3D) directly maps the c:view3D element. This element +// cView3D (View In 3D) directly maps the view3D element. This element // specifies the 3-D view of the chart. type cView3D struct { - RotX *attrValInt `xml:"c:rotX"` - RotY *attrValInt `xml:"c:rotY"` - DepthPercent *attrValInt `xml:"c:depthPercent"` - RAngAx *attrValInt `xml:"c:rAngAx"` + RotX *attrValInt `xml:"rotX"` + RotY *attrValInt `xml:"rotY"` + DepthPercent *attrValInt `xml:"depthPercent"` + RAngAx *attrValInt `xml:"rAngAx"` } -// cPlotArea directly maps the c:plotArea element. This element specifies the +// cPlotArea directly maps the plotArea element. This element specifies the // plot area of the chart. type cPlotArea struct { - Layout *string `xml:"c:layout"` - AreaChart *cCharts `xml:"c:areaChart"` - Area3DChart *cCharts `xml:"c:area3DChart"` - BarChart *cCharts `xml:"c:barChart"` - Bar3DChart *cCharts `xml:"c:bar3DChart"` - DoughnutChart *cCharts `xml:"c:doughnutChart"` - LineChart *cCharts `xml:"c:lineChart"` - PieChart *cCharts `xml:"c:pieChart"` - Pie3DChart *cCharts `xml:"c:pie3DChart"` - RadarChart *cCharts `xml:"c:radarChart"` - ScatterChart *cCharts `xml:"c:scatterChart"` - CatAx []*cAxs `xml:"c:catAx"` - ValAx []*cAxs `xml:"c:valAx"` - SpPr *cSpPr `xml:"c:spPr"` + Layout *string `xml:"layout"` + AreaChart *cCharts `xml:"areaChart"` + Area3DChart *cCharts `xml:"area3DChart"` + BarChart *cCharts `xml:"barChart"` + Bar3DChart *cCharts `xml:"bar3DChart"` + DoughnutChart *cCharts `xml:"doughnutChart"` + LineChart *cCharts `xml:"lineChart"` + PieChart *cCharts `xml:"pieChart"` + Pie3DChart *cCharts `xml:"pie3DChart"` + RadarChart *cCharts `xml:"radarChart"` + ScatterChart *cCharts `xml:"scatterChart"` + CatAx []*cAxs `xml:"catAx"` + ValAx []*cAxs `xml:"valAx"` + SpPr *cSpPr `xml:"spPr"` } // cCharts specifies the common element of the chart. type cCharts struct { - BarDir *attrValString `xml:"c:barDir"` - Grouping *attrValString `xml:"c:grouping"` - RadarStyle *attrValString `xml:"c:radarStyle"` - ScatterStyle *attrValString `xml:"c:scatterStyle"` - VaryColors *attrValBool `xml:"c:varyColors"` - Ser *[]cSer `xml:"c:ser"` - DLbls *cDLbls `xml:"c:dLbls"` - HoleSize *attrValInt `xml:"c:holeSize"` - Smooth *attrValBool `xml:"c:smooth"` - Overlap *attrValInt `xml:"c:overlap"` - AxID []*attrValInt `xml:"c:axId"` + BarDir *attrValString `xml:"barDir"` + Grouping *attrValString `xml:"grouping"` + RadarStyle *attrValString `xml:"radarStyle"` + ScatterStyle *attrValString `xml:"scatterStyle"` + VaryColors *attrValBool `xml:"varyColors"` + Ser *[]cSer `xml:"ser"` + DLbls *cDLbls `xml:"dLbls"` + HoleSize *attrValInt `xml:"holeSize"` + Smooth *attrValBool `xml:"smooth"` + Overlap *attrValInt `xml:"overlap"` + AxID []*attrValInt `xml:"axId"` } -// cAxs directly maps the c:catAx and c:valAx element. +// cAxs directly maps the catAx and valAx element. type cAxs struct { - AxID *attrValInt `xml:"c:axId"` - Scaling *cScaling `xml:"c:scaling"` - Delete *attrValBool `xml:"c:delete"` - AxPos *attrValString `xml:"c:axPos"` - NumFmt *cNumFmt `xml:"c:numFmt"` - MajorTickMark *attrValString `xml:"c:majorTickMark"` - MinorTickMark *attrValString `xml:"c:minorTickMark"` - TickLblPos *attrValString `xml:"c:tickLblPos"` - SpPr *cSpPr `xml:"c:spPr"` - TxPr *cTxPr `xml:"c:txPr"` - CrossAx *attrValInt `xml:"c:crossAx"` - Crosses *attrValString `xml:"c:crosses"` - CrossBetween *attrValString `xml:"c:crossBetween"` - Auto *attrValBool `xml:"c:auto"` - LblAlgn *attrValString `xml:"c:lblAlgn"` - LblOffset *attrValInt `xml:"c:lblOffset"` - NoMultiLvlLbl *attrValBool `xml:"c:noMultiLvlLbl"` + AxID *attrValInt `xml:"axId"` + Scaling *cScaling `xml:"scaling"` + Delete *attrValBool `xml:"delete"` + AxPos *attrValString `xml:"axPos"` + NumFmt *cNumFmt `xml:"numFmt"` + MajorTickMark *attrValString `xml:"majorTickMark"` + MinorTickMark *attrValString `xml:"minorTickMark"` + TickLblPos *attrValString `xml:"tickLblPos"` + SpPr *cSpPr `xml:"spPr"` + TxPr *cTxPr `xml:"txPr"` + CrossAx *attrValInt `xml:"crossAx"` + Crosses *attrValString `xml:"crosses"` + CrossBetween *attrValString `xml:"crossBetween"` + Auto *attrValBool `xml:"auto"` + LblAlgn *attrValString `xml:"lblAlgn"` + LblOffset *attrValInt `xml:"lblOffset"` + NoMultiLvlLbl *attrValBool `xml:"noMultiLvlLbl"` } -// cScaling directly maps the c:scaling element. This element contains +// cScaling directly maps the scaling element. This element contains // additional axis settings. type cScaling struct { - Orientation *attrValString `xml:"c:orientation"` - Max *attrValFloat `xml:"c:max"` - Min *attrValFloat `xml:"c:min"` + Orientation *attrValString `xml:"orientation"` + Max *attrValFloat `xml:"max"` + Min *attrValFloat `xml:"min"` } -// cNumFmt (Numbering Format) directly maps the c:numFmt element. This element +// cNumFmt (Numbering Format) directly maps the numFmt element. This element // specifies number formatting for the parent element. type cNumFmt struct { FormatCode string `xml:"formatCode,attr"` SourceLinked bool `xml:"sourceLinked,attr"` } -// cSer directly maps the c:ser element. This element specifies a series on a +// cSer directly maps the ser element. This element specifies a series on a // chart. type cSer struct { - IDx *attrValInt `xml:"c:idx"` - Order *attrValInt `xml:"c:order"` - Tx *cTx `xml:"c:tx"` - SpPr *cSpPr `xml:"c:spPr"` - DPt []*cDPt `xml:"c:dPt"` - DLbls *cDLbls `xml:"c:dLbls"` - Marker *cMarker `xml:"c:marker"` - InvertIfNegative *attrValBool `xml:"c:invertIfNegative"` - Cat *cCat `xml:"c:cat"` - Val *cVal `xml:"c:val"` - XVal *cCat `xml:"c:xVal"` - YVal *cVal `xml:"c:yVal"` - Smooth *attrValBool `xml:"c:smooth"` + IDx *attrValInt `xml:"idx"` + Order *attrValInt `xml:"order"` + Tx *cTx `xml:"tx"` + SpPr *cSpPr `xml:"spPr"` + DPt []*cDPt `xml:"dPt"` + DLbls *cDLbls `xml:"dLbls"` + Marker *cMarker `xml:"marker"` + InvertIfNegative *attrValBool `xml:"invertIfNegative"` + Cat *cCat `xml:"cat"` + Val *cVal `xml:"val"` + XVal *cCat `xml:"xVal"` + YVal *cVal `xml:"yVal"` + Smooth *attrValBool `xml:"smooth"` } -// cMarker (Marker) directly maps the c:marker element. This element specifies a +// cMarker (Marker) directly maps the marker element. This element specifies a // data marker. type cMarker struct { - Symbol *attrValString `xml:"c:symbol"` - Size *attrValInt `xml:"c:size"` - SpPr *cSpPr `xml:"c:spPr"` + Symbol *attrValString `xml:"symbol"` + Size *attrValInt `xml:"size"` + SpPr *cSpPr `xml:"spPr"` } -// cDPt (Data Point) directly maps the c:dPt element. This element specifies a +// cDPt (Data Point) directly maps the dPt element. This element specifies a // single data point. type cDPt struct { - IDx *attrValInt `xml:"c:idx"` - Bubble3D *attrValBool `xml:"c:bubble3D"` - SpPr *cSpPr `xml:"c:spPr"` + IDx *attrValInt `xml:"idx"` + Bubble3D *attrValBool `xml:"bubble3D"` + SpPr *cSpPr `xml:"spPr"` } -// cCat (Category Axis Data) directly maps the c:cat element. This element +// cCat (Category Axis Data) directly maps the cat element. This element // specifies the data used for the category axis. type cCat struct { - StrRef *cStrRef `xml:"c:strRef"` + StrRef *cStrRef `xml:"strRef"` } -// cStrRef (String Reference) directly maps the c:strRef element. This element +// cStrRef (String Reference) directly maps the strRef element. This element // specifies a reference to data for a single data label or title with a cache // of the last values used. type cStrRef struct { - F string `xml:"c:f"` - StrCache *cStrCache `xml:"c:strCache"` + F string `xml:"f"` + StrCache *cStrCache `xml:"strCache"` } -// cStrCache (String Cache) directly maps the c:strCache element. This element +// cStrCache (String Cache) directly maps the strCache element. This element // specifies the last string data used for a chart. type cStrCache struct { - Pt []*cPt `xml:"c:pt"` - PtCount *attrValInt `xml:"c:ptCount"` + Pt []*cPt `xml:"pt"` + PtCount *attrValInt `xml:"ptCount"` } -// cPt directly maps the c:pt element. This element specifies data for a +// cPt directly maps the pt element. This element specifies data for a // particular data point. type cPt struct { IDx int `xml:"idx,attr"` - V *string `xml:"c:v"` + V *string `xml:"v"` } -// cVal directly maps the c:val element. This element specifies the data values +// cVal directly maps the val element. This element specifies the data values // which shall be used to define the location of data markers on a chart. type cVal struct { - NumRef *cNumRef `xml:"c:numRef"` + NumRef *cNumRef `xml:"numRef"` } -// cNumRef directly maps the c:numRef element. This element specifies a +// cNumRef directly maps the numRef element. This element specifies a // reference to numeric data with a cache of the last values used. type cNumRef struct { - F string `xml:"c:f"` - NumCache *cNumCache `xml:"c:numCache"` + F string `xml:"f"` + NumCache *cNumCache `xml:"numCache"` } -// cNumCache directly maps the c:numCache element. This element specifies the +// cNumCache directly maps the numCache element. This element specifies the // last data shown on the chart for a series. type cNumCache struct { - FormatCode string `xml:"c:formatCode"` - Pt []*cPt `xml:"c:pt"` - PtCount *attrValInt `xml:"c:ptCount"` + FormatCode string `xml:"formatCode"` + Pt []*cPt `xml:"pt"` + PtCount *attrValInt `xml:"ptCount"` } -// cDLbls (Data Lables) directly maps the c:dLbls element. This element serves +// cDLbls (Data Lables) directly maps the dLbls element. This element serves // as a root element that specifies the settings for the data labels for an // entire series or the entire chart. It contains child elements that specify // the specific formatting and positioning settings. type cDLbls struct { - ShowLegendKey *attrValBool `xml:"c:showLegendKey"` - ShowVal *attrValBool `xml:"c:showVal"` - ShowCatName *attrValBool `xml:"c:showCatName"` - ShowSerName *attrValBool `xml:"c:showSerName"` - ShowPercent *attrValBool `xml:"c:showPercent"` - ShowBubbleSize *attrValBool `xml:"c:showBubbleSize"` - ShowLeaderLines *attrValBool `xml:"c:showLeaderLines"` + ShowLegendKey *attrValBool `xml:"showLegendKey"` + ShowVal *attrValBool `xml:"showVal"` + ShowCatName *attrValBool `xml:"showCatName"` + ShowSerName *attrValBool `xml:"showSerName"` + ShowPercent *attrValBool `xml:"showPercent"` + ShowBubbleSize *attrValBool `xml:"showBubbleSize"` + ShowLeaderLines *attrValBool `xml:"showLeaderLines"` } -// cLegend (Legend) directly maps the c:legend element. This element specifies +// cLegend (Legend) directly maps the legend element. This element specifies // the legend. type cLegend struct { - Layout *string `xml:"c:layout"` - LegendPos *attrValString `xml:"c:legendPos"` - Overlay *attrValBool `xml:"c:overlay"` - SpPr *cSpPr `xml:"c:spPr"` - TxPr *cTxPr `xml:"c:txPr"` + Layout *string `xml:"layout"` + LegendPos *attrValString `xml:"legendPos"` + Overlay *attrValBool `xml:"overlay"` + SpPr *cSpPr `xml:"spPr"` + TxPr *cTxPr `xml:"txPr"` } -// cPrintSettings directly maps the c:printSettings element. This element +// cPrintSettings directly maps the printSettings element. This element // specifies the print settings for the chart. type cPrintSettings struct { - HeaderFooter *string `xml:"c:headerFooter"` - PageMargins *cPageMargins `xml:"c:pageMargins"` - PageSetup *string `xml:"c:pageSetup"` + HeaderFooter *string `xml:"headerFooter"` + PageMargins *cPageMargins `xml:"pageMargins"` + PageSetup *string `xml:"pageSetup"` } -// cPageMargins directly maps the c:pageMargins element. This element specifies +// cPageMargins directly maps the pageMargins element. This element specifies // the page margins for a chart. type cPageMargins struct { B float64 `xml:"b,attr"` diff --git a/xmlCore.go b/xmlCore.go old mode 100755 new mode 100644 diff --git a/xmlDrawing.go b/xmlDrawing.go old mode 100755 new mode 100644 diff --git a/xmlWorksheet.go b/xmlWorksheet.go index f2eb47ab..4d19cde5 100644 --- a/xmlWorksheet.go +++ b/xmlWorksheet.go @@ -24,6 +24,7 @@ type xlsxWorksheet struct { SheetData xlsxSheetData `xml:"sheetData"` SheetProtection *xlsxSheetProtection `xml:"sheetProtection"` AutoFilter *xlsxAutoFilter `xml:"autoFilter"` + CustomSheetViews *xlsxCustomSheetViews `xml:"customSheetViews"` MergeCells *xlsxMergeCells `xml:"mergeCells"` PhoneticPr *xlsxPhoneticPr `xml:"phoneticPr"` ConditionalFormatting []*xlsxConditionalFormatting `xml:"conditionalFormatting"` @@ -33,6 +34,8 @@ type xlsxWorksheet struct { PageMargins *xlsxPageMargins `xml:"pageMargins"` PageSetUp *xlsxPageSetUp `xml:"pageSetup"` HeaderFooter *xlsxHeaderFooter `xml:"headerFooter"` + RowBreaks *xlsxBreaks `xml:"rowBreaks"` + ColBreaks *xlsxBreaks `xml:"colBreaks"` Drawing *xlsxDrawing `xml:"drawing"` LegacyDrawing *xlsxLegacyDrawing `xml:"legacyDrawing"` Picture *xlsxPicture `xml:"picture"` @@ -299,6 +302,63 @@ type xlsxRow struct { C []xlsxC `xml:"c"` } +// xlsxCustomSheetViews directly maps the customSheetViews element. This is a +// collection of custom sheet views. +type xlsxCustomSheetViews struct { + CustomSheetView []*xlsxCustomSheetView `xml:"customSheetView"` +} + +// xlsxBrk directly maps the row or column break to use when paginating a +// worksheet. +type xlsxBrk struct { + ID int `xml:"id,attr,omitempty"` + Min int `xml:"min,attr,omitempty"` + Max int `xml:"max,attr,omitempty"` + Man bool `xml:"man,attr,omitempty"` + Pt bool `xml:"pt,attr,omitempty"` +} + +// xlsxBreaks directly maps a collection of the row or column breaks. +type xlsxBreaks struct { + Brk *xlsxBrk `xml:"brk"` + Count int `xml:"count,attr,omitempty"` + ManualBreakCount int `xml:"manualBreakCount,attr,omitempty"` +} + +// xlsxCustomSheetView directly maps the customSheetView element. +type xlsxCustomSheetView struct { + Pane *xlsxPane `xml:"pane"` + Selection *xlsxSelection `xml:"selection"` + RowBreaks *xlsxBreaks `xml:"rowBreaks"` + ColBreaks *xlsxBreaks `xml:"colBreaks"` + PageMargins *xlsxPageMargins `xml:"pageMargins"` + PrintOptions *xlsxPrintOptions `xml:"printOptions"` + PageSetup *xlsxPageSetUp `xml:"pageSetup"` + HeaderFooter *xlsxHeaderFooter `xml:"headerFooter"` + AutoFilter *xlsxAutoFilter `xml:"autoFilter"` + ExtLst *xlsxExt `xml:"extLst"` + GUID string `xml:"guid,attr"` + Scale int `xml:"scale,attr,omitempty"` + ColorID int `xml:"colorId,attr,omitempty"` + ShowPageBreaks bool `xml:"showPageBreaks,attr,omitempty"` + ShowFormulas bool `xml:"showFormulas,attr,omitempty"` + ShowGridLines bool `xml:"showGridLines,attr,omitempty"` + ShowRowCol bool `xml:"showRowCol,attr,omitempty"` + OutlineSymbols bool `xml:"outlineSymbols,attr,omitempty"` + ZeroValues bool `xml:"zeroValues,attr,omitempty"` + FitToPage bool `xml:"fitToPage,attr,omitempty"` + PrintArea bool `xml:"printArea,attr,omitempty"` + Filter bool `xml:"filter,attr,omitempty"` + ShowAutoFilter bool `xml:"showAutoFilter,attr,omitempty"` + HiddenRows bool `xml:"hiddenRows,attr,omitempty"` + HiddenColumns bool `xml:"hiddenColumns,attr,omitempty"` + State string `xml:"state,attr,omitempty"` + FilterUnique bool `xml:"filterUnique,attr,omitempty"` + View string `xml:"view,attr,omitempty"` + ShowRuler bool `xml:"showRuler,attr,omitempty"` + TopLeftCell string `xml:"topLeftCell,attr,omitempty"` +} + // xlsxMergeCell directly maps the mergeCell element. A single merged cell. type xlsxMergeCell struct { Ref string `xml:"ref,attr,omitempty"` @@ -389,26 +449,26 @@ type xlsxF struct { // enforce when the sheet is protected. type xlsxSheetProtection struct { AlgorithmName string `xml:"algorithmName,attr,omitempty"` - AutoFilter bool `xml:"autoFilter,attr,omitempty"` - DeleteColumns bool `xml:"deleteColumns,attr,omitempty"` - DeleteRows bool `xml:"deleteRows,attr,omitempty"` + Password string `xml:"password,attr,omitempty"` + HashValue string `xml:"hashValue,attr,omitempty"` + SaltValue string `xml:"saltValue,attr,omitempty"` + SpinCount int `xml:"spinCount,attr,omitempty"` + Sheet bool `xml:"sheet,attr,omitempty"` + Objects bool `xml:"objects,attr,omitempty"` + Scenarios bool `xml:"scenarios,attr,omitempty"` FormatCells bool `xml:"formatCells,attr,omitempty"` FormatColumns bool `xml:"formatColumns,attr,omitempty"` FormatRows bool `xml:"formatRows,attr,omitempty"` - HashValue string `xml:"hashValue,attr,omitempty"` InsertColumns bool `xml:"insertColumns,attr,omitempty"` - InsertHyperlinks bool `xml:"insertHyperlinks,attr,omitempty"` InsertRows bool `xml:"insertRows,attr,omitempty"` - Objects bool `xml:"objects,attr,omitempty"` - Password string `xml:"password,attr,omitempty"` - PivotTables bool `xml:"pivotTables,attr,omitempty"` - SaltValue string `xml:"saltValue,attr,omitempty"` - Scenarios bool `xml:"scenarios,attr,omitempty"` + InsertHyperlinks bool `xml:"insertHyperlinks,attr,omitempty"` + DeleteColumns bool `xml:"deleteColumns,attr,omitempty"` + DeleteRows bool `xml:"deleteRows,attr,omitempty"` SelectLockedCells bool `xml:"selectLockedCells,attr,omitempty"` - SelectUnlockedCells bool `xml:"selectUnlockedCells,attr,omitempty"` - Sheet bool `xml:"sheet,attr,omitempty"` Sort bool `xml:"sort,attr,omitempty"` - SpinCount int `xml:"spinCount,attr,omitempty"` + AutoFilter bool `xml:"autoFilter,attr,omitempty"` + PivotTables bool `xml:"pivotTables,attr,omitempty"` + SelectUnlockedCells bool `xml:"selectUnlockedCells,attr,omitempty"` } // xlsxPhoneticPr (Phonetic Properties) represents a collection of phonetic