Workbook Class

Workbook. It is the root element of WorkbookPart.When the object is serialized out as xml, its qualified name is x:workbook.

Inheritance Hierarchy


Namespace:  DocumentFormat.OpenXml.Spreadsheet
Assembly:  DocumentFormat.OpenXml (in DocumentFormat.OpenXml.dll)


<ChildElementInfoAttribute(GetType(SmartTagTypes))> _
<ChildElementInfoAttribute(GetType(WorkbookExtensionList))> _
<ChildElementInfoAttribute(GetType(ExternalReferences))> _
<ChildElementInfoAttribute(GetType(FileVersion))> _
<ChildElementInfoAttribute(GetType(FileSharing))> _
<ChildElementInfoAttribute(GetType(WorkbookProperties))> _
<ChildElementInfoAttribute(GetType(WorkbookProtection))> _
<ChildElementInfoAttribute(GetType(BookViews))> _
<ChildElementInfoAttribute(GetType(Sheets))> _
<ChildElementInfoAttribute(GetType(FunctionGroups))> _
<ChildElementInfoAttribute(GetType(CustomWorkbookViews))> _
<ChildElementInfoAttribute(GetType(DefinedNames))> _
<ChildElementInfoAttribute(GetType(CalculationProperties))> _
<ChildElementInfoAttribute(GetType(OleSize))> _
<ChildElementInfoAttribute(GetType(SmartTagProperties))> _
<ChildElementInfoAttribute(GetType(PivotCaches))> _
<ChildElementInfoAttribute(GetType(WebPublishing))> _
<ChildElementInfoAttribute(GetType(FileRecoveryProperties))> _
<ChildElementInfoAttribute(GetType(WebPublishObjects))> _
Public Class Workbook _
    Inherits OpenXmlPartRootElement
Dim instance As Workbook
public class Workbook : OpenXmlPartRootElement


The following table lists the possible child types:

  • FileVersion <x:fileVersion>

  • FileSharing <x:fileSharing>

  • WorkbookProperties <x:workbookPr>

  • WorkbookProtection <x:workbookProtection>

  • BookViews <x:bookViews>

  • Sheets <x:sheets>

  • FunctionGroups <x:functionGroups>

  • ExternalReferences <x:externalReferences>

  • DefinedNames <x:definedNames>

  • CalculationProperties <x:calcPr>

  • OleSize <x:oleSize>

  • CustomWorkbookViews <x:customWorkbookViews>

  • PivotCaches <x:pivotCaches>

  • SmartTagProperties <x:smartTagPr>

  • SmartTagTypes <x:smartTagTypes>

  • WebPublishing <x:webPublishing>

  • FileRecoveryProperties <x:fileRecoveryPr>

  • WebPublishObjects <x:webPublishObjects>

  • WorkbookExtensionList <x:extLst>

[ISO/IEC 29500-1 1st Edition]

18.2.27 workbook (Workbook)

The workbook element is the top level element. It contains elements and attributes that encompass the data content of the workbook. The workbook's child elements each have their own subclause references, and these are shown in the child elements table below. A partial list of the workbook's structures that these elements represent are:

  • Sheets: represents the collection of worksheets in the workbook. The sheets are the central structure within a workbook, and contain the text, numbers, dates, formulas, and other elements of a workbook.

  • Views: SpreadsheetML defines a collection of Workbook views that define basic window dimensions and position of the workbook if it is ever displayed by a spreadsheet application. It also defines a collection of Custom Workbook Views that allows SpreadsheetML to describe one or more views of the data within a workbook.

  • Properties: the workbook has several property collection that store basic workbook settings, such as the date system to use, file protection settings, calculation settings, and smart tag behaviors.

  • Names: words or strings of characters that represent cells, ranges of cells, formulas, or constant values.


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<workbook xmlns=""
<fileVersion lastEdited="4" lowestEdited="4" rupBuild="4017"/>
<workbookPr dateCompatibility="false" vbName="ThisWorkbook" defaultThemeVersion="123820"/>
<workbookView xWindow="120" yWindow="45" windowWidth="15135"
windowHeight="7650" activeTab="4"/>
<sheet name="Sheet1" sheetId="1" r:id="rId1"/>
<sheet name="Sheet2" sheetId="2" r:id="rId2"/>
<sheet name="Sheet5" sheetId="3" r:id="rId3"/>
<sheet name="Chart1" sheetId="4" type="chartsheet" r:id="rId4"/>
<definedName name="MyDefinedName">Sheet3!$A$1:$C$12</definedName>
  <calcPr calcId="122211" calcMode="autoNoTable" refMode="R1C1" iterate="1"
<customWorkbookView name="CustomView1"
guid="{CE6681F1-E999-414D-8446-68A031534B57}" maximized="1" xWindow="1"
yWindow="1" windowWidth="1024" windowHeight="547" activeSheetId="1"/>
<pivotCache cacheId="0" r:id="rId8"/>
  <smartTagPr embed="1" show="noIndicator"/>
<smartTagType namespaceUri="urn:schemas-openxmlformats-org:office:smarttags"
<webPublishing codePage="1252"/>

end example]

Parent Elements

Root element of SpreadsheetML Workbook part

Child Elements


bookViews (Workbook Views)


calcPr (Calculation Properties)


customWorkbookViews (Custom Workbook Views)


definedNames (Defined Names)


externalReferences (External References)


extLst (Future Feature Data Storage Area)


fileRecoveryPr (File Recovery Properties)


fileSharing (File Sharing)


fileVersion (File Version)


functionGroups (Function Groups)


oleSize (Embedded Object Size)


pivotCaches (PivotCaches)


sheets (Sheets)


smartTagPr (Smart Tag Properties)


smartTagTypes (Smart Tag Types)


webPublishing (Web Publishing Properties)


webPublishObjects (Web Publish Objects)


workbookPr (Workbook Properties)


workbookProtection (Workbook Protection)




conformance (Document Conformance Class)

Specifies the conformance class (§2.4) to which the SpreadsheetML document conforms.

If this attribute is omitted, its default value is transitional.

[Example: Consider the following SpreadsheetML Workbook part markup:

<workbook conformance="strict">


This document has a conformance attribute value of strict, therefore it conforms to the SML Strict conformance class. end example]

The possible values for this attribute are defined by the ST_ConformanceClass simple type (§

[Note: The W3C XML Schema definition of this element’s content model (CT_Workbook) is located in §A.2. end note]

© ISO/IEC29500: 2008.


The following code example opens an existing spreadsheet document and adds a new worksheet, named "mySheet," and associates it with the workbook.

using System;
using System.Linq;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;

namespace WorkbookEx
    class Program
        static void Main(string[] args)
            string fileName = @"C:\Users\Public\Documents\WorkbookEx.xlsx";
            // Open an existing spreadsheet document for editing.
            using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(fileName, true))
                // Add a blank WorksheetPart.
                WorksheetPart newWorksheetPart = spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>();
                newWorksheetPart.Worksheet = new Worksheet(new SheetData());

                // Create a Sheets object in the Workbook.
                Sheets sheets = spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>();
                string relationshipId = spreadSheet.WorkbookPart.GetIdOfPart(newWorksheetPart);

                // Create a unique ID for the new worksheet.
                uint sheetId = 1;
                if (sheets.Elements<Sheet>().Count() > 0)
                    sheetId = sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1;

                // Give the new worksheet a name.
                string sheetName = "mySheet" + sheetId;

                // Append the new worksheet and associate it with the workbook.
                Sheet sheet = new Sheet() { Id = relationshipId, SheetId = sheetId, Name = sheetName };
            Console.WriteLine("All done. Press a key.");
Imports System.Linq
Imports DocumentFormat.OpenXml.Packaging
Imports DocumentFormat.OpenXml.Spreadsheet
Module Module1
    Sub Main()
        Dim fileName As String = "C:\Users\Public\Documents\WorkbookEx.xlsx"
        ' Open an existing spreadsheet document for editing.
        Dim spreadSheet As SpreadsheetDocument = SpreadsheetDocument.Open(fileName, True)
        Using (spreadSheet)
            ' Add a blank WorksheetPart.
            Dim newWorksheetPart As WorksheetPart = spreadSheet.WorkbookPart.AddNewPart(Of WorksheetPart)()
            newWorksheetPart.Worksheet = New Worksheet(New SheetData())

            ' Create a Sheets object.
            Dim sheets As Sheets = spreadSheet.WorkbookPart.Workbook.GetFirstChild(Of Sheets)()
            Dim relationshipId As String = spreadSheet.WorkbookPart.GetIdOfPart(newWorksheetPart)

            ' Get a unique ID for the new worksheet.
            Dim sheetId As UInteger = 1
            If (sheets.Elements(Of Sheet).Count > 0) Then
                sheetId = sheets.Elements(Of Sheet).Select(Function(s) s.SheetId.Value).Max + 1
            End If

            ' Give the new worksheet a name.
            Dim sheetName As String = ("mySheet" + sheetId.ToString())

            ' Append the new worksheet and associate it with the workbook.
            Dim sheet As Sheet = New Sheet
            sheet.Id = relationshipId
            sheet.SheetId = sheetId
            sheet.Name = sheetName
        End Using
        Console.WriteLine("All done. Press a key.")
    End Sub
End Module

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

See Also


Workbook Members

DocumentFormat.OpenXml.Spreadsheet Namespace