summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sheet.go35
-rw-r--r--stream.go3
-rw-r--r--xmlWorkbook.go2
-rw-r--r--xmlWorksheet.go8
4 files changed, 25 insertions, 23 deletions
diff --git a/sheet.go b/sheet.go
index 1ce85b4..e261935 100644
--- a/sheet.go
+++ b/sheet.go
@@ -149,11 +149,12 @@ func (f *File) setContentTypes(index int) {
// setSheet provides a function to update sheet property by given index.
func (f *File) setSheet(index int, name string) {
- var xlsx xlsxWorksheet
- xlsx.Dimension.Ref = "A1"
- xlsx.SheetViews.SheetView = append(xlsx.SheetViews.SheetView, xlsxSheetView{
- WorkbookViewID: 0,
- })
+ xlsx := xlsxWorksheet{
+ Dimension: &xlsxDimension{Ref: "A1"},
+ SheetViews: xlsxSheetViews{
+ SheetView: []xlsxSheetView{{WorkbookViewID: 0}},
+ },
+ }
path := "xl/worksheets/sheet" + strconv.Itoa(index) + ".xml"
f.sheetMap[trimSheetName(name)] = path
f.Sheet[path] = &xlsx
@@ -222,6 +223,9 @@ func (f *File) SetActiveSheet(index int) {
wb := f.workbookReader()
for activeTab, sheet := range wb.Sheets.Sheet {
if sheet.SheetID == index {
+ if wb.BookViews == nil {
+ wb.BookViews = &xlsxBookViews{}
+ }
if len(wb.BookViews.WorkBookView) > 0 {
wb.BookViews.WorkBookView[0].ActiveTab = activeTab
} else {
@@ -253,16 +257,13 @@ func (f *File) SetActiveSheet(index int) {
func (f *File) GetActiveSheetIndex() int {
wb := f.workbookReader()
if wb != nil {
- view := wb.BookViews.WorkBookView
- sheets := wb.Sheets.Sheet
- var activeTab int
- if len(view) > 0 {
- activeTab = view[0].ActiveTab
- if len(sheets) > activeTab && sheets[activeTab].SheetID != 0 {
- return sheets[activeTab].SheetID
+ if wb.BookViews != nil && len(wb.BookViews.WorkBookView) > 0 {
+ activeTab := wb.BookViews.WorkBookView[0].ActiveTab
+ if len(wb.Sheets.Sheet) > activeTab && wb.Sheets.Sheet[activeTab].SheetID != 0 {
+ return wb.Sheets.Sheet[activeTab].SheetID
}
}
- if len(wb.Sheets.Sheet) == 1 {
+ if len(wb.Sheets.Sheet) >= 1 {
return wb.Sheets.Sheet[0].SheetID
}
}
@@ -413,9 +414,11 @@ func (f *File) DeleteSheet(name string) {
f.SheetCount--
}
}
- for idx, bookView := range wb.BookViews.WorkBookView {
- if bookView.ActiveTab >= f.SheetCount {
- wb.BookViews.WorkBookView[idx].ActiveTab--
+ if wb.BookViews != nil {
+ for idx, bookView := range wb.BookViews.WorkBookView {
+ if bookView.ActiveTab >= f.SheetCount {
+ wb.BookViews.WorkBookView[idx].ActiveTab--
+ }
}
}
f.SetActiveSheet(len(f.GetSheetMap()))
diff --git a/stream.go b/stream.go
index 0d91ddd..5e74e8e 100644
--- a/stream.go
+++ b/stream.go
@@ -191,13 +191,12 @@ func StreamMarshalSheet(ws *xlsxWorksheet, replaceMap map[string][]byte) []byte
var marshalResult []byte
marshalResult = append(marshalResult, []byte(XMLHeader+`<worksheet`+templateNamespaceIDMap)...)
for i := 0; i < s.NumField(); i++ {
- f := s.Field(i)
content, ok := replaceMap[typeOfT.Field(i).Name]
if ok {
marshalResult = append(marshalResult, content...)
continue
}
- out, _ := xml.Marshal(f.Interface())
+ out, _ := xml.Marshal(s.Field(i).Interface())
marshalResult = append(marshalResult, out...)
}
marshalResult = append(marshalResult, []byte(`</worksheet>`)...)
diff --git a/xmlWorkbook.go b/xmlWorkbook.go
index 765563b..e9ded6c 100644
--- a/xmlWorkbook.go
+++ b/xmlWorkbook.go
@@ -33,7 +33,7 @@ type xlsxWorkbook struct {
FileVersion *xlsxFileVersion `xml:"fileVersion"`
WorkbookPr *xlsxWorkbookPr `xml:"workbookPr"`
WorkbookProtection *xlsxWorkbookProtection `xml:"workbookProtection"`
- BookViews xlsxBookViews `xml:"bookViews"`
+ BookViews *xlsxBookViews `xml:"bookViews"`
Sheets xlsxSheets `xml:"sheets"`
ExternalReferences *xlsxExternalReferences `xml:"externalReferences"`
DefinedNames *xlsxDefinedNames `xml:"definedNames"`
diff --git a/xmlWorksheet.go b/xmlWorksheet.go
index 9a478e1..b785eac 100644
--- a/xmlWorksheet.go
+++ b/xmlWorksheet.go
@@ -17,10 +17,10 @@ import "encoding/xml"
type xlsxWorksheet struct {
XMLName xml.Name `xml:"http://schemas.openxmlformats.org/spreadsheetml/2006/main worksheet"`
SheetPr *xlsxSheetPr `xml:"sheetPr"`
- Dimension xlsxDimension `xml:"dimension"`
- SheetViews xlsxSheetViews `xml:"sheetViews,omitempty"`
+ Dimension *xlsxDimension `xml:"dimension"`
+ SheetViews xlsxSheetViews `xml:"sheetViews"`
SheetFormatPr *xlsxSheetFormatPr `xml:"sheetFormatPr"`
- Cols *xlsxCols `xml:"cols,omitempty"`
+ Cols *xlsxCols `xml:"cols"`
SheetData xlsxSheetData `xml:"sheetData"`
SheetCalcPr *xlsxInnerXML `xml:"sheetCalcPr"`
SheetProtection *xlsxSheetProtection `xml:"sheetProtection"`
@@ -33,7 +33,7 @@ type xlsxWorksheet struct {
MergeCells *xlsxMergeCells `xml:"mergeCells"`
PhoneticPr *xlsxPhoneticPr `xml:"phoneticPr"`
ConditionalFormatting []*xlsxConditionalFormatting `xml:"conditionalFormatting"`
- DataValidations *xlsxDataValidations `xml:"dataValidations,omitempty"`
+ DataValidations *xlsxDataValidations `xml:"dataValidations"`
Hyperlinks *xlsxHyperlinks `xml:"hyperlinks"`
PrintOptions *xlsxPrintOptions `xml:"printOptions"`
PageMargins *xlsxPageMargins `xml:"pageMargins"`