// 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 ( "encoding/xml" "reflect" ) // SetDocProps provides a function to set document core properties. The // properties that can be set are: // // Property | Description // ----------------+----------------------------------------------------------------------------- // Title | The name given to the resource. // | // Subject | The topic of the content of the resource. // | // Creator | An entity primarily responsible for making the content of the resource. // | // Keywords | A delimited set of keywords to support searching and indexing. This is // | typically a list of terms that are not available elsewhere in the properties. // | // Description | An explanation of the content of the resource. // | // LastModifiedBy | The user who performed the last modification. The identification is // | environment-specific. // | // Language | The language of the intellectual content of the resource. // | // Identifier | An unambiguous reference to the resource within a given context. // | // Revision | The topic of the content of the resource. // | // ContentStatus | The status of the content. For example: Values might include "Draft", // | "Reviewed" and "Final" // | // Category | A categorization of the content of this package. // | // Version | The version number. This value is set by the user or by the application. // // For example: // // err := f.SetDocProps(&excelize.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", // }) // func (f *File) SetDocProps(docProperties *DocProperties) error { core := decodeCoreProperties{} err := xml.Unmarshal(namespaceStrictToTransitional(f.readXML("docProps/core.xml")), &core) if err != nil { return err } newProps := xlsxCoreProperties{ Dc: NameSpaceDublinCore, Dcterms: NameSpaceDublinCoreTerms, Dcmitype: NameSpaceDublinCoreMetadataIntiative, XSI: NameSpaceXMLSchemaInstance, Title: core.Title, Subject: core.Subject, Creator: core.Creator, Keywords: core.Keywords, Description: core.Description, LastModifiedBy: core.LastModifiedBy, Language: core.Language, Identifier: core.Identifier, Revision: core.Revision, ContentStatus: core.ContentStatus, Category: core.Category, Version: core.Version, } newProps.Created.Text = core.Created.Text newProps.Created.Type = core.Created.Type newProps.Modified.Text = core.Modified.Text newProps.Modified.Type = core.Modified.Type fields := []string{"Category", "ContentStatus", "Creator", "Description", "Identifier", "Keywords", "LastModifiedBy", "Revision", "Subject", "Title", "Language", "Version"} immutable := reflect.ValueOf(*docProperties) mutable := reflect.ValueOf(&newProps).Elem() for _, field := range fields { val := immutable.FieldByName(field).String() if val != "" { mutable.FieldByName(field).SetString(val) } } if docProperties.Created != "" { newProps.Created.Text = docProperties.Created } if docProperties.Modified != "" { newProps.Modified.Text = docProperties.Modified } output, err := xml.Marshal(&newProps) f.saveFileList("docProps/core.xml", output) return err } // GetDocProps provides a function to get document core properties. func (f *File) GetDocProps() (*DocProperties, error) { core := decodeCoreProperties{} err := xml.Unmarshal(namespaceStrictToTransitional(f.readXML("docProps/core.xml")), &core) if err != nil { return nil, err } return &DocProperties{ Category: core.Category, ContentStatus: core.ContentStatus, Created: core.Created.Text, Creator: core.Creator, Description: core.Description, Identifier: core.Identifier, Keywords: core.Keywords, LastModifiedBy: core.LastModifiedBy, Modified: core.Modified.Text, Revision: core.Revision, Subject: core.Subject, Title: core.Title, Language: core.Language, Version: core.Version, }, nil }