summaryrefslogtreecommitdiff
path: root/docProps.go
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2019-06-04 23:30:55 +0800
committerxuri <xuri.me@gmail.com>2019-06-04 23:30:55 +0800
commitdb99373b25a3f5c986d8f7d26ec983853574a17d (patch)
tree8ca7cdcd95e070f5c1a3dd0fe05526adfe7cd85f /docProps.go
parentd038ca2e9c755abb6458606a90129559f14dc33b (diff)
Resolve #415, init set and get doc properties support
Diffstat (limited to 'docProps.go')
-rwxr-xr-xdocProps.go140
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
+}