| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 | // Copyright 2016 - 2021 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 / XLSM / XLTM 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 excelizeimport (	"encoding/xml"	"sync")// xlsxRelationships describe references from parts to other internal resources in the package or to external resources.type xlsxRelationships struct {	sync.Mutex	XMLName       xml.Name           `xml:"http://schemas.openxmlformats.org/package/2006/relationships Relationships"`	Relationships []xlsxRelationship `xml:"Relationship"`}// xlsxRelationship contains relations which maps id and XML.type xlsxRelationship struct {	ID         string `xml:"Id,attr"`	Target     string `xml:",attr"`	Type       string `xml:",attr"`	TargetMode string `xml:",attr,omitempty"`}// xlsxWorkbook contains elements and attributes that encompass the data// content of the workbook. The workbook's child elements each have their own// subclause references.type xlsxWorkbook struct {	XMLName             xml.Name                 `xml:"http://schemas.openxmlformats.org/spreadsheetml/2006/main workbook"`	Conformance         string                   `xml:"conformance,attr,omitempty"`	FileVersion         *xlsxFileVersion         `xml:"fileVersion"`	FileSharing         *xlsxExtLst              `xml:"fileSharing"`	WorkbookPr          *xlsxWorkbookPr          `xml:"workbookPr"`	WorkbookProtection  *xlsxWorkbookProtection  `xml:"workbookProtection"`	BookViews           *xlsxBookViews           `xml:"bookViews"`	Sheets              xlsxSheets               `xml:"sheets"`	FunctionGroups      *xlsxExtLst              `xml:"functionGroups"`	ExternalReferences  *xlsxExternalReferences  `xml:"externalReferences"`	DefinedNames        *xlsxDefinedNames        `xml:"definedNames"`	CalcPr              *xlsxCalcPr              `xml:"calcPr"`	OleSize             *xlsxExtLst              `xml:"oleSize"`	CustomWorkbookViews *xlsxCustomWorkbookViews `xml:"customWorkbookViews"`	PivotCaches         *xlsxPivotCaches         `xml:"pivotCaches"`	SmartTagPr          *xlsxExtLst              `xml:"smartTagPr"`	SmartTagTypes       *xlsxExtLst              `xml:"smartTagTypes"`	WebPublishing       *xlsxExtLst              `xml:"webPublishing"`	FileRecoveryPr      *xlsxFileRecoveryPr      `xml:"fileRecoveryPr"`	WebPublishObjects   *xlsxExtLst              `xml:"webPublishObjects"`	ExtLst              *xlsxExtLst              `xml:"extLst"`}// xlsxFileRecoveryPr maps sheet recovery information. This element defines// properties that track the state of the workbook file, such as whether the// file was saved during a crash, or whether it should be opened in auto-recover// mode.type xlsxFileRecoveryPr struct {	AutoRecover     bool `xml:"autoRecover,attr,omitempty"`	CrashSave       bool `xml:"crashSave,attr,omitempty"`	DataExtractLoad bool `xml:"dataExtractLoad,attr,omitempty"`	RepairLoad      bool `xml:"repairLoad,attr,omitempty"`}// xlsxWorkbookProtection directly maps the workbookProtection element. This// element specifies options for protecting data in the workbook. Applications// might use workbook protection to prevent anyone from accidentally changing,// moving, or deleting important data. This protection can be ignored by// applications which choose not to support this optional protection mechanism.// When a password is to be hashed and stored in this element, it shall be// hashed as defined below, starting from a UTF-16LE encoded string value. If// there is a leading BOM character (U+FEFF) in the encoded password it is// removed before hash calculation.type xlsxWorkbookProtection struct {	LockRevision           bool   `xml:"lockRevision,attr,omitempty"`	LockStructure          bool   `xml:"lockStructure,attr,omitempty"`	LockWindows            bool   `xml:"lockWindows,attr,omitempty"`	RevisionsAlgorithmName string `xml:"revisionsAlgorithmName,attr,omitempty"`	RevisionsHashValue     string `xml:"revisionsHashValue,attr,omitempty"`	RevisionsSaltValue     string `xml:"revisionsSaltValue,attr,omitempty"`	RevisionsSpinCount     int    `xml:"revisionsSpinCount,attr,omitempty"`	WorkbookAlgorithmName  string `xml:"workbookAlgorithmName,attr,omitempty"`	WorkbookHashValue      string `xml:"workbookHashValue,attr,omitempty"`	WorkbookSaltValue      string `xml:"workbookSaltValue,attr,omitempty"`	WorkbookSpinCount      int    `xml:"workbookSpinCount,attr,omitempty"`}// xlsxFileVersion directly maps the fileVersion element. This element defines// properties that track which version of the application accessed the data and// source code contained in the file.type xlsxFileVersion struct {	AppName      string `xml:"appName,attr,omitempty"`	CodeName     string `xml:"codeName,attr,omitempty"`	LastEdited   string `xml:"lastEdited,attr,omitempty"`	LowestEdited string `xml:"lowestEdited,attr,omitempty"`	RupBuild     string `xml:"rupBuild,attr,omitempty"`}// xlsxWorkbookPr directly maps the workbookPr element from the namespace// http://schemas.openxmlformats.org/spreadsheetml/2006/main This element// defines a collection of workbook properties.type xlsxWorkbookPr struct {	AllowRefreshQuery          bool   `xml:"allowRefreshQuery,attr,omitempty"`	AutoCompressPictures       bool   `xml:"autoCompressPictures,attr,omitempty"`	BackupFile                 bool   `xml:"backupFile,attr,omitempty"`	CheckCompatibility         bool   `xml:"checkCompatibility,attr,omitempty"`	CodeName                   string `xml:"codeName,attr,omitempty"`	Date1904                   bool   `xml:"date1904,attr,omitempty"`	DefaultThemeVersion        string `xml:"defaultThemeVersion,attr,omitempty"`	FilterPrivacy              bool   `xml:"filterPrivacy,attr,omitempty"`	HidePivotFieldList         bool   `xml:"hidePivotFieldList,attr,omitempty"`	PromptedSolutions          bool   `xml:"promptedSolutions,attr,omitempty"`	PublishItems               bool   `xml:"publishItems,attr,omitempty"`	RefreshAllConnections      bool   `xml:"refreshAllConnections,attr,omitempty"`	SaveExternalLinkValues     bool   `xml:"saveExternalLinkValues,attr,omitempty"`	ShowBorderUnselectedTables bool   `xml:"showBorderUnselectedTables,attr,omitempty"`	ShowInkAnnotation          bool   `xml:"showInkAnnotation,attr,omitempty"`	ShowObjects                string `xml:"showObjects,attr,omitempty"`	ShowPivotChartFilter       bool   `xml:"showPivotChartFilter,attr,omitempty"`	UpdateLinks                string `xml:"updateLinks,attr,omitempty"`}// xlsxBookViews directly maps the bookViews element. This element specifies the// collection of workbook views of the enclosing workbook. Each view can specify// a window position, filter options, and other configurations. There is no// limit on the number of workbook views that can be defined for a workbook.type xlsxBookViews struct {	WorkBookView []xlsxWorkBookView `xml:"workbookView"`}// xlsxWorkBookView directly maps the workbookView element from the namespace// http://schemas.openxmlformats.org/spreadsheetml/2006/main This element// specifies a single Workbook view.type xlsxWorkBookView struct {	ActiveTab              int    `xml:"activeTab,attr,omitempty"`	AutoFilterDateGrouping bool   `xml:"autoFilterDateGrouping,attr,omitempty"`	FirstSheet             int    `xml:"firstSheet,attr,omitempty"`	Minimized              bool   `xml:"minimized,attr,omitempty"`	ShowHorizontalScroll   bool   `xml:"showHorizontalScroll,attr,omitempty"`	ShowSheetTabs          bool   `xml:"showSheetTabs,attr,omitempty"`	ShowVerticalScroll     bool   `xml:"showVerticalScroll,attr,omitempty"`	TabRatio               int    `xml:"tabRatio,attr,omitempty"`	Visibility             string `xml:"visibility,attr,omitempty"`	WindowHeight           int    `xml:"windowHeight,attr,omitempty"`	WindowWidth            int    `xml:"windowWidth,attr,omitempty"`	XWindow                string `xml:"xWindow,attr,omitempty"`	YWindow                string `xml:"yWindow,attr,omitempty"`}// xlsxSheets directly maps the sheets element from the namespace// http://schemas.openxmlformats.org/spreadsheetml/2006/main.type xlsxSheets struct {	Sheet []xlsxSheet `xml:"sheet"`}// xlsxSheet defines a sheet in this workbook. Sheet data is stored in a// separate part.type xlsxSheet struct {	Name    string `xml:"name,attr,omitempty"`	SheetID int    `xml:"sheetId,attr,omitempty"`	ID      string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr"`	State   string `xml:"state,attr,omitempty"`}// xlsxExternalReferences directly maps the externalReferences element of the// external workbook references part.type xlsxExternalReferences struct {	ExternalReference []xlsxExternalReference `xml:"externalReference"`}// xlsxExternalReference directly maps the externalReference element of the// external workbook references part.type xlsxExternalReference struct {	RID string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"`}// xlsxPivotCaches element enumerates pivot cache definition parts used by pivot// tables and formulas in this workbook.type xlsxPivotCaches struct {	PivotCache []xlsxPivotCache `xml:"pivotCache"`}// xlsxPivotCache directly maps the pivotCache element.type xlsxPivotCache struct {	CacheID int    `xml:"cacheId,attr"`	RID     string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"`}// extLst element provides a convention for extending spreadsheetML in// predefined locations. The locations shall be denoted with the extLst element,// and are called extension lists. Extension list locations within the markup// document are specified in the markup specification and can be used to store// extensions to the markup specification, whether those are future version// extensions of the markup specification or are private extensions implemented// independently from the markup specification. Markup within an extension might// not be understood by a consumer.type xlsxExtLst struct {	Ext string `xml:",innerxml"`}// xlsxDefinedNames directly maps the definedNames element. This element defines// the collection of defined names for this workbook. Defined names are// descriptive names to represent cells, ranges of cells, formulas, or constant// values. Defined names can be used to represent a range on any worksheet.type xlsxDefinedNames struct {	DefinedName []xlsxDefinedName `xml:"definedName"`}// xlsxDefinedName directly maps the definedName element from the namespace// http://schemas.openxmlformats.org/spreadsheetml/2006/main This element// defines a defined name within this workbook. A defined name is descriptive// text that is used to represents a cell, range of cells, formula, or constant// value. For a descriptions of the attributes see https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.definednametype xlsxDefinedName struct {	Comment           string `xml:"comment,attr,omitempty"`	CustomMenu        string `xml:"customMenu,attr,omitempty"`	Description       string `xml:"description,attr,omitempty"`	Function          bool   `xml:"function,attr,omitempty"`	FunctionGroupID   int    `xml:"functionGroupId,attr,omitempty"`	Help              string `xml:"help,attr,omitempty"`	Hidden            bool   `xml:"hidden,attr,omitempty"`	LocalSheetID      *int   `xml:"localSheetId,attr"`	Name              string `xml:"name,attr,omitempty"`	PublishToServer   bool   `xml:"publishToServer,attr,omitempty"`	ShortcutKey       string `xml:"shortcutKey,attr,omitempty"`	StatusBar         string `xml:"statusBar,attr,omitempty"`	VbProcedure       bool   `xml:"vbProcedure,attr,omitempty"`	WorkbookParameter bool   `xml:"workbookParameter,attr,omitempty"`	Xlm               bool   `xml:"xml,attr,omitempty"`	Data              string `xml:",chardata"`}// xlsxCalcPr directly maps the calcPr element. This element defines the// collection of properties the application uses to record calculation status// and details. Calculation is the process of computing formulas and then// displaying the results as values in the cells that contain the formulas.type xlsxCalcPr struct {	CalcCompleted         bool    `xml:"calcCompleted,attr,omitempty"`	CalcID                string  `xml:"calcId,attr,omitempty"`	CalcMode              string  `xml:"calcMode,attr,omitempty"`	CalcOnSave            bool    `xml:"calcOnSave,attr,omitempty"`	ConcurrentCalc        *bool   `xml:"concurrentCalc,attr"`	ConcurrentManualCount int     `xml:"concurrentManualCount,attr,omitempty"`	ForceFullCalc         bool    `xml:"forceFullCalc,attr,omitempty"`	FullCalcOnLoad        bool    `xml:"fullCalcOnLoad,attr,omitempty"`	FullPrecision         bool    `xml:"fullPrecision,attr,omitempty"`	Iterate               bool    `xml:"iterate,attr,omitempty"`	IterateCount          int     `xml:"iterateCount,attr,omitempty"`	IterateDelta          float64 `xml:"iterateDelta,attr,omitempty"`	RefMode               string  `xml:"refMode,attr,omitempty"`}// xlsxCustomWorkbookViews defines the collection of custom workbook views that// are defined for this workbook. A customWorkbookView is similar in concept to// a workbookView in that its attributes contain settings related to the way// that the workbook should be displayed on a screen by a spreadsheet// application.type xlsxCustomWorkbookViews struct {	CustomWorkbookView []xlsxCustomWorkbookView `xml:"customWorkbookView"`}// xlsxCustomWorkbookView directly maps the customWorkbookView element. This// element specifies a single custom workbook view. A custom workbook view// consists of a set of display and print settings that you can name and apply// to a workbook. You can create more than one custom workbook view of the same// workbook. Custom Workbook Views are not required in order to construct a// valid SpreadsheetML document, and are not necessary if the document is never// displayed by a spreadsheet application, or if the spreadsheet application has// a fixed display for workbooks. However, if a spreadsheet application chooses// to implement configurable display modes, the customWorkbookView element// should be used to persist the settings for those display modes.type xlsxCustomWorkbookView struct {	ActiveSheetID        *int    `xml:"activeSheetId,attr"`	AutoUpdate           *bool   `xml:"autoUpdate,attr"`	ChangesSavedWin      *bool   `xml:"changesSavedWin,attr"`	GUID                 *string `xml:"guid,attr"`	IncludeHiddenRowCol  *bool   `xml:"includeHiddenRowCol,attr"`	IncludePrintSettings *bool   `xml:"includePrintSettings,attr"`	Maximized            *bool   `xml:"maximized,attr"`	MergeInterval        int     `xml:"mergeInterval,attr"`	Minimized            *bool   `xml:"minimized,attr"`	Name                 *string `xml:"name,attr"`	OnlySync             *bool   `xml:"onlySync,attr"`	PersonalView         *bool   `xml:"personalView,attr"`	ShowComments         *string `xml:"showComments,attr"`	ShowFormulaBar       *bool   `xml:"showFormulaBar,attr"`	ShowHorizontalScroll *bool   `xml:"showHorizontalScroll,attr"`	ShowObjects          *string `xml:"showObjects,attr"`	ShowSheetTabs        *bool   `xml:"showSheetTabs,attr"`	ShowStatusbar        *bool   `xml:"showStatusbar,attr"`	ShowVerticalScroll   *bool   `xml:"showVerticalScroll,attr"`	TabRatio             *int    `xml:"tabRatio,attr"`	WindowHeight         *int    `xml:"windowHeight,attr"`	WindowWidth          *int    `xml:"windowWidth,attr"`	XWindow              *int    `xml:"xWindow,attr"`	YWindow              *int    `xml:"yWindow,attr"`}// DefinedName directly maps the name for a cell or cell range on a// worksheet.type DefinedName struct {	Name     string	Comment  string	RefersTo string	Scope    string}
 |