diff options
author | xuri <xuri.me@gmail.com> | 2019-06-04 23:30:55 +0800 |
---|---|---|
committer | xuri <xuri.me@gmail.com> | 2019-06-04 23:30:55 +0800 |
commit | db99373b25a3f5c986d8f7d26ec983853574a17d (patch) | |
tree | 8ca7cdcd95e070f5c1a3dd0fe05526adfe7cd85f /docProps.go | |
parent | d038ca2e9c755abb6458606a90129559f14dc33b (diff) |
Resolve #415, init set and get doc properties support
Diffstat (limited to 'docProps.go')
-rwxr-xr-x | docProps.go | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/docProps.go b/docProps.go new file mode 100755 index 0000000..0f44ac4 --- /dev/null +++ b/docProps.go @@ -0,0 +1,140 @@ +// 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 +} |