...
Documentation
Documentation

# Package unioffice

## Overview ▹

## Overview ▾

Package unioffice provides creation, reading, and writing of ECMA 376 Office Open XML documents, spreadsheets and presentations. It is still early in development, but is progressing quickly. This library takes a slightly different approach from others, in that it starts by trying to support all of the ECMA-376 standard when marshaling/unmarshaling XML documents. From there it adds wrappers around the ECMA-376 derived types that provide a more convenient interface.

The raw XML based types reside in the `schema/“ directory. These types are always accessible from the wrapper types via a `X() method that returns the raw type. Except for the base documents (document.Document, spreadsheet.Workbook and presentation.Presentation), the other wrapper types are value types with non-pointer methods. They exist solely to modify and return data from one or more XML types.

The packages of interest are github.com/unidoc/unioffice/v2/document, unidoc/unioffice/v2/spreadsheet and github.com/unidoc/unioffice/v2/presentation.

Example (Document)

Code:

    // see the github.com/unidoc/unioffice/v2/document documentation or _examples/document
    // for more examples
    doc := document.New()
    defer doc.Close()
    doc.AddParagraph().AddRun().AddText("Hello World!")
    doc.SaveToFile("document.docx")

Example (Spreadsheeet)

Code:

    // see the github.com/unidoc/unioffice/v2/spreadsheet documentation or _examples/spreadsheet
    // for more examples
    ss := spreadsheet.New()
    defer ss.Close()
    sheet := ss.AddSheet()
    sheet.AddRow().AddCell().SetString("Hello")
    sheet.Cell("B1").SetString("World!")
    ss.SaveToFile("workbook.xlsx")

## Index ▹

## Index ▾

### Examples

(Expand All)

  Package (Document)
  Package (Spreadsheeet)

### Package files

creator.go doc.go filenames.go log.go mingo.go mingo_112.go optional.go schemas.go xml.go xsdany.go

## Constants

Common filenames used in zip packages.

    const (
        ContentTypesFilename = "[Content_Types].xml"
        BaseRelsFilename     = "_rels/.rels"
    )

Consts for content types used throughout the package

    const (
        // Common strict
        OfficeDocumentTypeStrict     = "http://purl.oclc.org/ooxml/officeDocument/relationships/officeDocument"
        StylesTypeStrict             = "http://purl.oclc.org/ooxml/officeDocument/relationships/styles"
        ThemeTypeStrict              = "http://purl.oclc.org/ooxml/officeDocument/relationships/theme"
        ControlTypeStrict            = "http://purl.oclc.org/ooxml/officeDocument/relationships/control"
        SettingsTypeStrict           = "http://purl.oclc.org/ooxml/officeDocument/relationships/settings"
        ImageTypeStrict              = "http://purl.oclc.org/ooxml/officeDocument/relationships/image"
        CommentsTypeStrict           = "http://purl.oclc.org/ooxml/officeDocument/relationships/comments"
        ThumbnailTypeStrict          = "http://purl.oclc.org/ooxml/officeDocument/relationships/metadata/thumbnail"
        DrawingTypeStrict            = "http://purl.oclc.org/ooxml/officeDocument/relationships/drawing"
        ChartTypeStrict              = "http://purl.oclc.org/ooxml/officeDocument/relationships/chart"
        ExtendedPropertiesTypeStrict = "http://purl.oclc.org/ooxml/officeDocument/relationships/extendedProperties"
        CustomXMLTypeStrict          = "http://purl.oclc.org/ooxml/officeDocument/relationships/customXml"

        // SML strict
        WorksheetTypeStrict     = "http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet"
        SharedStringsTypeStrict = "http://purl.oclc.org/ooxml/officeDocument/relationships/sharedStrings"
        TableTypeStrict         = "http://purl.oclc.org/ooxml/officeDocument/relationships/table"

        // WML strict
        HeaderTypeStrict      = "http://purl.oclc.org/ooxml/officeDocument/relationships/header"
        FooterTypeStrict      = "http://purl.oclc.org/ooxml/officeDocument/relationships/footer"
        NumberingTypeStrict   = "http://purl.oclc.org/ooxml/officeDocument/relationships/numbering"
        FontTableTypeStrict   = "http://purl.oclc.org/ooxml/officeDocument/relationships/fontTable"
        WebSettingsTypeStrict = "http://purl.oclc.org/ooxml/officeDocument/relationships/webSettings"
        FootNotesTypeStrict   = "http://purl.oclc.org/ooxml/officeDocument/relationships/footnotes"
        EndNotesTypeStrict    = "http://purl.oclc.org/ooxml/officeDocument/relationships/endnotes"

        // PML strict
        SlideTypeStrict = "http://purl.oclc.org/ooxml/officeDocument/relationships/slide"

        // VML strict
        VMLDrawingTypeStrict = "http://purl.oclc.org/ooxml/officeDocument/relationships/vmlDrawing"

        // Common
        OfficeDocumentType     = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
        StylesType             = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"
        ThemeType              = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"
        ThemeContentType       = "application/vnd.openxmlformats-officedocument.theme+xml"
        SettingsType           = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings"
        ImageType              = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"
        ControlType            = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/control"
        CommentsType           = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"
        CommentsContentType    = "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml"
        ThumbnailType          = "http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail"
        DrawingType            = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing"
        DrawingContentType     = "application/vnd.openxmlformats-officedocument.drawing+xml"
        ChartType              = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart"
        ChartContentType       = "application/vnd.openxmlformats-officedocument.drawingml.chart+xml"
        HyperLinkType          = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"
        ExtendedPropertiesType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties"
        CorePropertiesType     = "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"
        CorePropertiesAltType  = "http://schemas.openxmlformats.org/officedocument/2006/relationships/metadata/core-properties"
        CustomPropertiesType   = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties"
        CustomXMLType          = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml"
        TableStylesType        = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles"
        ViewPropertiesType     = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps"
        FontEmbeddingType      = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/font"

        // SML
        WorksheetType            = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"
        WorksheetContentType     = "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"
        SharedStringsType        = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings"
        SharedStringsContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"
        SMLStyleSheetContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"
        TableType                = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/table"
        TableContentType         = "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml"

        // WML
        HeaderType      = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header"
        FooterType      = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer"
        NumberingType   = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering"
        FontTableType   = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable"
        WebSettingsType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings"
        FootNotesType   = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes"
        EndNotesType    = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes"

        // PML
        SlideType                  = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide"
        SlideContentType           = "application/vnd.openxmlformats-officedocument.presentationml.slide+xml"
        SlideMasterType            = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster"
        SlideMasterContentType     = "application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml"
        SlideLayoutType            = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout"
        SlideLayoutContentType     = "application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml"
        PresentationPropertiesType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps"
        HandoutMasterType          = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/handoutMaster"
        NotesMasterType            = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster"

        // VML
        VMLDrawingType        = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing"
        VMLDrawingContentType = "application/vnd.openxmlformats-officedocument.vmlDrawing"

        // Extensions
        CommentsExtendedType   = "http://schemas.microsoft.com/office/2011/relationships/commentsExtended"
        CommentsExtensibleType = "http://schemas.microsoft.com/office/2018/08/relationships/commentsExtensible"
        CommentsIdsType        = "http://schemas.microsoft.com/office/2016/09/relationships/commentsIds"
    )

MinGoVersion is used to cause a compile time error if unioffice is compiled with an older version of go. Specifically it requires modules and compatibility with older versions is not guaranteed.

    const MinGoVersion = requires_go_112

## Variables

Log is used to log content from within the library. The intent is to use logging sparingly, preferring to return an error. At the very least this allows redirecting logs to somewhere more appropriate than stdout.

    var Log = log.Printf

## func AbsoluteFilename ¶

    func AbsoluteFilename(dt DocType, typ string, index int) string

AbsoluteFilename returns the full path to a file from the root of the zip container. Index is used in some cases for files which there may be more than one of (e.g. worksheets/drawings/charts)

## func AbsoluteImageFilename ¶

    func AbsoluteImageFilename(dt DocType, index int, fileExtension string) string

AbsoluteImageFilename returns the full path to an image from the root of the zip container.

## func AddPreserveSpaceAttr ¶

    func AddPreserveSpaceAttr(se *xml.StartElement, s string)

AddPreserveSpaceAttr adds an xml:space="preserve" attribute to a start element if it is required for the string s.

## func Bool ¶

    func Bool(v bool) *bool

Bool returns a copy of v as a pointer.

## func DisableLogging ¶

    func DisableLogging()

DisableLogging sets the Log function to a no-op so that any log messages are silently discarded.

## func Float32 ¶

    func Float32(v float32) *float32

Float32 returns a copy of v as a pointer.

## func Float64 ¶

    func Float64(v float64) *float64

Float64 returns a copy of v as a pointer.

## func Int32 ¶

    func Int32(v int32) *int32

Int32 returns a copy of v as a pointer.

## func Int64 ¶

    func Int64(v int64) *int64

Int64 returns a copy of v as a pointer.

## func Int8 ¶

    func Int8(v int8) *int8

Int8 returns a copy of v as a pointer.

## func NeedsSpacePreserve ¶

    func NeedsSpacePreserve(s string) bool

NeedsSpacePreserve returns true if the string has leading or trailing space.

## func RegisterConstructor ¶

    func RegisterConstructor(ns, name string, fn interface{})

RegisterConstructor registers a constructor function used for unmarshaling xsd:any elements.

## func RelativeFilename ¶

    func RelativeFilename(dt DocType, relToTyp, typ string, index int) string

RelativeFilename returns a filename relative to the source file referenced from a relationships file. Index is used in some cases for files which there may be more than one of (e.g. worksheets/drawings/charts)

## func RelativeImageFilename ¶

    func RelativeImageFilename(dt DocType, relToTyp, typ string, index int, fileExtension string) string

RelativeImageFilename returns an image filename relative to the source file referenced from a relationships file. It is identical to RelativeFilename but is used particularly for images in order to handle different image formats.

## func String ¶

    func String(v string) *string

String returns a copy of v as a pointer.

## func Stringf ¶

    func Stringf(f string, args ...interface{}) *string

Stringf formats according to a format specifier and returns a pointer to the resulting string.

## func Uint16 ¶

    func Uint16(v uint16) *uint16

Uint16 returns a copy of v as a pointer.

## func Uint32 ¶

    func Uint32(v uint32) *uint32

Uint32 returns a copy of v as a pointer.

## func Uint64 ¶

    func Uint64(v uint64) *uint64

Uint64 returns a copy of v as a pointer.

## func Uint8 ¶

    func Uint8(v uint8) *uint8

Uint8 returns a copy of v as a pointer.

## type Any ¶

Any is the interface used for marshaling/unmarshaling xsd:any

    type Any interface {
        MarshalXML(e *xml.Encoder, start xml.StartElement) error
        UnmarshalXML(d *xml.Decoder, start xml.StartElement) error
    }

### func CreateElement ¶

    func CreateElement(start xml.StartElement) (Any, error)

CreateElement creates an element with the given namespace and name. It is used to unmarshal some xsd:any elements to the appropriate concrete type.

## type DocType ¶

DocType represents one of the three document types supported (docx/xlsx/pptx)

    type DocType byte

Document Type constants

    const (
        Unknown DocType = iota
        DocTypeSpreadsheet
        DocTypeDocument
        DocTypePresentation
    )

## type XSDAny ¶

XSDAny is used to marshal/unmarshal xsd:any types in the OOXML schema.

    type XSDAny struct {
        XMLName xml.Name
        Attrs   []xml.Attr
        Data    []byte
        Nodes   []*XSDAny
    }

### func (*XSDAny) MarshalXML ¶

    func (x *XSDAny) MarshalXML(e *xml.Encoder, start xml.StartElement) error

MarshalXML implements the xml.Marshaler interface.

### func (*XSDAny) UnmarshalXML ¶

    func (x *XSDAny) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error

UnmarshalXML implements the xml.Unmarshaler interface.

## Subdirectories

Name | Synopsis
--- | ---
..
algo |
chart |
cmd |
catdoc |
csv2xlsx |
docx2md |
test-open-write |
unprotect-xlsx |
xlsx2csv |
color | Package color provides color handling structures and functions for use across all of the document types.
common | Package common contains wrapper types and utilities common to all of the OOXML document formats.
axcontrol |
license | Package license helps manage commercial licenses and check if they are valid for the version of UniOffice used.
logger |
tempstorage |
diskstore | Package diskstore implements tempStorage interface by using disk as a storage
memstore | Package memstore implements tempStorage interface by using memory as a storage
document | Package document provides creation, reading, and writing of ECMA 376 Open Office XML documents.
convert |
drawing |
measurement |
presentation |
convert |
schema |
purl.org |
dc |
elements |
terms |
schemas.microsoft.com |
office |
activeX |
word |
2010 |
wordml |
2012 |
wordml |
2015 |
wordml |
symex |
2016 |
wordml |
cid |
2018 |
wordml |
cex |
2020 |
wordml |
sdtdatahash |
2023 |
wordml |
word16du |
2024 |
wordml |
sdtformatlock |
soo |
dml |
chart |
chartDrawing |
diagram |
lockedCanvas |
picture |
spreadsheetDrawing |
ofc |
custom_properties |
docPropsVTypes |
extended_properties |
math |
relationships |
sharedTypes |
pkg |
content_types |
metadata |
core_properties |
relationships |
pml |
schemaLibrary |
sml |
wml |
urn |
schemas_microsoft_com |
office |
excel |
powerpoint |
word |
vml |
spreadsheet |
convert |
format | Package format provides support for parsing and evaluating spreadsheetml/Excel number formats.
formula | Package formula provides formula parsing and evaluation.
reference |
update | Package update contains definitions needed for updating references after removing rows/columns.
utils |
vmldrawing |
zippkg |