summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docProps.go20
-rw-r--r--sheetview.go5
-rw-r--r--sheetview_test.go5
-rw-r--r--xmlCore.go92
4 files changed, 70 insertions, 52 deletions
diff --git a/docProps.go b/docProps.go
index 41ea18e..fe6f214 100644
--- a/docProps.go
+++ b/docProps.go
@@ -204,7 +204,12 @@ func (f *File) SetDocProps(docProperties *DocProperties) (err error) {
Category: core.Category,
Version: core.Version,
}, nil
- newProps.Created.Text, newProps.Created.Type, newProps.Modified.Text, newProps.Modified.Type = core.Created.Text, core.Created.Type, core.Modified.Text, core.Modified.Type
+ if core.Created != nil {
+ newProps.Created = &xlsxDcTerms{Type: core.Created.Type, Text: core.Created.Text}
+ }
+ if core.Modified != nil {
+ newProps.Modified = &xlsxDcTerms{Type: core.Modified.Type, Text: core.Modified.Text}
+ }
fields = []string{
"Category", "ContentStatus", "Creator", "Description", "Identifier", "Keywords",
"LastModifiedBy", "Revision", "Subject", "Title", "Language", "Version",
@@ -216,10 +221,10 @@ func (f *File) SetDocProps(docProperties *DocProperties) (err error) {
}
}
if docProperties.Created != "" {
- newProps.Created.Text = docProperties.Created
+ newProps.Created = &xlsxDcTerms{Type: "dcterms:W3CDTF", Text: docProperties.Created}
}
if docProperties.Modified != "" {
- newProps.Modified.Text = docProperties.Modified
+ newProps.Modified = &xlsxDcTerms{Type: "dcterms:W3CDTF", Text: docProperties.Modified}
}
output, err = xml.Marshal(newProps)
f.saveFileList(defaultXMLPathDocPropsCore, output)
@@ -239,19 +244,22 @@ func (f *File) GetDocProps() (ret *DocProperties, err error) {
ret, err = &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
-
+ if core.Created != nil {
+ ret.Created = core.Created.Text
+ }
+ if core.Modified != nil {
+ ret.Modified = core.Modified.Text
+ }
return
}
diff --git a/sheetview.go b/sheetview.go
index bf8f023..99f0634 100644
--- a/sheetview.go
+++ b/sheetview.go
@@ -163,6 +163,11 @@ func (f *File) getSheetView(sheet string, viewIndex int) (*xlsxSheetView, error)
if err != nil {
return nil, err
}
+ if ws.SheetViews == nil {
+ ws.SheetViews = &xlsxSheetViews{
+ SheetView: []xlsxSheetView{{WorkbookViewID: 0}},
+ }
+ }
if viewIndex < 0 {
if viewIndex < -len(ws.SheetViews.SheetView) {
return nil, fmt.Errorf("view index %d out of range", viewIndex)
diff --git a/sheetview_test.go b/sheetview_test.go
index 2bba8f9..65c4f51 100644
--- a/sheetview_test.go
+++ b/sheetview_test.go
@@ -210,4 +210,9 @@ func TestSheetViewOptionsErrors(t *testing.T) {
assert.NoError(t, f.SetSheetViewOptions(sheet, -1))
assert.Error(t, f.SetSheetViewOptions(sheet, 1))
assert.Error(t, f.SetSheetViewOptions(sheet, -2))
+
+ ws, ok := f.Sheet.Load("xl/worksheets/sheet1.xml")
+ assert.True(t, ok)
+ ws.(*xlsxWorksheet).SheetViews = nil
+ assert.NoError(t, f.GetSheetViewOptions(sheet, 0))
}
diff --git a/xmlCore.go b/xmlCore.go
index 22ae6bc..1849131 100644
--- a/xmlCore.go
+++ b/xmlCore.go
@@ -31,61 +31,61 @@ type DocProperties struct {
Version string
}
+// decodeDcTerms directly maps the DCMI metadata terms for the coreProperties.
+type decodeDcTerms struct {
+ Text string `xml:",chardata"`
+ Type string `xml:"http://www.w3.org/2001/XMLSchema-instance type,attr"`
+}
+
// decodeCoreProperties directly maps the root element for a part of this
// content type shall coreProperties. In order to solve the problem that the
// label structure is changed after serialization and deserialization, two
// different structures are defined. decodeCoreProperties just for
// deserialization.
type decodeCoreProperties struct {
- XMLName xml.Name `xml:"http://schemas.openxmlformats.org/package/2006/metadata/core-properties coreProperties"`
- Title string `xml:"http://purl.org/dc/elements/1.1/ title,omitempty"`
- Subject string `xml:"http://purl.org/dc/elements/1.1/ subject,omitempty"`
- Creator string `xml:"http://purl.org/dc/elements/1.1/ creator"`
- Keywords string `xml:"keywords,omitempty"`
- Description string `xml:"http://purl.org/dc/elements/1.1/ description,omitempty"`
- LastModifiedBy string `xml:"lastModifiedBy"`
- Language string `xml:"http://purl.org/dc/elements/1.1/ language,omitempty"`
- Identifier string `xml:"http://purl.org/dc/elements/1.1/ identifier,omitempty"`
- Revision string `xml:"revision,omitempty"`
- Created struct {
- Text string `xml:",chardata"`
- Type string `xml:"http://www.w3.org/2001/XMLSchema-instance type,attr"`
- } `xml:"http://purl.org/dc/terms/ created"`
- Modified struct {
- Text string `xml:",chardata"`
- Type string `xml:"http://www.w3.org/2001/XMLSchema-instance type,attr"`
- } `xml:"http://purl.org/dc/terms/ modified"`
- ContentStatus string `xml:"contentStatus,omitempty"`
- Category string `xml:"category,omitempty"`
- Version string `xml:"version,omitempty"`
+ XMLName xml.Name `xml:"http://schemas.openxmlformats.org/package/2006/metadata/core-properties coreProperties"`
+ Title string `xml:"http://purl.org/dc/elements/1.1/ title,omitempty"`
+ Subject string `xml:"http://purl.org/dc/elements/1.1/ subject,omitempty"`
+ Creator string `xml:"http://purl.org/dc/elements/1.1/ creator"`
+ Keywords string `xml:"keywords,omitempty"`
+ Description string `xml:"http://purl.org/dc/elements/1.1/ description,omitempty"`
+ LastModifiedBy string `xml:"lastModifiedBy"`
+ Language string `xml:"http://purl.org/dc/elements/1.1/ language,omitempty"`
+ Identifier string `xml:"http://purl.org/dc/elements/1.1/ identifier,omitempty"`
+ Revision string `xml:"revision,omitempty"`
+ Created *decodeDcTerms `xml:"http://purl.org/dc/terms/ created"`
+ Modified *decodeDcTerms `xml:"http://purl.org/dc/terms/ modified"`
+ ContentStatus string `xml:"contentStatus,omitempty"`
+ Category string `xml:"category,omitempty"`
+ Version string `xml:"version,omitempty"`
+}
+
+// xlsxDcTerms directly maps the DCMI metadata terms for the coreProperties.
+type xlsxDcTerms struct {
+ Text string `xml:",chardata"`
+ Type string `xml:"xsi:type,attr"`
}
// xlsxCoreProperties directly maps the root element for a part of this
// content type shall coreProperties.
type xlsxCoreProperties struct {
- XMLName xml.Name `xml:"http://schemas.openxmlformats.org/package/2006/metadata/core-properties coreProperties"`
- Dc string `xml:"xmlns:dc,attr"`
- Dcterms string `xml:"xmlns:dcterms,attr"`
- Dcmitype string `xml:"xmlns:dcmitype,attr"`
- XSI string `xml:"xmlns:xsi,attr"`
- Title string `xml:"dc:title,omitempty"`
- Subject string `xml:"dc:subject,omitempty"`
- Creator string `xml:"dc:creator"`
- Keywords string `xml:"keywords,omitempty"`
- Description string `xml:"dc:description,omitempty"`
- LastModifiedBy string `xml:"lastModifiedBy"`
- Language string `xml:"dc:language,omitempty"`
- Identifier string `xml:"dc:identifier,omitempty"`
- Revision string `xml:"revision,omitempty"`
- Created struct {
- Text string `xml:",chardata"`
- Type string `xml:"xsi:type,attr"`
- } `xml:"dcterms:created"`
- Modified struct {
- Text string `xml:",chardata"`
- Type string `xml:"xsi:type,attr"`
- } `xml:"dcterms:modified"`
- ContentStatus string `xml:"contentStatus,omitempty"`
- Category string `xml:"category,omitempty"`
- Version string `xml:"version,omitempty"`
+ XMLName xml.Name `xml:"http://schemas.openxmlformats.org/package/2006/metadata/core-properties coreProperties"`
+ Dc string `xml:"xmlns:dc,attr"`
+ Dcterms string `xml:"xmlns:dcterms,attr"`
+ Dcmitype string `xml:"xmlns:dcmitype,attr"`
+ XSI string `xml:"xmlns:xsi,attr"`
+ Title string `xml:"dc:title,omitempty"`
+ Subject string `xml:"dc:subject,omitempty"`
+ Creator string `xml:"dc:creator"`
+ Keywords string `xml:"keywords,omitempty"`
+ Description string `xml:"dc:description,omitempty"`
+ LastModifiedBy string `xml:"lastModifiedBy"`
+ Language string `xml:"dc:language,omitempty"`
+ Identifier string `xml:"dc:identifier,omitempty"`
+ Revision string `xml:"revision,omitempty"`
+ Created *xlsxDcTerms `xml:"dcterms:created"`
+ Modified *xlsxDcTerms `xml:"dcterms:modified"`
+ ContentStatus string `xml:"contentStatus,omitempty"`
+ Category string `xml:"category,omitempty"`
+ Version string `xml:"version,omitempty"`
}