// Copyright 2016 - 2022 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 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 // data. This library needs Go version 1.15 or later. package excelize import ( "encoding/xml" "sync" ) // xlsxWorksheet directly maps the worksheet element in the namespace // http://schemas.openxmlformats.org/spreadsheetml/2006/main. type xlsxWorksheet struct { sync.Mutex XMLName xml.Name `xml:"http://schemas.openxmlformats.org/spreadsheetml/2006/main worksheet"` SheetPr *xlsxSheetPr `xml:"sheetPr"` Dimension *xlsxDimension `xml:"dimension"` SheetViews *xlsxSheetViews `xml:"sheetViews"` SheetFormatPr *xlsxSheetFormatPr `xml:"sheetFormatPr"` Cols *xlsxCols `xml:"cols"` SheetData xlsxSheetData `xml:"sheetData"` SheetCalcPr *xlsxInnerXML `xml:"sheetCalcPr"` SheetProtection *xlsxSheetProtection `xml:"sheetProtection"` ProtectedRanges *xlsxInnerXML `xml:"protectedRanges"` Scenarios *xlsxInnerXML `xml:"scenarios"` AutoFilter *xlsxAutoFilter `xml:"autoFilter"` SortState *xlsxSortState `xml:"sortState"` DataConsolidate *xlsxInnerXML `xml:"dataConsolidate"` CustomSheetViews *xlsxCustomSheetViews `xml:"customSheetViews"` MergeCells *xlsxMergeCells `xml:"mergeCells"` PhoneticPr *xlsxPhoneticPr `xml:"phoneticPr"` ConditionalFormatting []*xlsxConditionalFormatting `xml:"conditionalFormatting"` DataValidations *xlsxDataValidations `xml:"dataValidations"` Hyperlinks *xlsxHyperlinks `xml:"hyperlinks"` PrintOptions *xlsxPrintOptions `xml:"printOptions"` PageMargins *xlsxPageMargins `xml:"pageMargins"` PageSetUp *xlsxPageSetUp `xml:"pageSetup"` HeaderFooter *xlsxHeaderFooter `xml:"headerFooter"` RowBreaks *xlsxBreaks `xml:"rowBreaks"` ColBreaks *xlsxBreaks `xml:"colBreaks"` CustomProperties *xlsxInnerXML `xml:"customProperties"` CellWatches *xlsxInnerXML `xml:"cellWatches"` IgnoredErrors *xlsxInnerXML `xml:"ignoredErrors"` SmartTags *xlsxInnerXML `xml:"smartTags"` Drawing *xlsxDrawing `xml:"drawing"` LegacyDrawing *xlsxLegacyDrawing `xml:"legacyDrawing"` LegacyDrawingHF *xlsxLegacyDrawingHF `xml:"legacyDrawingHF"` DrawingHF *xlsxDrawingHF `xml:"drawingHF"` Picture *xlsxPicture `xml:"picture"` OleObjects *xlsxInnerXML `xml:"oleObjects"` Controls *xlsxInnerXML `xml:"controls"` WebPublishItems *xlsxInnerXML `xml:"webPublishItems"` AlternateContent *xlsxAlternateContent `xml:"mc:AlternateContent"` TableParts *xlsxTableParts `xml:"tableParts"` ExtLst *xlsxExtLst `xml:"extLst"` DecodeAlternateContent *xlsxInnerXML `xml:"http://schemas.openxmlformats.org/markup-compatibility/2006 AlternateContent"` } // xlsxDrawing change r:id to rid in the namespace. type xlsxDrawing struct { XMLName xml.Name `xml:"drawing"` RID string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"` } // xlsxHeaderFooter directly maps the headerFooter element in the namespace // http://schemas.openxmlformats.org/spreadsheetml/2006/main - When printed or // viewed in page layout view (§18.18.69), each page of a worksheet can have a // page header, a page footer, or both. The headers and footers on odd-numbered // pages can differ from those on even-numbered pages, and the headers and // footers on the first page can differ from those on odd- and even-numbered // pages. In the latter case, the first page is not considered an odd page. type xlsxHeaderFooter struct { XMLName xml.Name `xml:"headerFooter"` DifferentOddEven bool `xml:"differentOddEven,attr,omitempty"` DifferentFirst bool `xml:"differentFirst,attr,omitempty"` ScaleWithDoc bool `xml:"scaleWithDoc,attr,omitempty"` AlignWithMargins bool `xml:"alignWithMargins,attr,omitempty"` OddHeader string `xml:"oddHeader,omitempty"` OddFooter string `xml:"oddFooter,omitempty"` EvenHeader string `xml:"evenHeader,omitempty"` EvenFooter string `xml:"evenFooter,omitempty"` FirstHeader string `xml:"firstHeader,omitempty"` FirstFooter string `xml:"firstFooter,omitempty"` } // xlsxDrawingHF (Drawing Reference in Header Footer) specifies the usage of // drawing objects to be rendered in the headers and footers of the sheet. It // specifies an explicit relationship to the part containing the DrawingML // shapes used in the headers and footers. It also indicates where in the // headers and footers each shape belongs. One drawing object can appear in // each of the left section, center section and right section of a header and // a footer. type xlsxDrawingHF struct { Content string `xml:",innerxml"` } // xlsxPageSetUp directly maps the pageSetup element in the namespace // http://schemas.openxmlformats.org/spreadsheetml/2006/main - Page setup // settings for the worksheet. type xlsxPageSetUp struct { XMLName xml.Name `xml:"pageSetup"` BlackAndWhite bool `xml:"blackAndWhite,attr,omitempty"` CellComments string `xml:"cellComments,attr,omitempty"` Copies int `xml:"copies,attr,omitempty"` Draft bool `xml:"draft,attr,omitempty"` Errors string `xml:"errors,attr,omitempty"` FirstPageNumber string `xml:"firstPageNumber,attr,omitempty"` FitToHeight *int `xml:"fitToHeight,attr"` FitToWidth *int `xml:"fitToWidth,attr"` HorizontalDPI string `xml:"horizontalDpi,attr,omitempty"` RID string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"` Orientation string `xml:"orientation,attr,omitempty"` PageOrder string `xml:"pageOrder,attr,omitempty"` PaperHeight string `xml:"paperHeight,attr,omitempty"` PaperSize *int `xml:"paperSize,attr"` PaperWidth string `xml:"paperWidth,attr,omitempty"` Scale int `xml:"scale,attr,omitempty"` UseFirstPageNumber bool `xml:"useFirstPageNumber,attr,omitempty"` UsePrinterDefaults bool `xml:"usePrinterDefaults,attr,omitempty"` VerticalDPI string `xml:"verticalDpi,attr,omitempty"` } // xlsxPrintOptions directly maps the printOptions element in the namespace // http://schemas.openxmlformats.org/spreadsheetml/2006/main - Print options for // the sheet. Printer-specific settings are stored separately in the Printer // Settings part. type xlsxPrintOptions struct { XMLName xml.Name `xml:"printOptions"` GridLines bool `xml:"gridLines,attr,omitempty"` GridLinesSet bool `xml:"gridLinesSet,attr,omitempty"` Headings bool `xml:"headings,attr,omitempty"` HorizontalCentered bool `xml:"horizontalCentered,attr,omitempty"` VerticalCentered bool `xml:"verticalCentered,attr,omitempty"` } // xlsxPageMargins directly maps the pageMargins element in the namespace // http://schemas.openxmlformats.org/spreadsheetml/2006/main - Page margins for // a sheet or a custom sheet view. type xlsxPageMargins struct { XMLName xml.Name `xml:"pageMargins"` Left float64 `xml:"left,attr"` Right float64 `xml:"right,attr"` Top float64 `xml:"top,attr"` Bottom float64 `xml:"bottom,attr"` Header float64 `xml:"header,attr"` Footer float64 `xml:"footer,attr"` } // xlsxSheetFormatPr directly maps the sheetFormatPr element in the namespace // http://schemas.openxmlformats.org/spreadsheetml/2006/main. This element // specifies the sheet formatting properties. type xlsxSheetFormatPr struct { XMLName xml.Name `xml:"sheetFormatPr"` BaseColWidth uint8 `xml:"baseColWidth,attr,omitempty"` DefaultColWidth float64 `xml:"defaultColWidth,attr,omitempty"` DefaultRowHeight float64 `xml:"defaultRowHeight,attr"` CustomHeight bool `xml:"customHeight,attr,omitempty"` ZeroHeight bool `xml:"zeroHeight,attr,omitempty"` ThickTop bool `xml:"thickTop,attr,omitempty"` ThickBottom bool `xml:"thickBottom,attr,omitempty"` OutlineLevelRow uint8 `xml:"outlineLevelRow,attr,omitempty"` OutlineLevelCol uint8 `xml:"outlineLevelCol,attr,omitempty"` } // xlsxSheetViews represents worksheet views collection. type xlsxSheetViews struct { XMLName xml.Name `xml:"sheetViews"` SheetView []xlsxSheetView `xml:"sheetView"` } // xlsxSheetView represents a single sheet view definition. When more than one // sheet view is defined in the file, it means that when opening the workbook, // each sheet view corresponds to a separate window within the spreadsheet // application, where each window is showing the particular sheet containing // the same workbookViewId value, the last sheetView definition is loaded, and // the others are discarded. When multiple windows are viewing the same sheet, // multiple sheetView elements (with corresponding workbookView entries) are // saved. type xlsxSheetView struct { WindowProtection bool `xml:"windowProtection,attr,omitempty"` ShowFormulas bool `xml:"showFormulas,attr,omitempty"` ShowGridLines *bool `xml:"showGridLines,attr"` ShowRowColHeaders *bool `xml:"showRowColHeaders,attr"` ShowZeros *bool `xml:"showZeros,attr,omitempty"` RightToLeft bool `xml:"rightToLeft,attr,omitempty"` TabSelected bool `xml:"tabSelected,attr,omitempty"` ShowRuler *bool `xml:"showRuler,attr,omitempty"` ShowWhiteSpace *bool `xml:"showWhiteSpace,attr"` ShowOutlineSymbols bool `xml:"showOutlineSymbols,attr,omitempty"` DefaultGridColor *bool `xml:"defaultGridColor,attr"` View string `xml:"view,attr,omitempty"` TopLeftCell string `xml:"topLeftCell,attr,omitempty"` ColorID int `xml:"colorId,attr,omitempty"` ZoomScale float64 `xml:"zoomScale,attr,omitempty"` ZoomScaleNormal float64 `xml:"zoomScaleNormal,attr,omitempty"` ZoomScalePageLayoutView float64 `xml:"zoomScalePageLayoutView,attr,omitempty"` ZoomScaleSheetLayoutView float64 `xml:"zoomScaleSheetLayoutView,attr,omitempty"` WorkbookViewID int `xml:"workbookViewId,attr"` Pane *xlsxPane `xml:"pane,omitempty"` Selection []*xlsxSelection `xml:"selection"` } // xlsxSelection directly maps the selection element in the namespace // http://schemas.openxmlformats.org/spreadsheetml/2006/main - Worksheet view // selection. type xlsxSelection struct { ActiveCell string `xml:"activeCell,attr,omitempty"` ActiveCellID *int `xml:"activeCellId,attr"` Pane string `xml:"pane,attr,omitempty"` SQRef string `xml:"sqref,attr,omitempty"` } // xlsxSelection directly maps the selection element. Worksheet view pane. type xlsxPane struct { ActivePane string `xml:"activePane,attr,omitempty"` State string `xml:"state,attr,omitempty"` // Either "split" or "frozen" TopLeftCell string `xml:"topLeftCell,attr,omitempty"` XSplit float64 `xml:"xSplit,attr,omitempty"` YSplit float64 `xml:"ySplit,attr,omitempty"` } // xlsxSheetPr directly maps the sheetPr element in the namespace // http://schemas.openxmlformats.org/spreadsheetml/2006/main - Sheet-level // properties. type xlsxSheetPr struct { XMLName xml.Name `xml:"sheetPr"` SyncHorizontal bool `xml:"syncHorizontal,attr,omitempty"` SyncVertical bool `xml:"syncVertical,attr,omitempty"` SyncRef string `xml:"syncRef,attr,omitempty"` TransitionEvaluation bool `xml:"transitionEvaluation,attr,omitempty"` TransitionEntry bool `xml:"transitionEntry,attr,omitempty"` Published *bool `xml:"published,attr"` CodeName string `xml:"codeName,attr,omitempty"` FilterMode bool `xml:"filterMode,attr,omitempty"` EnableFormatConditionsCalculation *bool `xml:"enableFormatConditionsCalculation,attr"` TabColor *xlsxTabColor `xml:"tabColor"` OutlinePr *xlsxOutlinePr `xml:"outlinePr"` PageSetUpPr *xlsxPageSetUpPr `xml:"pageSetUpPr"` } // xlsxOutlinePr maps to the outlinePr element. SummaryBelow allows you to // adjust the direction of grouper controls. type xlsxOutlinePr struct { ApplyStyles *bool `xml:"applyStyles,attr"` SummaryBelow *bool `xml:"summaryBelow,attr"` SummaryRight *bool `xml:"summaryRight,attr"` ShowOutlineSymbols *bool `xml:"showOutlineSymbols,attr"` } // xlsxPageSetUpPr expresses page setup properties of the worksheet. type xlsxPageSetUpPr struct { AutoPageBreaks bool `xml:"autoPageBreaks,attr,omitempty"` FitToPage bool `xml:"fitToPage,attr,omitempty"` } // xlsxTabColor represents background color of the sheet tab. type xlsxTabColor struct { Auto bool `xml:"auto,attr,omitempty"` Indexed int `xml:"indexed,attr,omitempty"` RGB string `xml:"rgb,attr,omitempty"` Theme int `xml:"theme,attr,omitempty"` Tint float64 `xml:"tint,attr,omitempty"` } // xlsxCols defines column width and column formatting for one or more columns // of the worksheet. type xlsxCols struct { XMLName xml.Name `xml:"cols"` Col []xlsxCol `xml:"col"` } // xlsxCol directly maps the col (Column Width & Formatting). Defines column // width and column formatting for one or more columns of the worksheet. type xlsxCol struct { BestFit bool `xml:"bestFit,attr,omitempty"` Collapsed bool `xml:"collapsed,attr,omitempty"` CustomWidth bool `xml:"customWidth,attr,omitempty"` Hidden bool `xml:"hidden,attr,omitempty"` Max int `xml:"max,attr"` Min int `xml:"min,attr"` OutlineLevel uint8 `xml:"outlineLevel,attr,omitempty"` Phonetic bool `xml:"phonetic,attr,omitempty"` Style int `xml:"style,attr,omitempty"` Width float64 `xml:"width,attr,omitempty"` } // xlsxDimension directly maps the dimension element in the namespace // http://schemas.openxmlformats.org/spreadsheetml/2006/main - This element // specifies the used range of the worksheet. It specifies the row and column // bounds of used cells in the worksheet. This is optional and is not // required. Used cells include cells with formulas, text content, and cell // formatting. When an entire column is formatted, only the first cell in that // column is considered used. type xlsxDimension struct { XMLName xml.Name `xml:"dimension"` Ref string `xml:"ref,attr"` } // xlsxSheetData collection represents the cell table itself. This collection // expresses information about each cell, grouped together by rows in the // worksheet. type xlsxSheetData struct { XMLName xml.Name `xml:"sheetData"` Row []xlsxRow `xml:"row"` } // xlsxRow directly maps the row element. The element expresses information // about an entire row of a worksheet, and contains all cell definitions for a // particular row in the worksheet. type xlsxRow struct { C []xlsxC `xml:"c"` R int `xml:"r,attr,omitempty"` Spans string `xml:"spans,attr,omitempty"` S int `xml:"s,attr,omitempty"` CustomFormat bool `xml:"customFormat,attr,omitempty"` Ht float64 `xml:"ht,attr,omitempty"` Hidden bool `xml:"hidden,attr,omitempty"` CustomHeight bool `xml:"customHeight,attr,omitempty"` OutlineLevel uint8 `xml:"outlineLevel,attr,omitempty"` Collapsed bool `xml:"collapsed,attr,omitempty"` ThickTop bool `xml:"thickTop,attr,omitempty"` ThickBot bool `xml:"thickBot,attr,omitempty"` Ph bool `xml:"ph,attr,omitempty"` } // xlsxSortState directly maps the sortState element. This collection // preserves the AutoFilter sort state. type xlsxSortState struct { ColumnSort bool `xml:"columnSort,attr,omitempty"` CaseSensitive bool `xml:"caseSensitive,attr,omitempty"` SortMethod string `xml:"sortMethod,attr,omitempty"` Ref string `xml:"ref,attr"` Content string `xml:",innerxml"` } // xlsxCustomSheetViews directly maps the customSheetViews element. This is a // collection of custom sheet views. type xlsxCustomSheetViews struct { XMLName xml.Name `xml:"customSheetViews"` 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 *xlsxExtLst `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"` rect []int } // xlsxMergeCells directly maps the mergeCells element. This collection // expresses all the merged cells in the sheet. type xlsxMergeCells struct { XMLName xml.Name `xml:"mergeCells"` Count int `xml:"count,attr,omitempty"` Cells []*xlsxMergeCell `xml:"mergeCell,omitempty"` } // xlsxDataValidations expresses all data validation information for cells in a // sheet which have data validation features applied. type xlsxDataValidations struct { XMLName xml.Name `xml:"dataValidations"` Count int `xml:"count,attr,omitempty"` DisablePrompts bool `xml:"disablePrompts,attr,omitempty"` XWindow int `xml:"xWindow,attr,omitempty"` YWindow int `xml:"yWindow,attr,omitempty"` DataValidation []*DataValidation `xml:"dataValidation"` } // DataValidation directly maps the a single item of data validation defined // on a range of the worksheet. type DataValidation struct { AllowBlank bool `xml:"allowBlank,attr"` Error *string `xml:"error,attr"` ErrorStyle *string `xml:"errorStyle,attr"` ErrorTitle *string `xml:"errorTitle,attr"` Operator string `xml:"operator,attr,omitempty"` Prompt *string `xml:"prompt,attr"` PromptTitle *string `xml:"promptTitle,attr"` ShowDropDown bool `xml:"showDropDown,attr,omitempty"` ShowErrorMessage bool `xml:"showErrorMessage,attr,omitempty"` ShowInputMessage bool `xml:"showInputMessage,attr,omitempty"` Sqref string `xml:"sqref,attr"` Type string `xml:"type,attr,omitempty"` Formula1 string `xml:",innerxml"` Formula2 string `xml:",innerxml"` } // xlsxC collection represents a cell in the worksheet. Information about the // cell's location (reference), value, data type, formatting, and formula is // expressed here. // // This simple type is restricted to the values listed in the following table: // // Enumeration Value | Description // ---------------------------+--------------------------------- // b (Boolean) | Cell containing a boolean. // d (Date) | Cell contains a date in the ISO 8601 format. // e (Error) | Cell containing an error. // inlineStr (Inline String) | Cell containing an (inline) rich string, i.e., // | one not in the shared string table. If this // | cell type is used, then the cell value is in // | the is element rather than the v element in // | the cell (c element). // n (Number) | Cell containing a number. // s (Shared String) | Cell containing a shared string. // str (String) | Cell containing a formula string. type xlsxC struct { XMLName xml.Name `xml:"c"` XMLSpace xml.Attr `xml:"space,attr,omitempty"` R string `xml:"r,attr,omitempty"` // Cell ID, e.g. A1 S int `xml:"s,attr,omitempty"` // Style reference T string `xml:"t,attr,omitempty"` // Type Cm *uint `xml:"cm,attr"` Vm *uint `xml:"vm,attr"` Ph *bool `xml:"ph,attr"` F *xlsxF `xml:"f"` // Formula V string `xml:"v,omitempty"` // Value IS *xlsxSI `xml:"is"` } // xlsxF represents a formula for the cell. The formula expression is // contained in the character node of this element. type xlsxF struct { Content string `xml:",chardata"` T string `xml:"t,attr,omitempty"` // Formula type Aca bool `xml:"aca,attr,omitempty"` Ref string `xml:"ref,attr,omitempty"` // Shared formula ref Dt2D bool `xml:"dt2D,attr,omitempty"` Dtr bool `xml:"dtr,attr,omitempty"` Del1 bool `xml:"del1,attr,omitempty"` Del2 bool `xml:"del2,attr,omitempty"` R1 string `xml:"r1,attr,omitempty"` R2 string `xml:"r2,attr,omitempty"` Ca bool `xml:"ca,attr,omitempty"` Si *int `xml:"si,attr"` // Shared formula index Bx bool `xml:"bx,attr,omitempty"` } // xlsxSheetProtection collection expresses the sheet protection options to // enforce when the sheet is protected. type xlsxSheetProtection struct { XMLName xml.Name `xml:"sheetProtection"` AlgorithmName string `xml:"algorithmName,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"` Objects bool `xml:"objects,attr"` Scenarios bool `xml:"scenarios,attr"` FormatCells bool `xml:"formatCells,attr"` FormatColumns bool `xml:"formatColumns,attr"` FormatRows bool `xml:"formatRows,attr"` InsertColumns bool `xml:"insertColumns,attr"` InsertRows bool `xml:"insertRows,attr"` InsertHyperlinks bool `xml:"insertHyperlinks,attr"` DeleteColumns bool `xml:"deleteColumns,attr"` DeleteRows bool `xml:"deleteRows,attr"` SelectLockedCells bool `xml:"selectLockedCells,attr"` Sort bool `xml:"sort,attr"` AutoFilter bool `xml:"autoFilter,attr"` PivotTables bool `xml:"pivotTables,attr"` SelectUnlockedCells bool `xml:"selectUnlockedCells,attr"` } // xlsxPhoneticPr (Phonetic Properties) represents a collection of phonetic // properties that affect the display of phonetic text for this String Item // (si). Phonetic text is used to give hints as to the pronunciation of an East // Asian language, and the hints are displayed as text within the spreadsheet // cells across the top portion of the cell. Since the phonetic hints are text, // every phonetic hint is expressed as a phonetic run (rPh), and these // properties specify how to display that phonetic run. type xlsxPhoneticPr struct { XMLName xml.Name `xml:"phoneticPr"` Alignment string `xml:"alignment,attr,omitempty"` FontID *int `xml:"fontId,attr"` Type string `xml:"type,attr,omitempty"` } // A Conditional Format is a format, such as cell shading or font color, that a // spreadsheet application can automatically apply to cells if a specified // condition is true. This collection expresses conditional formatting rules // applied to a particular cell or range. type xlsxConditionalFormatting struct { XMLName xml.Name `xml:"conditionalFormatting"` Pivot bool `xml:"pivot,attr,omitempty"` SQRef string `xml:"sqref,attr,omitempty"` CfRule []*xlsxCfRule `xml:"cfRule"` } // xlsxCfRule (Conditional Formatting Rule) represents a description of a // conditional formatting rule. type xlsxCfRule struct { Type string `xml:"type,attr,omitempty"` DxfID *int `xml:"dxfId,attr"` Priority int `xml:"priority,attr,omitempty"` StopIfTrue bool `xml:"stopIfTrue,attr,omitempty"` AboveAverage *bool `xml:"aboveAverage,attr"` Percent bool `xml:"percent,attr,omitempty"` Bottom bool `xml:"bottom,attr,omitempty"` Operator string `xml:"operator,attr,omitempty"` Text string `xml:"text,attr,omitempty"` TimePeriod string `xml:"timePeriod,attr,omitempty"` Rank int `xml:"rank,attr,omitempty"` StdDev int `xml:"stdDev,attr,omitempty"` EqualAverage bool `xml:"equalAverage,attr,omitempty"` Formula []string `xml:"formula,omitempty"` ColorScale *xlsxColorScale `xml:"colorScale"` DataBar *xlsxDataBar `xml:"dataBar"` IconSet *xlsxIconSet `xml:"iconSet"` ExtLst *xlsxExtLst `xml:"extLst"` } // xlsxColorScale (Color Scale) describes a gradated color scale in this // conditional formatting rule. type xlsxColorScale struct { Cfvo []*xlsxCfvo `xml:"cfvo"` Color []*xlsxColor `xml:"color"` } // dataBar (Data Bar) describes a data bar conditional formatting rule. type xlsxDataBar struct { MaxLength int `xml:"maxLength,attr,omitempty"` MinLength int `xml:"minLength,attr,omitempty"` ShowValue bool `xml:"showValue,attr,omitempty"` Cfvo []*xlsxCfvo `xml:"cfvo"` Color []*xlsxColor `xml:"color"` } // xlsxIconSet (Icon Set) describes an icon set conditional formatting rule. type xlsxIconSet struct { Cfvo []*xlsxCfvo `xml:"cfvo"` IconSet string `xml:"iconSet,attr,omitempty"` ShowValue bool `xml:"showValue,attr,omitempty"` Percent bool `xml:"percent,attr,omitempty"` Reverse bool `xml:"reverse,attr,omitempty"` } // cfvo (Conditional Format Value Object) describes the values of the // interpolation points in a gradient scale. type xlsxCfvo struct { Gte bool `xml:"gte,attr,omitempty"` Type string `xml:"type,attr,omitempty"` Val string `xml:"val,attr,omitempty"` ExtLst *xlsxExtLst `xml:"extLst"` } // xlsxHyperlinks directly maps the hyperlinks element in the namespace // http://schemas.openxmlformats.org/spreadsheetml/2006/main - A hyperlink can // be stored in a package as a relationship. Hyperlinks shall be identified by // containing a target which specifies the destination of the given hyperlink. type xlsxHyperlinks struct { XMLName xml.Name `xml:"hyperlinks"` Hyperlink []xlsxHyperlink `xml:"hyperlink"` } // xlsxHyperlink directly maps the hyperlink element in the namespace // http://schemas.openxmlformats.org/spreadsheetml/2006/main type xlsxHyperlink struct { Ref string `xml:"ref,attr"` Location string `xml:"location,attr,omitempty"` Display string `xml:"display,attr,omitempty"` Tooltip string `xml:"tooltip,attr,omitempty"` RID string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"` } // xlsxTableParts directly maps the tableParts element in the namespace // http://schemas.openxmlformats.org/spreadsheetml/2006/main - The table element // has several attributes applied to identify the table and the data range it // covers. The table id attribute needs to be unique across all table parts, the // same goes for the name and displayName. The displayName has the further // restriction that it must be unique across all defined names in the workbook. // Later on we will see that you can define names for many elements, such as // cells or formulas. The name value is used for the object model in Microsoft // Office Excel. The displayName is used for references in formulas. The ref // attribute is used to identify the cell range that the table covers. This // includes not only the table data, but also the table header containing column // names. // To add columns to your table you add new tableColumn elements to the // tableColumns container. Similar to the shared string table the collection // keeps a count attribute identifying the number of columns. Besides the table // definition in the table part there is also the need to identify which tables // are displayed in the worksheet. The worksheet part has a separate element // tableParts to store this information. Each table part is referenced through // the relationship ID and again a count of the number of table parts is // maintained. The following markup sample is taken from the documents // accompanying this book. The sheet data element has been removed to reduce the // size of the sample. To reference the table, just add the tableParts element, // of course after having created and stored the table part. For example: // // // ... // // // // type xlsxTableParts struct { XMLName xml.Name `xml:"tableParts"` Count int `xml:"count,attr,omitempty"` TableParts []*xlsxTablePart `xml:"tablePart"` } // xlsxTablePart directly maps the tablePart element in the namespace // http://schemas.openxmlformats.org/spreadsheetml/2006/main type xlsxTablePart struct { RID string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"` } // xlsxPicture directly maps the picture element in the namespace // http://schemas.openxmlformats.org/spreadsheetml/2006/main - Background sheet // image. For example: // // type xlsxPicture struct { XMLName xml.Name `xml:"picture"` RID string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"` } // xlsxLegacyDrawing directly maps the legacyDrawing element in the namespace // http://schemas.openxmlformats.org/spreadsheetml/2006/main - A comment is a // rich text note that is attached to, and associated with, a cell, separate // from other cell content. Comment content is stored separate from the cell, // and is displayed in a drawing object (like a text box) that is separate from, // but associated with, a cell. Comments are used as reminders, such as noting // how a complex formula works, or to provide feedback to other users. Comments // can also be used to explain assumptions made in a formula or to call out // something special about the cell. type xlsxLegacyDrawing struct { XMLName xml.Name `xml:"legacyDrawing"` RID string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"` } // xlsxLegacyDrawingHF specifies the explicit relationship to the part // containing the VML defining pictures rendered in the header / footer of the // sheet. type xlsxLegacyDrawingHF struct { XMLName xml.Name `xml:"legacyDrawingHF"` RID string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"` } // xlsxAlternateContent is a container for a sequence of multiple // representations of a given piece of content. The program reading the file // should only process one of these, and the one chosen should be based on // which conditions match. type xlsxAlternateContent struct { XMLNSMC string `xml:"xmlns:mc,attr,omitempty"` Content string `xml:",innerxml"` } // xlsxInnerXML holds parts of XML content currently not unmarshal. type xlsxInnerXML struct { Content string `xml:",innerxml"` } // xlsxWorksheetExt directly maps the ext element in the worksheet. type xlsxWorksheetExt struct { XMLName xml.Name `xml:"ext"` URI string `xml:"uri,attr"` Content string `xml:",innerxml"` } // decodeWorksheetExt directly maps the ext element. type decodeWorksheetExt struct { XMLName xml.Name `xml:"extLst"` Ext []*xlsxWorksheetExt `xml:"ext"` } // decodeX14SparklineGroups directly maps the sparklineGroups element. type decodeX14SparklineGroups struct { XMLName xml.Name `xml:"sparklineGroups"` XMLNSXM string `xml:"xmlns:xm,attr"` Content string `xml:",innerxml"` } // xlsxX14SparklineGroups directly maps the sparklineGroups element. type xlsxX14SparklineGroups struct { XMLName xml.Name `xml:"x14:sparklineGroups"` XMLNSXM string `xml:"xmlns:xm,attr"` SparklineGroups []*xlsxX14SparklineGroup `xml:"x14:sparklineGroup"` Content string `xml:",innerxml"` } // xlsxX14SparklineGroup directly maps the sparklineGroup element. type xlsxX14SparklineGroup struct { XMLName xml.Name `xml:"x14:sparklineGroup"` ManualMax int `xml:"manualMax,attr,omitempty"` ManualMin int `xml:"manualMin,attr,omitempty"` LineWeight float64 `xml:"lineWeight,attr,omitempty"` Type string `xml:"type,attr,omitempty"` DateAxis bool `xml:"dateAxis,attr,omitempty"` DisplayEmptyCellsAs string `xml:"displayEmptyCellsAs,attr,omitempty"` Markers bool `xml:"markers,attr,omitempty"` High bool `xml:"high,attr,omitempty"` Low bool `xml:"low,attr,omitempty"` First bool `xml:"first,attr,omitempty"` Last bool `xml:"last,attr,omitempty"` Negative bool `xml:"negative,attr,omitempty"` DisplayXAxis bool `xml:"displayXAxis,attr,omitempty"` DisplayHidden bool `xml:"displayHidden,attr,omitempty"` MinAxisType string `xml:"minAxisType,attr,omitempty"` MaxAxisType string `xml:"maxAxisType,attr,omitempty"` RightToLeft bool `xml:"rightToLeft,attr,omitempty"` ColorSeries *xlsxTabColor `xml:"x14:colorSeries"` ColorNegative *xlsxTabColor `xml:"x14:colorNegative"` ColorAxis *xlsxColor `xml:"x14:colorAxis"` ColorMarkers *xlsxTabColor `xml:"x14:colorMarkers"` ColorFirst *xlsxTabColor `xml:"x14:colorFirst"` ColorLast *xlsxTabColor `xml:"x14:colorLast"` ColorHigh *xlsxTabColor `xml:"x14:colorHigh"` ColorLow *xlsxTabColor `xml:"x14:colorLow"` Sparklines xlsxX14Sparklines `xml:"x14:sparklines"` } // xlsxX14Sparklines directly maps the sparklines element. type xlsxX14Sparklines struct { Sparkline []*xlsxX14Sparkline `xml:"x14:sparkline"` } // xlsxX14Sparkline directly maps the sparkline element. type xlsxX14Sparkline struct { F string `xml:"xm:f"` Sqref string `xml:"xm:sqref"` } // SparklineOptions directly maps the settings of the sparkline. type SparklineOptions struct { Location []string `json:"location"` Range []string `json:"range"` Max int `json:"max"` CustMax int `json:"cust_max"` Min int `json:"min"` CustMin int `json:"cust_min"` Type string `json:"hype"` Weight float64 `json:"weight"` DateAxis bool `json:"date_axis"` Markers bool `json:"markers"` High bool `json:"high"` Low bool `json:"low"` First bool `json:"first"` Last bool `json:"last"` Negative bool `json:"negative"` Axis bool `json:"axis"` Hidden bool `json:"hidden"` Reverse bool `json:"reverse"` Style int `json:"style"` SeriesColor string `json:"series_color"` NegativeColor string `json:"negative_color"` MarkersColor string `json:"markers_color"` FirstColor string `json:"first_color"` LastColor string `json:"last_color"` HightColor string `json:"hight_color"` LowColor string `json:"low_color"` EmptyCells string `json:"empty_cells"` } // panesOptions directly maps the settings of the panes. type panesOptions struct { Freeze bool `json:"freeze"` Split bool `json:"split"` XSplit int `json:"x_split"` YSplit int `json:"y_split"` TopLeftCell string `json:"top_left_cell"` ActivePane string `json:"active_pane"` Panes []struct { SQRef string `json:"sqref"` ActiveCell string `json:"active_cell"` Pane string `json:"pane"` } `json:"panes"` } // conditionalOptions directly maps the conditional format settings of the cells. type conditionalOptions struct { Type string `json:"type"` AboveAverage bool `json:"above_average,omitempty"` Percent bool `json:"percent,omitempty"` Format int `json:"format,omitempty"` Criteria string `json:"criteria,omitempty"` Value string `json:"value,omitempty"` Minimum string `json:"minimum,omitempty"` Maximum string `json:"maximum,omitempty"` MinType string `json:"min_type,omitempty"` MidType string `json:"mid_type,omitempty"` MaxType string `json:"max_type,omitempty"` MinValue string `json:"min_value,omitempty"` MidValue string `json:"mid_value,omitempty"` MaxValue string `json:"max_value,omitempty"` MinColor string `json:"min_color,omitempty"` MidColor string `json:"mid_color,omitempty"` MaxColor string `json:"max_color,omitempty"` MinLength string `json:"min_length,omitempty"` MaxLength string `json:"max_length,omitempty"` MultiRange string `json:"multi_range,omitempty"` BarColor string `json:"bar_color,omitempty"` } // SheetProtectionOptions directly maps the settings of worksheet protection. type SheetProtectionOptions struct { AlgorithmName string `json:"algorithm_name,omitempty"` AutoFilter bool `json:"auto_filter,omitempty"` DeleteColumns bool `json:"delete_columns,omitempty"` DeleteRows bool `json:"delete_rows,omitempty"` EditObjects bool `json:"edit_objects,omitempty"` EditScenarios bool `json:"edit_scenarios,omitempty"` FormatCells bool `json:"format_cells,omitempty"` FormatColumns bool `json:"format_columns,omitempty"` FormatRows bool `json:"format_rows,omitempty"` InsertColumns bool `json:"insert_columns,omitempty"` InsertHyperlinks bool `json:"insert_hyperlinks,omitempty"` InsertRows bool `json:"insert_rows,omitempty"` Password string `json:"password,omitempty"` PivotTables bool `json:"pivot_tables,omitempty"` SelectLockedCells bool `json:"select_locked_cells,omitempty"` SelectUnlockedCells bool `json:"select_unlocked_cells,omitempty"` Sort bool `json:"sort,omitempty"` } // HeaderFooterOptions directly maps the settings of header and footer. type HeaderFooterOptions struct { AlignWithMargins bool `json:"align_with_margins,omitempty"` DifferentFirst bool `json:"different_first,omitempty"` DifferentOddEven bool `json:"different_odd_even,omitempty"` ScaleWithDoc bool `json:"scale_with_doc,omitempty"` OddHeader string `json:"odd_header,omitempty"` OddFooter string `json:"odd_footer,omitempty"` EvenHeader string `json:"even_header,omitempty"` EvenFooter string `json:"even_footer,omitempty"` FirstHeader string `json:"first_header,omitempty"` FirstFooter string `json:"first_footer,omitempty"` } // PageLayoutMarginsOptions directly maps the settings of page layout margins. type PageLayoutMarginsOptions struct { Bottom *float64 `json:"bottom,omitempty"` Footer *float64 `json:"footer,omitempty"` Header *float64 `json:"header,omitempty"` Left *float64 `json:"left,omitempty"` Right *float64 `json:"right,omitempty"` Top *float64 `json:"top,omitempty"` Horizontally *bool `json:"horizontally,omitempty"` Vertically *bool `json:"vertically,omitempty"` } // PageLayoutOptions directly maps the settings of page layout. type PageLayoutOptions struct { // Size defines the paper size of the worksheet. Size *int `json:"size,omitempty"` // Orientation defines the orientation of page layout for a worksheet. Orientation *string `json:"orientation,omitempty"` // FirstPageNumber specified the first printed page number. If no value is // specified, then 'automatic' is assumed. FirstPageNumber *uint `json:"first_page_number,omitempty"` // AdjustTo defines the print scaling. This attribute is restricted to // value ranging from 10 (10%) to 400 (400%). This setting is overridden // when fitToWidth and/or fitToHeight are in use. AdjustTo *uint `json:"adjust_to,omitempty"` // FitToHeight specified the number of vertical pages to fit on. FitToHeight *int `json:"fit_to_height,omitempty"` // FitToWidth specified the number of horizontal pages to fit on. FitToWidth *int `json:"fit_to_width,omitempty"` // BlackAndWhite specified print black and white. BlackAndWhite *bool `json:"black_and_white,omitempty"` } // ViewOptions directly maps the settings of sheet view. type ViewOptions struct { // DefaultGridColor indicating that the consuming application should use // the default grid lines color(system dependent). Overrides any color // specified in colorId. DefaultGridColor *bool `json:"default_grid_color,omitempty"` // RightToLeft indicating whether the sheet is in 'right to left' display // mode. When in this mode, Column A is on the far right, Column B; is one // column left of Column A, and so on. Also, information in cells is // displayed in the Right to Left format. RightToLeft *bool `json:"right_to_left,omitempty"` // ShowFormulas indicating whether this sheet should display formulas. ShowFormulas *bool `json:"show_formulas,omitempty"` // ShowGridLines indicating whether this sheet should display grid lines. ShowGridLines *bool `json:"show_grid_lines,omitempty"` // ShowRowColHeaders indicating whether the sheet should display row and // column headings. ShowRowColHeaders *bool `json:"show_row_col_headers,omitempty"` // ShowRuler indicating this sheet should display ruler. ShowRuler *bool `json:"show_ruler,omitempty"` // ShowZeros indicating whether to "show a zero in cells that have zero // value". When using a formula to reference another cell which is empty, // the referenced value becomes 0 when the flag is true. (Default setting // is true.) ShowZeros *bool `json:"show_zeros,omitempty"` // TopLeftCell specifies a location of the top left visible cell Location // of the top left visible cell in the bottom right pane (when in // Left-to-Right mode). TopLeftCell *string `json:"top_left_cell,omitempty"` // View indicating how sheet is displayed, by default it uses empty string // available options: normal, pageLayout, pageBreakPreview View *string `json:"low_color,omitempty"` // ZoomScale specifies a window zoom magnification for current view // representing percent values. This attribute is restricted to values // ranging from 10 to 400. Horizontal & Vertical scale together. ZoomScale *float64 `json:"zoom_scale,omitempty"` } // SheetPropsOptions directly maps the settings of sheet view. type SheetPropsOptions struct { // Specifies a stable name of the sheet, which should not change over time, // and does not change from user input. This name should be used by code // to reference a particular sheet. CodeName *string `json:"code_name,omitempty"` // EnableFormatConditionsCalculation indicating whether the conditional // formatting calculations shall be evaluated. If set to false, then the // min/max values of color scales or data bars or threshold values in Top N // rules shall not be updated. Essentially the conditional // formatting "calc" is off. EnableFormatConditionsCalculation *bool `json:"enable_format_conditions_calculation,omitempty"` // Published indicating whether the worksheet is published. Published *bool `json:"published,omitempty"` // AutoPageBreaks indicating whether the sheet displays Automatic Page // Breaks. AutoPageBreaks *bool `json:"auto_page_breaks,omitempty"` // FitToPage indicating whether the Fit to Page print option is enabled. FitToPage *bool `json:"fit_to_page,omitempty"` // TabColorIndexed represents the indexed color value. TabColorIndexed *int `json:"tab_color_indexed,omitempty"` // TabColorRGB represents the standard Alpha Red Green Blue color value. TabColorRGB *string `json:"tab_color_rgb,omitempty"` // TabColorTheme represents the zero-based index into the collection, // referencing a particular value expressed in the Theme part. TabColorTheme *int `json:"tab_color_theme,omitempty"` // TabColorTint specifies the tint value applied to the color. TabColorTint *float64 `json:"tab_color_tint,omitempty"` // OutlineSummaryBelow indicating whether summary rows appear below detail // in an outline, when applying an outline. OutlineSummaryBelow *bool `json:"outline_summary_below,omitempty"` // OutlineSummaryRight indicating whether summary columns appear to the // right of detail in an outline, when applying an outline. OutlineSummaryRight *bool `json:"outline_summary_right,omitempty"` // BaseColWidth specifies the number of characters of the maximum digit // width of the normal style's font. This value does not include margin // padding or extra padding for grid lines. It is only the number of // characters. BaseColWidth *uint8 `json:"base_col_width,omitempty"` // DefaultColWidth specifies the default column width measured as the // number of characters of the maximum digit width of the normal style's // font. DefaultColWidth *float64 `json:"default_col_width,omitempty"` // DefaultRowHeight specifies the default row height measured in point // size. Optimization so we don't have to write the height on all rows. // This can be written out if most rows have custom height, to achieve the // optimization. DefaultRowHeight *float64 `json:"default_row_height,omitempty"` // CustomHeight specifies the custom height. CustomHeight *bool `json:"custom_height,omitempty"` // ZeroHeight specifies if rows are hidden. ZeroHeight *bool `json:"zero_height,omitempty"` // ThickTop specifies if rows have a thick top border by default. ThickTop *bool `json:"thick_top,omitempty"` // ThickBottom specifies if rows have a thick bottom border by default. ThickBottom *bool `json:"thick_bottom,omitempty"` }