forked from p30928647/excelize
Format commants, break comments after 80 characters.
This commit is contained in:
parent
f05df2a018
commit
52796f6e58
7
cell.go
7
cell.go
|
@ -6,8 +6,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetCellValue provide function get value from cell by given sheet index and axis in XLSX file.
|
// GetCellValue provide function get value from cell by given sheet index and
|
||||||
// The value of the merged cell is not available currently.
|
// axis in XLSX file. The value of the merged cell is not available currently.
|
||||||
func (f *File) GetCellValue(sheet string, axis string) string {
|
func (f *File) GetCellValue(sheet string, axis string) string {
|
||||||
axis = strings.ToUpper(axis)
|
axis = strings.ToUpper(axis)
|
||||||
var xlsx xlsxWorksheet
|
var xlsx xlsxWorksheet
|
||||||
|
@ -50,7 +50,8 @@ func (f *File) GetCellValue(sheet string, axis string) string {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetCellFormula provide function get formula from cell by given sheet index and axis in XLSX file.
|
// GetCellFormula provide function get formula from cell by given sheet index
|
||||||
|
// and axis in XLSX file.
|
||||||
func (f *File) GetCellFormula(sheet string, axis string) string {
|
func (f *File) GetCellFormula(sheet string, axis string) string {
|
||||||
axis = strings.ToUpper(axis)
|
axis = strings.ToUpper(axis)
|
||||||
var xlsx xlsxWorksheet
|
var xlsx xlsxWorksheet
|
||||||
|
|
4
col.go
4
col.go
|
@ -5,8 +5,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SetColWidth provides function to set the width of a single column or multiple columns.
|
// SetColWidth provides function to set the width of a single column or multiple
|
||||||
// For example:
|
// columns. For example:
|
||||||
//
|
//
|
||||||
// xlsx := excelize.CreateFile()
|
// xlsx := excelize.CreateFile()
|
||||||
// xlsx.SetColWidth("Sheet1", "A", "H", 20)
|
// xlsx.SetColWidth("Sheet1", "A", "H", 20)
|
||||||
|
|
20
excelize.go
20
excelize.go
|
@ -8,15 +8,15 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// File define a populated xlsx.File struct.
|
// File define a populated XLSX file struct.
|
||||||
type File struct {
|
type File struct {
|
||||||
XLSX map[string]string
|
XLSX map[string]string
|
||||||
Path string
|
Path string
|
||||||
SheetCount int
|
SheetCount int
|
||||||
}
|
}
|
||||||
|
|
||||||
// OpenFile take the name of an XLSX file and returns a populated
|
// OpenFile take the name of an XLSX file and returns a populated XLSX file
|
||||||
// xlsx.File struct for it.
|
// struct for it.
|
||||||
func OpenFile(filename string) (*File, error) {
|
func OpenFile(filename string) (*File, error) {
|
||||||
var f *zip.ReadCloser
|
var f *zip.ReadCloser
|
||||||
var err error
|
var err error
|
||||||
|
@ -110,7 +110,8 @@ func (f *File) SetCellStr(sheet string, axis string, value string) {
|
||||||
f.saveFileList(name, replaceWorkSheetsRelationshipsNameSpace(string(output)))
|
f.saveFileList(name, replaceWorkSheetsRelationshipsNameSpace(string(output)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetCellDefault provides function to set string type value of a cell as default format without escaping the cell.
|
// SetCellDefault provides function to set string type value of a cell as
|
||||||
|
// default format without escaping the cell.
|
||||||
func (f *File) SetCellDefault(sheet string, axis string, value string) {
|
func (f *File) SetCellDefault(sheet string, axis string, value string) {
|
||||||
axis = strings.ToUpper(axis)
|
axis = strings.ToUpper(axis)
|
||||||
var xlsx xlsxWorksheet
|
var xlsx xlsxWorksheet
|
||||||
|
@ -203,7 +204,8 @@ func completeRow(xlsx xlsxWorksheet, row int, cell int) xlsxWorksheet {
|
||||||
return xlsx
|
return xlsx
|
||||||
}
|
}
|
||||||
|
|
||||||
// Replace xl/worksheets/sheet%d.xml XML tags to self-closing for compatible Office Excel 2007.
|
// Replace xl/worksheets/sheet%d.xml XML tags to self-closing for compatible
|
||||||
|
// Office Excel 2007.
|
||||||
func replaceWorkSheetsRelationshipsNameSpace(workbookMarshal string) string {
|
func replaceWorkSheetsRelationshipsNameSpace(workbookMarshal string) string {
|
||||||
oldXmlns := `<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">`
|
oldXmlns := `<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">`
|
||||||
newXmlns := `<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mx="http://schemas.microsoft.com/office/mac/excel/2008/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="urn:schemas-microsoft-com:mac:vml" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:xm="http://schemas.microsoft.com/office/excel/2006/main">`
|
newXmlns := `<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mx="http://schemas.microsoft.com/office/mac/excel/2008/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="urn:schemas-microsoft-com:mac:vml" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:xm="http://schemas.microsoft.com/office/excel/2006/main">`
|
||||||
|
@ -211,7 +213,7 @@ func replaceWorkSheetsRelationshipsNameSpace(workbookMarshal string) string {
|
||||||
return workbookMarshal
|
return workbookMarshal
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check XML tags and fix discontinuous case, for example:
|
// Check XML tags and fix discontinuous case. For example:
|
||||||
//
|
//
|
||||||
// <row r="15" spans="1:22" x14ac:dyDescent="0.2">
|
// <row r="15" spans="1:22" x14ac:dyDescent="0.2">
|
||||||
// <c r="A15" s="2" />
|
// <c r="A15" s="2" />
|
||||||
|
@ -232,7 +234,8 @@ func replaceWorkSheetsRelationshipsNameSpace(workbookMarshal string) string {
|
||||||
// <c r="G15" s="1" />
|
// <c r="G15" s="1" />
|
||||||
// </row>
|
// </row>
|
||||||
//
|
//
|
||||||
// Noteice: this method could be very slow for large spreadsheets (more than 3000 rows one sheet).
|
// Noteice: this method could be very slow for large spreadsheets (more than
|
||||||
|
// 3000 rows one sheet).
|
||||||
func checkRow(xlsx xlsxWorksheet) xlsxWorksheet {
|
func checkRow(xlsx xlsxWorksheet) xlsxWorksheet {
|
||||||
buffer := bytes.Buffer{}
|
buffer := bytes.Buffer{}
|
||||||
for k, v := range xlsx.SheetData.Row {
|
for k, v := range xlsx.SheetData.Row {
|
||||||
|
@ -267,7 +270,8 @@ func checkRow(xlsx xlsxWorksheet) xlsxWorksheet {
|
||||||
|
|
||||||
// UpdateLinkedValue fix linked values within a spreadsheet are not updating in
|
// UpdateLinkedValue fix linked values within a spreadsheet are not updating in
|
||||||
// Office Excel 2007 and 2010. This function will be remove value tag when met a
|
// Office Excel 2007 and 2010. This function will be remove value tag when met a
|
||||||
// cell have a linked value. Reference https://social.technet.microsoft.com/Forums/office/en-US/e16bae1f-6a2c-4325-8013-e989a3479066/excel-2010-linked-cells-not-updating?forum=excel
|
// cell have a linked value. Reference
|
||||||
|
// https://social.technet.microsoft.com/Forums/office/en-US/e16bae1f-6a2c-4325-8013-e989a3479066/excel-2010-linked-cells-not-updating?forum=excel
|
||||||
//
|
//
|
||||||
// Notice: after open XLSX file Excel will be update linked value and generate
|
// Notice: after open XLSX file Excel will be update linked value and generate
|
||||||
// new value and will prompt save file or not.
|
// new value and will prompt save file or not.
|
||||||
|
|
|
@ -112,10 +112,12 @@ func TestOpenFile(t *testing.T) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Log(err)
|
t.Log(err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBrokenFile(t *testing.T) {
|
||||||
// Test write file with broken file struct.
|
// Test write file with broken file struct.
|
||||||
f2 := File{}
|
f2 := File{}
|
||||||
err = f2.Save()
|
err := f2.Save()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Log(err)
|
t.Log(err)
|
||||||
}
|
}
|
||||||
|
@ -124,35 +126,10 @@ func TestOpenFile(t *testing.T) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Log(err)
|
t.Log(err)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
func TestCreateFile(t *testing.T) {
|
|
||||||
// Test create a XLSX file.
|
|
||||||
f3 := CreateFile()
|
|
||||||
f3.NewSheet(2, "XLSXSheet2")
|
|
||||||
f3.NewSheet(3, "XLSXSheet3")
|
|
||||||
f3.SetCellInt("Sheet2", "A23", 56)
|
|
||||||
f3.SetCellStr("SHEET1", "B20", "42")
|
|
||||||
f3.SetActiveSheet(0)
|
|
||||||
// Test add picture to sheet.
|
|
||||||
err := f3.AddPicture("Sheet1", "H2", "K12", "./test/images/excel.gif")
|
|
||||||
if err != nil {
|
|
||||||
t.Log(err)
|
|
||||||
}
|
|
||||||
err = f3.AddPicture("Sheet1", "C2", "F12", "./test/images/excel.tif")
|
|
||||||
if err != nil {
|
|
||||||
t.Log(err)
|
|
||||||
}
|
|
||||||
err = f3.WriteTo("./test/Workbook_3.xlsx")
|
|
||||||
if err != nil {
|
|
||||||
t.Log(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestBrokenFile(t *testing.T) {
|
|
||||||
// Test set active sheet without BookViews and Sheets maps in xl/workbook.xml.
|
// Test set active sheet without BookViews and Sheets maps in xl/workbook.xml.
|
||||||
f4, err := OpenFile("./test/badWorkbook.xlsx")
|
f3, err := OpenFile("./test/badWorkbook.xlsx")
|
||||||
f4.SetActiveSheet(2)
|
f3.SetActiveSheet(2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Log(err)
|
t.Log(err)
|
||||||
}
|
}
|
||||||
|
@ -164,6 +141,29 @@ func TestBrokenFile(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCreateFile(t *testing.T) {
|
||||||
|
// Test create a XLSX file.
|
||||||
|
f4 := CreateFile()
|
||||||
|
f4.NewSheet(2, "XLSXSheet2")
|
||||||
|
f4.NewSheet(3, "XLSXSheet3")
|
||||||
|
f4.SetCellInt("Sheet2", "A23", 56)
|
||||||
|
f4.SetCellStr("SHEET1", "B20", "42")
|
||||||
|
f4.SetActiveSheet(0)
|
||||||
|
// Test add picture to sheet.
|
||||||
|
err := f4.AddPicture("Sheet1", "H2", "K12", "./test/images/excel.gif")
|
||||||
|
if err != nil {
|
||||||
|
t.Log(err)
|
||||||
|
}
|
||||||
|
err = f4.AddPicture("Sheet1", "C2", "F12", "./test/images/excel.tif")
|
||||||
|
if err != nil {
|
||||||
|
t.Log(err)
|
||||||
|
}
|
||||||
|
err = f4.WriteTo("./test/Workbook_3.xlsx")
|
||||||
|
if err != nil {
|
||||||
|
t.Log(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestSetColWidth(t *testing.T) {
|
func TestSetColWidth(t *testing.T) {
|
||||||
f5, err := OpenFile("./test/Workbook1.xlsx")
|
f5, err := OpenFile("./test/Workbook1.xlsx")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
13
file.go
13
file.go
|
@ -6,9 +6,11 @@ import (
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
// CreateFile provide function to create new file by default template.
|
// CreateFile provides function to create new file by default template. For
|
||||||
// For example:
|
// example:
|
||||||
// xlsx := CreateFile()
|
//
|
||||||
|
// xlsx := CreateFile()
|
||||||
|
//
|
||||||
func CreateFile() *File {
|
func CreateFile() *File {
|
||||||
file := make(map[string]string)
|
file := make(map[string]string)
|
||||||
file["_rels/.rels"] = templateRels
|
file["_rels/.rels"] = templateRels
|
||||||
|
@ -25,7 +27,7 @@ func CreateFile() *File {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save provide function override the xlsx file with origin path.
|
// Save provides function override the xlsx file with origin path.
|
||||||
func (f *File) Save() error {
|
func (f *File) Save() error {
|
||||||
buf := new(bytes.Buffer)
|
buf := new(bytes.Buffer)
|
||||||
w := zip.NewWriter(buf)
|
w := zip.NewWriter(buf)
|
||||||
|
@ -51,7 +53,8 @@ func (f *File) Save() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteTo provide function create or update to an xlsx file at the provided path.
|
// WriteTo provides function to create or update to an xlsx file at the provided
|
||||||
|
// path.
|
||||||
func (f *File) WriteTo(name string) error {
|
func (f *File) WriteTo(name string) error {
|
||||||
buf := new(bytes.Buffer)
|
buf := new(bytes.Buffer)
|
||||||
w := zip.NewWriter(buf)
|
w := zip.NewWriter(buf)
|
||||||
|
|
18
lib.go
18
lib.go
|
@ -9,16 +9,16 @@ import (
|
||||||
"math"
|
"math"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ReadZip takes a pointer to a zip.ReadCloser and returns a
|
// ReadZip takes a pointer to a zip.ReadCloser and returns a xlsx.File struct
|
||||||
// xlsx.File struct populated with its contents. In most cases
|
// populated with its contents. In most cases ReadZip is not used directly, but
|
||||||
// ReadZip is not used directly, but is called internally by OpenFile.
|
// is called internally by OpenFile.
|
||||||
func ReadZip(f *zip.ReadCloser) (map[string]string, int, error) {
|
func ReadZip(f *zip.ReadCloser) (map[string]string, int, error) {
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
return ReadZipReader(&f.Reader)
|
return ReadZipReader(&f.Reader)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadZipReader can be used to read an XLSX in memory without
|
// ReadZipReader can be used to read an XLSX in memory without touching the
|
||||||
// touching the filesystem.
|
// filesystem.
|
||||||
func ReadZipReader(r *zip.Reader) (map[string]string, int, error) {
|
func ReadZipReader(r *zip.Reader) (map[string]string, int, error) {
|
||||||
fileList := make(map[string]string)
|
fileList := make(map[string]string)
|
||||||
worksheets := 0
|
worksheets := 0
|
||||||
|
@ -88,8 +88,8 @@ func titleToNumber(s string) int {
|
||||||
return sum - 1
|
return sum - 1
|
||||||
}
|
}
|
||||||
|
|
||||||
// letterOnlyMapF is used in conjunction with strings.Map to return
|
// letterOnlyMapF is used in conjunction with strings.Map to return only the
|
||||||
// only the characters A-Z and a-z in a string.
|
// characters A-Z and a-z in a string.
|
||||||
func letterOnlyMapF(rune rune) rune {
|
func letterOnlyMapF(rune rune) rune {
|
||||||
switch {
|
switch {
|
||||||
case 'A' <= rune && rune <= 'Z':
|
case 'A' <= rune && rune <= 'Z':
|
||||||
|
@ -100,8 +100,8 @@ func letterOnlyMapF(rune rune) rune {
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
|
||||||
// intOnlyMapF is used in conjunction with strings.Map to return only
|
// intOnlyMapF is used in conjunction with strings.Map to return only the
|
||||||
// the numeric portions of a string.
|
// numeric portions of a string.
|
||||||
func intOnlyMapF(rune rune) rune {
|
func intOnlyMapF(rune rune) rune {
|
||||||
if rune >= 48 && rune < 58 {
|
if rune >= 48 && rune < 58 {
|
||||||
return rune
|
return rune
|
||||||
|
|
46
picture.go
46
picture.go
|
@ -13,8 +13,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AddPicture provide the method to add picture in a sheet by given xAxis, yAxis and file path.
|
// AddPicture provide the method to add picture in a sheet by given xAxis, yAxis
|
||||||
// For example:
|
// and file path. For example:
|
||||||
//
|
//
|
||||||
// xlsx := excelize.CreateFile()
|
// xlsx := excelize.CreateFile()
|
||||||
// err := xlsx.AddPicture("Sheet1", "A2", "H9", "./image.jpg")
|
// err := xlsx.AddPicture("Sheet1", "A2", "H9", "./image.jpg")
|
||||||
|
@ -63,8 +63,9 @@ func (f *File) AddPicture(sheet string, xAxis string, yAxis string, picture stri
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// addSheetRelationships provides function to add xl/worksheets/_rels/sheet%d.xml.rels by given
|
// addSheetRelationships provides function to add
|
||||||
// sheet name, relationship type and target.
|
// xl/worksheets/_rels/sheet%d.xml.rels by given sheet name, relationship type
|
||||||
|
// and target.
|
||||||
func (f *File) addSheetRelationships(sheet string, relType string, target string) int {
|
func (f *File) addSheetRelationships(sheet string, relType string, target string) int {
|
||||||
var rels = "xl/worksheets/_rels/" + strings.ToLower(sheet) + ".xml.rels"
|
var rels = "xl/worksheets/_rels/" + strings.ToLower(sheet) + ".xml.rels"
|
||||||
var sheetRels xlsxWorkbookRels
|
var sheetRels xlsxWorkbookRels
|
||||||
|
@ -93,8 +94,8 @@ func (f *File) addSheetRelationships(sheet string, relType string, target string
|
||||||
return rID
|
return rID
|
||||||
}
|
}
|
||||||
|
|
||||||
// addSheetDrawing provides function to add drawing element to xl/worksheets/sheet%d.xml by
|
// addSheetDrawing provides function to add drawing element to
|
||||||
// given sheet name and relationship index.
|
// xl/worksheets/sheet%d.xml by given sheet name and relationship index.
|
||||||
func (f *File) addSheetDrawing(sheet string, rID int) {
|
func (f *File) addSheetDrawing(sheet string, rID int) {
|
||||||
var xlsx xlsxWorksheet
|
var xlsx xlsxWorksheet
|
||||||
name := "xl/worksheets/" + strings.ToLower(sheet) + ".xml"
|
name := "xl/worksheets/" + strings.ToLower(sheet) + ".xml"
|
||||||
|
@ -109,7 +110,8 @@ func (f *File) addSheetDrawing(sheet string, rID int) {
|
||||||
f.saveFileList(name, string(output))
|
f.saveFileList(name, string(output))
|
||||||
}
|
}
|
||||||
|
|
||||||
// countDrawings provides function to get drawing files count storage in the folder xl/drawings.
|
// countDrawings provides function to get drawing files count storage in the
|
||||||
|
// folder xl/drawings.
|
||||||
func (f *File) countDrawings() int {
|
func (f *File) countDrawings() int {
|
||||||
count := 0
|
count := 0
|
||||||
for k := range f.XLSX {
|
for k := range f.XLSX {
|
||||||
|
@ -120,10 +122,10 @@ func (f *File) countDrawings() int {
|
||||||
return count
|
return count
|
||||||
}
|
}
|
||||||
|
|
||||||
// addDrawing provides function to add picture by given drawingXML, xAxis, yAxis, file name
|
// addDrawing provides function to add picture by given drawingXML, xAxis,
|
||||||
// and relationship index. In order to solve the problem that the label structure is changed
|
// yAxis, file name and relationship index. In order to solve the problem that
|
||||||
// after serialization and deserialization, two different structures: decodeWsDr and encodeWsDr
|
// the label structure is changed after serialization and deserialization, two
|
||||||
// are defined.
|
// different structures: decodeWsDr and encodeWsDr are defined.
|
||||||
func (f *File) addDrawing(drawingXML string, xAxis string, yAxis string, file string, rID int) {
|
func (f *File) addDrawing(drawingXML string, xAxis string, yAxis string, file string, rID int) {
|
||||||
xAxis = strings.ToUpper(xAxis)
|
xAxis = strings.ToUpper(xAxis)
|
||||||
fromCol := string(strings.Map(letterOnlyMapF, xAxis))
|
fromCol := string(strings.Map(letterOnlyMapF, xAxis))
|
||||||
|
@ -186,8 +188,9 @@ func (f *File) addDrawing(drawingXML string, xAxis string, yAxis string, file st
|
||||||
f.saveFileList(drawingXML, result)
|
f.saveFileList(drawingXML, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
// addDrawingRelationships provides function to add image part relationships in the file
|
// addDrawingRelationships provides function to add image part relationships in
|
||||||
// xl/drawings/_rels/drawing%d.xml.rels by given drawing index, relationship type and target.
|
// the file xl/drawings/_rels/drawing%d.xml.rels by given drawing index,
|
||||||
|
// relationship type and target.
|
||||||
func (f *File) addDrawingRelationships(index int, relType string, target string) int {
|
func (f *File) addDrawingRelationships(index int, relType string, target string) int {
|
||||||
var rels = "xl/drawings/_rels/drawing" + strconv.Itoa(index) + ".xml.rels"
|
var rels = "xl/drawings/_rels/drawing" + strconv.Itoa(index) + ".xml.rels"
|
||||||
var drawingRels xlsxWorkbookRels
|
var drawingRels xlsxWorkbookRels
|
||||||
|
@ -216,7 +219,8 @@ func (f *File) addDrawingRelationships(index int, relType string, target string)
|
||||||
return rID
|
return rID
|
||||||
}
|
}
|
||||||
|
|
||||||
// countMedia provides function to get media files count storage in the folder xl/media/image.
|
// countMedia provides function to get media files count storage in the folder
|
||||||
|
// xl/media/image.
|
||||||
func (f *File) countMedia() int {
|
func (f *File) countMedia() int {
|
||||||
count := 0
|
count := 0
|
||||||
for k := range f.XLSX {
|
for k := range f.XLSX {
|
||||||
|
@ -227,8 +231,8 @@ func (f *File) countMedia() int {
|
||||||
return count
|
return count
|
||||||
}
|
}
|
||||||
|
|
||||||
// addMedia provides function to add picture into folder xl/media/image by given file
|
// addMedia provides function to add picture into folder xl/media/image by given
|
||||||
// name and extension name.
|
// file name and extension name.
|
||||||
func (f *File) addMedia(file string, ext string) {
|
func (f *File) addMedia(file string, ext string) {
|
||||||
count := f.countMedia()
|
count := f.countMedia()
|
||||||
dat, _ := ioutil.ReadFile(file)
|
dat, _ := ioutil.ReadFile(file)
|
||||||
|
@ -236,8 +240,9 @@ func (f *File) addMedia(file string, ext string) {
|
||||||
f.XLSX[media] = string(dat)
|
f.XLSX[media] = string(dat)
|
||||||
}
|
}
|
||||||
|
|
||||||
// addDrawingContentTypePart provides function to add image part relationships in
|
// addDrawingContentTypePart provides function to add image part relationships
|
||||||
// http://purl.oclc.org/ooxml/officeDocument/relationships/image and appropriate content type.
|
// in http://purl.oclc.org/ooxml/officeDocument/relationships/image and
|
||||||
|
// appropriate content type.
|
||||||
func (f *File) addDrawingContentTypePart(index int) {
|
func (f *File) addDrawingContentTypePart(index int) {
|
||||||
var imageTypes = map[string]bool{"jpeg": false, "png": false, "gif": false, "tiff": false}
|
var imageTypes = map[string]bool{"jpeg": false, "png": false, "gif": false, "tiff": false}
|
||||||
var content xlsxTypes
|
var content xlsxTypes
|
||||||
|
@ -271,8 +276,9 @@ func (f *File) addDrawingContentTypePart(index int) {
|
||||||
f.saveFileList(`[Content_Types].xml`, string(output))
|
f.saveFileList(`[Content_Types].xml`, string(output))
|
||||||
}
|
}
|
||||||
|
|
||||||
// getSheetRelationshipsTargetByID provides function to get Target attribute value
|
// getSheetRelationshipsTargetByID provides function to get Target attribute
|
||||||
// in xl/worksheets/_rels/sheet%d.xml.rels by given sheet name and relationship index.
|
// value in xl/worksheets/_rels/sheet%d.xml.rels by given sheet name and
|
||||||
|
// relationship index.
|
||||||
func (f *File) getSheetRelationshipsTargetByID(sheet string, rID string) string {
|
func (f *File) getSheetRelationshipsTargetByID(sheet string, rID string) string {
|
||||||
var rels = "xl/worksheets/_rels/" + strings.ToLower(sheet) + ".xml.rels"
|
var rels = "xl/worksheets/_rels/" + strings.ToLower(sheet) + ".xml.rels"
|
||||||
var sheetRels xlsxWorkbookRels
|
var sheetRels xlsxWorkbookRels
|
||||||
|
|
5
rows.go
5
rows.go
|
@ -43,9 +43,8 @@ func readXMLSST(f *File) (xlsxSST, error) {
|
||||||
return shardStrings, err
|
return shardStrings, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// getValueFrom return a value from a column/row cell,
|
// getValueFrom return a value from a column/row cell, this function is inteded
|
||||||
// this function is inteded to be used with for range on rows
|
// to be used with for range on rows an argument with the xlsx opened file.
|
||||||
// an argument with the xlsx opened file.
|
|
||||||
func (xlsx *xlsxC) getValueFrom(f *File) (string, error) {
|
func (xlsx *xlsxC) getValueFrom(f *File) (string, error) {
|
||||||
switch xlsx.T {
|
switch xlsx.T {
|
||||||
case "s":
|
case "s":
|
||||||
|
|
50
sheet.go
50
sheet.go
|
@ -8,9 +8,10 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewSheet provice function to greate a new sheet by given index, when
|
// Sprint formats using the default formats for its operands and returns the
|
||||||
// creating a new XLSX file, the default sheet will be create, when you
|
// resulting string. NewSheet provice function to greate a new sheet by given
|
||||||
// create a new file, you need to ensure that the index is continuous.
|
// index, when creating a new XLSX file, the default sheet will be create, when
|
||||||
|
// you create a new file, you need to ensure that the index is continuous.
|
||||||
func (f *File) NewSheet(index int, name string) {
|
func (f *File) NewSheet(index int, name string) {
|
||||||
// Update docProps/app.xml
|
// Update docProps/app.xml
|
||||||
f.setAppXML()
|
f.setAppXML()
|
||||||
|
@ -54,7 +55,8 @@ func (f *File) setSheet(index int) {
|
||||||
f.saveFileList(path, replaceWorkSheetsRelationshipsNameSpace(string(output)))
|
f.saveFileList(path, replaceWorkSheetsRelationshipsNameSpace(string(output)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update workbook property of XLSX. Maximum 31 characters are allowed in sheet title.
|
// setWorkbook update workbook property of XLSX. Maximum 31 characters are
|
||||||
|
// allowed in sheet title.
|
||||||
func (f *File) setWorkbook(name string, rid int) {
|
func (f *File) setWorkbook(name string, rid int) {
|
||||||
var content xlsxWorkbook
|
var content xlsxWorkbook
|
||||||
r := strings.NewReplacer(":", "", "\\", "", "/", "", "?", "", "*", "", "[", "", "]", "")
|
r := strings.NewReplacer(":", "", "\\", "", "/", "", "?", "", "*", "", "[", "", "]", "")
|
||||||
|
@ -75,14 +77,14 @@ func (f *File) setWorkbook(name string, rid int) {
|
||||||
f.saveFileList("xl/workbook.xml", replaceRelationshipsNameSpace(string(output)))
|
f.saveFileList("xl/workbook.xml", replaceRelationshipsNameSpace(string(output)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read and unmarshal workbook relationships of XLSX.
|
// readXlsxWorkbookRels read and unmarshal workbook relationships of XLSX file.
|
||||||
func (f *File) readXlsxWorkbookRels() xlsxWorkbookRels {
|
func (f *File) readXlsxWorkbookRels() xlsxWorkbookRels {
|
||||||
var content xlsxWorkbookRels
|
var content xlsxWorkbookRels
|
||||||
xml.Unmarshal([]byte(f.readXML("xl/_rels/workbook.xml.rels")), &content)
|
xml.Unmarshal([]byte(f.readXML("xl/_rels/workbook.xml.rels")), &content)
|
||||||
return content
|
return content
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update workbook relationships property of XLSX.
|
// addXlsxWorkbookRels update workbook relationships property of XLSX.
|
||||||
func (f *File) addXlsxWorkbookRels(sheet int) int {
|
func (f *File) addXlsxWorkbookRels(sheet int) int {
|
||||||
content := f.readXlsxWorkbookRels()
|
content := f.readXlsxWorkbookRels()
|
||||||
rID := len(content.Relationships) + 1
|
rID := len(content.Relationships) + 1
|
||||||
|
@ -106,25 +108,26 @@ func (f *File) addXlsxWorkbookRels(sheet int) int {
|
||||||
return rID
|
return rID
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update docProps/app.xml file of XML.
|
// setAppXML update docProps/app.xml file of XML.
|
||||||
func (f *File) setAppXML() {
|
func (f *File) setAppXML() {
|
||||||
f.saveFileList("docProps/app.xml", templateDocpropsApp)
|
f.saveFileList("docProps/app.xml", templateDocpropsApp)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Some tools that read XLSX files have very strict requirements about
|
// Some tools that read XLSX files have very strict requirements about the
|
||||||
// the structure of the input XML. In particular both Numbers on the Mac
|
// structure of the input XML. In particular both Numbers on the Mac and SAS
|
||||||
// and SAS dislike inline XML namespace declarations, or namespace
|
// dislike inline XML namespace declarations, or namespace prefixes that don't
|
||||||
// prefixes that don't match the ones that Excel itself uses. This is a
|
// match the ones that Excel itself uses. This is a problem because the Go XML
|
||||||
// problem because the Go XML library doesn't multiple namespace
|
// library doesn't multiple namespace declarations in a single element of a
|
||||||
// declarations in a single element of a document. This function is a
|
// document. This function is a horrible hack to fix that after the XML
|
||||||
// horrible hack to fix that after the XML marshalling is completed.
|
// marshalling is completed.
|
||||||
func replaceRelationshipsNameSpace(workbookMarshal string) string {
|
func replaceRelationshipsNameSpace(workbookMarshal string) string {
|
||||||
oldXmlns := `<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">`
|
oldXmlns := `<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">`
|
||||||
newXmlns := `<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x15" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main">`
|
newXmlns := `<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x15" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main">`
|
||||||
return strings.Replace(workbookMarshal, oldXmlns, newXmlns, -1)
|
return strings.Replace(workbookMarshal, oldXmlns, newXmlns, -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetActiveSheet provide function to set default active sheet of XLSX by given index.
|
// SetActiveSheet provide function to set default active sheet of XLSX by given
|
||||||
|
// index.
|
||||||
func (f *File) SetActiveSheet(index int) {
|
func (f *File) SetActiveSheet(index int) {
|
||||||
var content xlsxWorkbook
|
var content xlsxWorkbook
|
||||||
if index < 1 {
|
if index < 1 {
|
||||||
|
@ -177,8 +180,8 @@ func (f *File) SetActiveSheet(index int) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetActiveSheetIndex provides function to get active sheet of XLSX. If not found
|
// GetActiveSheetIndex provides function to get active sheet of XLSX. If not
|
||||||
// the active sheet will be return integer 0.
|
// found the active sheet will be return integer 0.
|
||||||
func (f *File) GetActiveSheetIndex() int {
|
func (f *File) GetActiveSheetIndex() int {
|
||||||
content := xlsxWorkbook{}
|
content := xlsxWorkbook{}
|
||||||
buffer := bytes.Buffer{}
|
buffer := bytes.Buffer{}
|
||||||
|
@ -200,10 +203,11 @@ func (f *File) GetActiveSheetIndex() int {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetSheetName provides function to set the sheet name be given old and new sheet name.
|
// SetSheetName provides function to set the sheet name be given old and new
|
||||||
// Maximum 31 characters are allowed in sheet title and this function only changes the
|
// sheet name. Maximum 31 characters are allowed in sheet title and this
|
||||||
// name of the sheet and will not update the sheet name in the formula or reference
|
// function only changes the name of the sheet and will not update the sheet
|
||||||
// associated with the cell. So there may be problem formula error or reference missing.
|
// name in the formula or reference associated with the cell. So there may be
|
||||||
|
// problem formula error or reference missing.
|
||||||
func (f *File) SetSheetName(oldName, newName string) {
|
func (f *File) SetSheetName(oldName, newName string) {
|
||||||
var content = xlsxWorkbook{}
|
var content = xlsxWorkbook{}
|
||||||
r := strings.NewReplacer(":", "", "\\", "", "/", "", "?", "", "*", "", "[", "", "]", "")
|
r := strings.NewReplacer(":", "", "\\", "", "/", "", "?", "", "*", "", "[", "", "]", "")
|
||||||
|
@ -221,8 +225,8 @@ func (f *File) SetSheetName(oldName, newName string) {
|
||||||
f.saveFileList("xl/workbook.xml", replaceRelationshipsNameSpace(string(output)))
|
f.saveFileList("xl/workbook.xml", replaceRelationshipsNameSpace(string(output)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetSheetName provides function to get sheet name of XLSX by given sheet index.
|
// GetSheetName provides function to get sheet name of XLSX by given sheet
|
||||||
// If given sheet index is invalid, will return an empty string.
|
// index. If given sheet index is invalid, will return an empty string.
|
||||||
func (f *File) GetSheetName(index int) string {
|
func (f *File) GetSheetName(index int) string {
|
||||||
var content = xlsxWorkbook{}
|
var content = xlsxWorkbook{}
|
||||||
xml.Unmarshal([]byte(f.readXML("xl/workbook.xml")), &content)
|
xml.Unmarshal([]byte(f.readXML("xl/workbook.xml")), &content)
|
||||||
|
|
|
@ -2,17 +2,19 @@ package excelize
|
||||||
|
|
||||||
import "encoding/xml"
|
import "encoding/xml"
|
||||||
|
|
||||||
// decodeTwoCellAnchor directly maps the twoCellAnchor (Two Cell Anchor Shape Size). This element
|
// decodeTwoCellAnchor directly maps the twoCellAnchor (Two Cell Anchor Shape
|
||||||
// specifies a two cell anchor placeholder for a group, a shape, or a drawing element. It moves
|
// Size). This element specifies a two cell anchor placeholder for a group, a
|
||||||
// with cells and its extents are in EMU units.
|
// shape, or a drawing element. It moves with cells and its extents are in EMU
|
||||||
|
// units.
|
||||||
type decodeTwoCellAnchor struct {
|
type decodeTwoCellAnchor struct {
|
||||||
EditAs string `xml:"editAs,attr,omitempty"`
|
EditAs string `xml:"editAs,attr,omitempty"`
|
||||||
Content string `xml:",innerxml"`
|
Content string `xml:",innerxml"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// decodeWsDr directly maps the root element for a part of this content type shall wsDr.
|
// decodeWsDr directly maps the root element for a part of this content type
|
||||||
// In order to solve the problem that the label structure is changed after serialization
|
// shall wsDr. In order to solve the problem that the label structure is changed
|
||||||
// and deserialization, two different structures are defined. decodeWsDr just for deserialization.
|
// after serialization and deserialization, two different structures are
|
||||||
|
// defined. decodeWsDr just for deserialization.
|
||||||
type decodeWsDr struct {
|
type decodeWsDr struct {
|
||||||
A string `xml:"xmlns a,attr"`
|
A string `xml:"xmlns a,attr"`
|
||||||
Xdr string `xml:"xmlns xdr,attr"`
|
Xdr string `xml:"xmlns xdr,attr"`
|
||||||
|
|
110
xmlDrawing.go
110
xmlDrawing.go
|
@ -10,10 +10,9 @@ const (
|
||||||
NameSpaceSpreadSheetDrawing = "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"
|
NameSpaceSpreadSheetDrawing = "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"
|
||||||
)
|
)
|
||||||
|
|
||||||
// xlsxCNvPr directly maps the cNvPr (Non-Visual Drawing Properties).
|
// xlsxCNvPr directly maps the cNvPr (Non-Visual Drawing Properties). This
|
||||||
// This element specifies non-visual canvas properties. This allows for
|
// element specifies non-visual canvas properties. This allows for additional
|
||||||
// additional information that does not affect the appearance of the
|
// information that does not affect the appearance of the picture to be stored.
|
||||||
// picture to be stored.
|
|
||||||
type xlsxCNvPr struct {
|
type xlsxCNvPr struct {
|
||||||
ID int `xml:"id,attr"`
|
ID int `xml:"id,attr"`
|
||||||
Name string `xml:"name,attr"`
|
Name string `xml:"name,attr"`
|
||||||
|
@ -22,9 +21,9 @@ type xlsxCNvPr struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxPicLocks directly maps the picLocks (Picture Locks). This element
|
// xlsxPicLocks directly maps the picLocks (Picture Locks). This element
|
||||||
// specifies all locking properties for a graphic frame. These properties
|
// specifies all locking properties for a graphic frame. These properties inform
|
||||||
// inform the generating application about specific properties that have
|
// the generating application about specific properties that have been
|
||||||
// been previously locked and thus should not be changed.
|
// previously locked and thus should not be changed.
|
||||||
type xlsxPicLocks struct {
|
type xlsxPicLocks struct {
|
||||||
NoAdjustHandles bool `xml:"noAdjustHandles,attr,omitempty"`
|
NoAdjustHandles bool `xml:"noAdjustHandles,attr,omitempty"`
|
||||||
NoChangeArrowheads bool `xml:"noChangeArrowheads,attr,omitempty"`
|
NoChangeArrowheads bool `xml:"noChangeArrowheads,attr,omitempty"`
|
||||||
|
@ -39,25 +38,25 @@ type xlsxPicLocks struct {
|
||||||
NoSelect bool `xml:"noSelect,attr,omitempty"`
|
NoSelect bool `xml:"noSelect,attr,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxBlip directly maps the blip element in the namespace
|
// xlsxBlip directly maps the blip element in the namespace http://purl.oclc.or
|
||||||
// http://purl.oclc.or g/ooxml/officeDoc ument/relationships -
|
// g/ooxml/officeDoc ument/relationships - This element specifies the existence
|
||||||
// This element specifies the existence of an image (binary large image or
|
// of an image (binary large image or picture) and contains a reference to the
|
||||||
// picture) and contains a reference to the image data.
|
// image data.
|
||||||
type xlsxBlip struct {
|
type xlsxBlip struct {
|
||||||
Embed string `xml:"r:embed,attr"`
|
Embed string `xml:"r:embed,attr"`
|
||||||
Cstate string `xml:"cstate,attr,omitempty"`
|
Cstate string `xml:"cstate,attr,omitempty"`
|
||||||
R string `xml:"xmlns:r,attr"`
|
R string `xml:"xmlns:r,attr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxStretch directly maps the stretch element. This element specifies
|
// xlsxStretch directly maps the stretch element. This element specifies that a
|
||||||
// that a BLIP should be stretched to fill the target rectangle. The other
|
// BLIP should be stretched to fill the target rectangle. The other option is a
|
||||||
// option is a tile where a BLIP is tiled to fill the available area.
|
// tile where a BLIP is tiled to fill the available area.
|
||||||
type xlsxStretch struct {
|
type xlsxStretch struct {
|
||||||
FillRect string `xml:"a:fillRect"`
|
FillRect string `xml:"a:fillRect"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxOff directly maps the colOff and rowOff element. This element is used
|
// xlsxOff directly maps the colOff and rowOff element. This element is used to
|
||||||
// to specify the column offset within a cell.
|
// specify the column offset within a cell.
|
||||||
type xlsxOff struct {
|
type xlsxOff struct {
|
||||||
X int `xml:"x,attr"`
|
X int `xml:"x,attr"`
|
||||||
Y int `xml:"y,attr"`
|
Y int `xml:"y,attr"`
|
||||||
|
@ -69,61 +68,65 @@ type xlsxExt struct {
|
||||||
Cy int `xml:"cy,attr"`
|
Cy int `xml:"cy,attr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxPrstGeom directly maps the prstGeom (Preset geometry). This element specifies
|
// xlsxPrstGeom directly maps the prstGeom (Preset geometry). This element
|
||||||
// when a preset geometric shape should be used instead of a custom geometric shape.
|
// specifies when a preset geometric shape should be used instead of a custom
|
||||||
// The generating application should be able to render all preset geometries enumerated
|
// geometric shape. The generating application should be able to render all
|
||||||
// in the ST_ShapeType list.
|
// preset geometries enumerated in the ST_ShapeType list.
|
||||||
type xlsxPrstGeom struct {
|
type xlsxPrstGeom struct {
|
||||||
Prst string `xml:"prst,attr"`
|
Prst string `xml:"prst,attr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxXfrm directly maps the xfrm (2D Transform for Graphic Frame). This element
|
// xlsxXfrm directly maps the xfrm (2D Transform for Graphic Frame). This
|
||||||
// specifies the transform to be applied to the corresponding graphic frame. This
|
// element specifies the transform to be applied to the corresponding graphic
|
||||||
// transformation is applied to the graphic frame just as it would be for a shape
|
// frame. This transformation is applied to the graphic frame just as it would
|
||||||
// or group shape.
|
// be for a shape or group shape.
|
||||||
type xlsxXfrm struct {
|
type xlsxXfrm struct {
|
||||||
Off xlsxOff `xml:"a:off"`
|
Off xlsxOff `xml:"a:off"`
|
||||||
Ext xlsxExt `xml:"a:ext"`
|
Ext xlsxExt `xml:"a:ext"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxCNvPicPr directly maps the cNvPicPr (Non-Visual Picture Drawing Properties).
|
// xlsxCNvPicPr directly maps the cNvPicPr (Non-Visual Picture Drawing
|
||||||
// This element specifies the non-visual properties for the picture canvas. These
|
// Properties). This element specifies the non-visual properties for the picture
|
||||||
// properties are to be used by the generating application to determine how certain
|
// canvas. These properties are to be used by the generating application to
|
||||||
// properties are to be changed for the picture object in question.
|
// determine how certain properties are to be changed for the picture object in
|
||||||
|
// question.
|
||||||
type xlsxCNvPicPr struct {
|
type xlsxCNvPicPr struct {
|
||||||
PicLocks xlsxPicLocks `xml:"a:picLocks"`
|
PicLocks xlsxPicLocks `xml:"a:picLocks"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// directly maps the nvPicPr (Non-Visual Properties for a Picture). This element specifies
|
// directly maps the nvPicPr (Non-Visual Properties for a Picture). This element
|
||||||
// all non-visual properties for a picture. This element is a container for the non-visual
|
// specifies all non-visual properties for a picture. This element is a
|
||||||
// identification properties, shape properties and application properties that are to be
|
// container for the non-visual identification properties, shape properties and
|
||||||
// associated with a picture. This allows for additional information that does not affect
|
// application properties that are to be associated with a picture. This allows
|
||||||
// the appearance of the picture to be stored.
|
// for additional information that does not affect the appearance of the picture
|
||||||
|
// to be stored.
|
||||||
type xlsxNvPicPr struct {
|
type xlsxNvPicPr struct {
|
||||||
CNvPr xlsxCNvPr `xml:"xdr:cNvPr"`
|
CNvPr xlsxCNvPr `xml:"xdr:cNvPr"`
|
||||||
CNvPicPr xlsxCNvPicPr `xml:"xdr:cNvPicPr"`
|
CNvPicPr xlsxCNvPicPr `xml:"xdr:cNvPicPr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxBlipFill directly maps the blipFill (Picture Fill). This element specifies the kind
|
// xlsxBlipFill directly maps the blipFill (Picture Fill). This element
|
||||||
// of picture fill that the picture object has. Because a picture has a picture fill already
|
// specifies the kind of picture fill that the picture object has. Because a
|
||||||
// by default, it is possible to have two fills specified for a picture object.
|
// picture has a picture fill already by default, it is possible to have two
|
||||||
|
// fills specified for a picture object.
|
||||||
type xlsxBlipFill struct {
|
type xlsxBlipFill struct {
|
||||||
Blip xlsxBlip `xml:"a:blip"`
|
Blip xlsxBlip `xml:"a:blip"`
|
||||||
Stretch xlsxStretch `xml:"a:stretch"`
|
Stretch xlsxStretch `xml:"a:stretch"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxSpPr directly maps the spPr (Shape Properties). This element specifies the visual shape
|
// xlsxSpPr directly maps the spPr (Shape Properties). This element specifies the visual
|
||||||
// properties that can be applied to a picture. These are the same properties that are allowed
|
// shape properties that can be applied to a picture. These are the same properties that
|
||||||
// to describe the visual properties of a shape but are used here to describe the visual
|
// are allowed to describe the visual properties of a shape but are used here to describe
|
||||||
// appearance of a picture within a document.
|
// the visual appearance of a picture within a document.
|
||||||
type xlsxSpPr struct {
|
type xlsxSpPr struct {
|
||||||
Xfrm xlsxXfrm `xml:"a:xfrm"`
|
Xfrm xlsxXfrm `xml:"a:xfrm"`
|
||||||
PrstGeom xlsxPrstGeom `xml:"a:prstGeom"`
|
PrstGeom xlsxPrstGeom `xml:"a:prstGeom"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxPic elements encompass the definition of pictures within the DrawingML framework. While
|
// xlsxPic elements encompass the definition of pictures within the DrawingML
|
||||||
// pictures are in many ways very similar to shapes they have specific properties that are unique
|
// framework. While pictures are in many ways very similar to shapes they have
|
||||||
// in order to optimize for picture- specific scenarios.
|
// specific properties that are unique in order to optimize for picture-
|
||||||
|
// specific scenarios.
|
||||||
type xlsxPic struct {
|
type xlsxPic struct {
|
||||||
NvPicPr xlsxNvPicPr `xml:"xdr:nvPicPr"`
|
NvPicPr xlsxNvPicPr `xml:"xdr:nvPicPr"`
|
||||||
BlipFill xlsxBlipFill `xml:"xdr:blipFill"`
|
BlipFill xlsxBlipFill `xml:"xdr:blipFill"`
|
||||||
|
@ -146,19 +149,21 @@ type xlsxTo struct {
|
||||||
RowOff int `xml:"xdr:rowOff"`
|
RowOff int `xml:"xdr:rowOff"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxClientData directly maps the clientData element. An empty element which specifies (via
|
// xlsxClientData directly maps the clientData element. An empty element which
|
||||||
// attributes) certain properties related to printing and selection of the drawing object. The
|
// specifies (via attributes) certain properties related to printing and
|
||||||
// fLocksWithSheet attribute (either true or false) determines whether to disable selection when
|
// selection of the drawing object. The fLocksWithSheet attribute (either true
|
||||||
// the sheet is protected, and fPrintsWithSheet attribute (either true or false) determines whether
|
// or false) determines whether to disable selection when the sheet is
|
||||||
// the object is printed when the sheet is printed.
|
// protected, and fPrintsWithSheet attribute (either true or false) determines
|
||||||
|
// whether the object is printed when the sheet is printed.
|
||||||
type xlsxClientData struct {
|
type xlsxClientData struct {
|
||||||
FLocksWithSheet bool `xml:"fLocksWithSheet,attr"`
|
FLocksWithSheet bool `xml:"fLocksWithSheet,attr"`
|
||||||
FPrintsWithSheet bool `xml:"fPrintsWithSheet,attr"`
|
FPrintsWithSheet bool `xml:"fPrintsWithSheet,attr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxTwoCellAnchor directly maps the twoCellAnchor (Two Cell Anchor Shape Size). This element
|
// xlsxTwoCellAnchor directly maps the twoCellAnchor (Two Cell Anchor Shape
|
||||||
// specifies a two cell anchor placeholder for a group, a shape, or a drawing element. It moves
|
// Size). This element specifies a two cell anchor placeholder for a group, a
|
||||||
// with cells and its extents are in EMU units.
|
// shape, or a drawing element. It moves with cells and its extents are in EMU
|
||||||
|
// units.
|
||||||
type xlsxTwoCellAnchor struct {
|
type xlsxTwoCellAnchor struct {
|
||||||
EditAs string `xml:"editAs,attr,omitempty"`
|
EditAs string `xml:"editAs,attr,omitempty"`
|
||||||
From *xlsxFrom `xml:"xdr:from"`
|
From *xlsxFrom `xml:"xdr:from"`
|
||||||
|
@ -168,7 +173,8 @@ type xlsxTwoCellAnchor struct {
|
||||||
ClientData *xlsxClientData `xml:"xdr:clientData"`
|
ClientData *xlsxClientData `xml:"xdr:clientData"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxWsDr directly maps the root element for a part of this content type shall wsDr.
|
// xlsxWsDr directly maps the root element for a part of this content type shall
|
||||||
|
// wsDr.
|
||||||
type xlsxWsDr struct {
|
type xlsxWsDr struct {
|
||||||
TwoCellAnchor []*xlsxTwoCellAnchor `xml:"xdr:twoCellAnchor"`
|
TwoCellAnchor []*xlsxTwoCellAnchor `xml:"xdr:twoCellAnchor"`
|
||||||
Xdr string `xml:"xmlns:xdr,attr"`
|
Xdr string `xml:"xmlns:xdr,attr"`
|
||||||
|
|
|
@ -3,8 +3,8 @@ package excelize
|
||||||
import "encoding/xml"
|
import "encoding/xml"
|
||||||
|
|
||||||
// xlsxSST directly maps the sst element from the namespace
|
// xlsxSST directly maps the sst element from the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main currently
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main currently I have
|
||||||
// I have not checked this for completeness - it does as much as I need.
|
// not checked this for completeness - it does as much as I need.
|
||||||
type xlsxSST struct {
|
type xlsxSST struct {
|
||||||
XMLName xml.Name `xml:"http://schemas.openxmlformats.org/spreadsheetml/2006/main sst"`
|
XMLName xml.Name `xml:"http://schemas.openxmlformats.org/spreadsheetml/2006/main sst"`
|
||||||
Count int `xml:"count,attr"`
|
Count int `xml:"count,attr"`
|
||||||
|
@ -13,18 +13,16 @@ type xlsxSST struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxSI directly maps the si element from the namespace
|
// xlsxSI directly maps the si element from the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have
|
||||||
// currently I have not checked this for completeness - it does as
|
// not checked this for completeness - it does as much as I need.
|
||||||
// much as I need.
|
|
||||||
type xlsxSI struct {
|
type xlsxSI struct {
|
||||||
T string `xml:"t"`
|
T string `xml:"t"`
|
||||||
R []xlsxR `xml:"r"`
|
R []xlsxR `xml:"r"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxR directly maps the r element from the namespace
|
// xlsxR directly maps the r element from the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have
|
||||||
// currently I have not checked this for completeness - it does as
|
// not checked this for completeness - it does as much as I need.
|
||||||
// much as I need.
|
|
||||||
type xlsxR struct {
|
type xlsxR struct {
|
||||||
T string `xml:"t"`
|
T string `xml:"t"`
|
||||||
}
|
}
|
||||||
|
|
120
xmlWorkbook.go
120
xmlWorkbook.go
|
@ -10,8 +10,7 @@ const (
|
||||||
sheetStateVeryHidden = `veryHidden`
|
sheetStateVeryHidden = `veryHidden`
|
||||||
)
|
)
|
||||||
|
|
||||||
// xmlxWorkbookRels contains xmlxWorkbookRelations
|
// xmlxWorkbookRels contains xmlxWorkbookRelations which maps sheet id and sheet XML.
|
||||||
// which maps sheet id and sheet XML.
|
|
||||||
type xlsxWorkbookRels struct {
|
type xlsxWorkbookRels struct {
|
||||||
XMLName xml.Name `xml:"http://schemas.openxmlformats.org/package/2006/relationships Relationships"`
|
XMLName xml.Name `xml:"http://schemas.openxmlformats.org/package/2006/relationships Relationships"`
|
||||||
Relationships []xlsxWorkbookRelation `xml:"Relationship"`
|
Relationships []xlsxWorkbookRelation `xml:"Relationship"`
|
||||||
|
@ -25,9 +24,8 @@ type xlsxWorkbookRelation struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxWorkbook directly maps the workbook element from the namespace
|
// xlsxWorkbook directly maps the workbook element from the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have
|
||||||
// currently I have not checked it for completeness - it does as much
|
// not checked it for completeness - it does as much as I need.
|
||||||
// as I need.
|
|
||||||
type xlsxWorkbook struct {
|
type xlsxWorkbook struct {
|
||||||
XMLName xml.Name `xml:"http://schemas.openxmlformats.org/spreadsheetml/2006/main workbook"`
|
XMLName xml.Name `xml:"http://schemas.openxmlformats.org/spreadsheetml/2006/main workbook"`
|
||||||
FileVersion *xlsxFileVersion `xml:"fileVersion"`
|
FileVersion *xlsxFileVersion `xml:"fileVersion"`
|
||||||
|
@ -43,10 +41,10 @@ type xlsxWorkbook struct {
|
||||||
FileRecoveryPr *xlsxFileRecoveryPr `xml:"fileRecoveryPr"`
|
FileRecoveryPr *xlsxFileRecoveryPr `xml:"fileRecoveryPr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxFileRecoveryPr maps sheet recovery information. This element
|
// xlsxFileRecoveryPr maps sheet recovery information. This element defines
|
||||||
// defines properties that track the state of the workbook file, such
|
// properties that track the state of the workbook file, such as whether the
|
||||||
// as whether the file was saved during a crash, or whether it should
|
// file was saved during a crash, or whether it should be opened in auto-recover
|
||||||
// be opened in auto-recover mode.
|
// mode.
|
||||||
type xlsxFileRecoveryPr struct {
|
type xlsxFileRecoveryPr struct {
|
||||||
AutoRecover bool `xml:"autoRecover,attr,omitempty"`
|
AutoRecover bool `xml:"autoRecover,attr,omitempty"`
|
||||||
CrashSave bool `xml:"crashSave,attr,omitempty"`
|
CrashSave bool `xml:"crashSave,attr,omitempty"`
|
||||||
|
@ -54,16 +52,15 @@ type xlsxFileRecoveryPr struct {
|
||||||
RepairLoad bool `xml:"repairLoad,attr,omitempty"`
|
RepairLoad bool `xml:"repairLoad,attr,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxWorkbookProtection directly maps the workbookProtection element.
|
// xlsxWorkbookProtection directly maps the workbookProtection element. This
|
||||||
// This element specifies options for protecting data in the workbook.
|
// element specifies options for protecting data in the workbook. Applications
|
||||||
// Applications might use workbook protection to prevent anyone from
|
// might use workbook protection to prevent anyone from accidentally changing,
|
||||||
// accidentally changing, moving, or deleting important data. This
|
// moving, or deleting important data. This protection can be ignored by
|
||||||
// protection can be ignored by applications which choose not to support
|
// applications which choose not to support this optional protection mechanism.
|
||||||
// this optional protection mechanism.
|
// When a password is to be hashed and stored in this element, it shall be
|
||||||
// When a password is to be hashed and stored in this element, it shall
|
// hashed as defined below, starting from a UTF-16LE encoded string value. If
|
||||||
// be hashed as defined below, starting from a UTF-16LE encoded string
|
// there is a leading BOM character (U+FEFF) in the encoded password it is
|
||||||
// value. If there is a leading BOM character (U+FEFF) in the encoded
|
// removed before hash calculation.
|
||||||
// password it is removed before hash calculation.
|
|
||||||
type xlsxWorkbookProtection struct {
|
type xlsxWorkbookProtection struct {
|
||||||
LockRevision bool `xml:"lockRevision,attr,omitempty"`
|
LockRevision bool `xml:"lockRevision,attr,omitempty"`
|
||||||
LockStructure bool `xml:"lockStructure,attr,omitempty"`
|
LockStructure bool `xml:"lockStructure,attr,omitempty"`
|
||||||
|
@ -78,9 +75,9 @@ type xlsxWorkbookProtection struct {
|
||||||
WorkbookSpinCount int `xml:"workbookSpinCount,attr,omitempty"`
|
WorkbookSpinCount int `xml:"workbookSpinCount,attr,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxFileVersion directly maps the fileVersion element. This element
|
// xlsxFileVersion directly maps the fileVersion element. This element defines
|
||||||
// defines properties that track which version of the application accessed
|
// properties that track which version of the application accessed the data and
|
||||||
// the data and source code contained in the file.
|
// source code contained in the file.
|
||||||
type xlsxFileVersion struct {
|
type xlsxFileVersion struct {
|
||||||
AppName string `xml:"appName,attr,omitempty"`
|
AppName string `xml:"appName,attr,omitempty"`
|
||||||
CodeName string `xml:"codeName,attr,omitempty"`
|
CodeName string `xml:"codeName,attr,omitempty"`
|
||||||
|
@ -89,9 +86,9 @@ type xlsxFileVersion struct {
|
||||||
RupBuild string `xml:"rupBuild,attr,omitempty"`
|
RupBuild string `xml:"rupBuild,attr,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxWorkbookPr directly maps the workbookPr element from the
|
// xlsxWorkbookPr directly maps the workbookPr element from the namespace
|
||||||
// namespace http://schemas.openxmlformats.org/spreadsheetml/2006/main
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main This element
|
||||||
// This element defines a collection of workbook properties.
|
// defines a collection of workbook properties.
|
||||||
type xlsxWorkbookPr struct {
|
type xlsxWorkbookPr struct {
|
||||||
AllowRefreshQuery bool `xml:"allowRefreshQuery,attr,omitempty"`
|
AllowRefreshQuery bool `xml:"allowRefreshQuery,attr,omitempty"`
|
||||||
AutoCompressPictures bool `xml:"autoCompressPictures,attr,omitempty"`
|
AutoCompressPictures bool `xml:"autoCompressPictures,attr,omitempty"`
|
||||||
|
@ -113,17 +110,17 @@ type xlsxWorkbookPr struct {
|
||||||
UpdateLinks string `xml:"updateLinks,attr,omitempty"`
|
UpdateLinks string `xml:"updateLinks,attr,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxBookViews directly maps the bookViews element. This element specifies
|
// xlsxBookViews directly maps the bookViews element. This element specifies the
|
||||||
// the collection of workbook views of the enclosing workbook. Each view can
|
// collection of workbook views of the enclosing workbook. Each view can specify
|
||||||
// specify a window position, filter options, and other configurations. There
|
// a window position, filter options, and other configurations. There is no
|
||||||
// is no limit on the number of workbook views that can be defined for a workbook.
|
// limit on the number of workbook views that can be defined for a workbook.
|
||||||
type xlsxBookViews struct {
|
type xlsxBookViews struct {
|
||||||
WorkBookView []xlsxWorkBookView `xml:"workbookView"`
|
WorkBookView []xlsxWorkBookView `xml:"workbookView"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxWorkBookView directly maps the workbookView element from the
|
// xlsxWorkBookView directly maps the workbookView element from the namespace
|
||||||
// namespace http://schemas.openxmlformats.org/spreadsheetml/2006/main
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main This element
|
||||||
// This element specifies a single Workbook view.
|
// specifies a single Workbook view.
|
||||||
type xlsxWorkBookView struct {
|
type xlsxWorkBookView struct {
|
||||||
ActiveTab int `xml:"activeTab,attr,omitempty"`
|
ActiveTab int `xml:"activeTab,attr,omitempty"`
|
||||||
AutoFilterDateGrouping bool `xml:"autoFilterDateGrouping,attr,omitempty"`
|
AutoFilterDateGrouping bool `xml:"autoFilterDateGrouping,attr,omitempty"`
|
||||||
|
@ -147,9 +144,8 @@ type xlsxSheets struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxSheet directly maps the sheet element from the namespace
|
// xlsxSheet directly maps the sheet element from the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have
|
||||||
// currently I have not checked it for completeness - it does as much
|
// not checked it for completeness - it does as much as I need.
|
||||||
// as I need.
|
|
||||||
type xlsxSheet struct {
|
type xlsxSheet struct {
|
||||||
Name string `xml:"name,attr,omitempty"`
|
Name string `xml:"name,attr,omitempty"`
|
||||||
SheetID string `xml:"sheetId,attr,omitempty"`
|
SheetID string `xml:"sheetId,attr,omitempty"`
|
||||||
|
@ -157,20 +153,20 @@ type xlsxSheet struct {
|
||||||
State string `xml:"state,attr,omitempty"`
|
State string `xml:"state,attr,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxExternalReferences directly maps the externalReferences element
|
// xlsxExternalReferences directly maps the externalReferences element of the
|
||||||
// of the external workbook references part.
|
// external workbook references part.
|
||||||
type xlsxExternalReferences struct {
|
type xlsxExternalReferences struct {
|
||||||
ExternalReference []xlsxExternalReference `xml:"externalReference"`
|
ExternalReference []xlsxExternalReference `xml:"externalReference"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxExternalReference directly maps the externalReference element
|
// xlsxExternalReference directly maps the externalReference element of the
|
||||||
// of the external workbook references part.
|
// external workbook references part.
|
||||||
type xlsxExternalReference struct {
|
type xlsxExternalReference struct {
|
||||||
RID string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"`
|
RID string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxPivotCaches element enumerates pivot cache definition parts
|
// xlsxPivotCaches element enumerates pivot cache definition parts used by pivot
|
||||||
// used by pivot tables and formulas in this workbook.
|
// tables and formulas in this workbook.
|
||||||
type xlsxPivotCaches struct {
|
type xlsxPivotCaches struct {
|
||||||
PivotCache []xlsxPivotCache `xml:"pivotCache"`
|
PivotCache []xlsxPivotCache `xml:"pivotCache"`
|
||||||
}
|
}
|
||||||
|
@ -182,33 +178,30 @@ type xlsxPivotCache struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// extLst element provides a convention for extending spreadsheetML in
|
// extLst element provides a convention for extending spreadsheetML in
|
||||||
// predefined locations. The locations shall be denoted with the extLst
|
// predefined locations. The locations shall be denoted with the extLst element,
|
||||||
// element, and are called extension lists. Extension list locations
|
// and are called extension lists. Extension list locations within the markup
|
||||||
// within the markup document are specified in the markup specification
|
// document are specified in the markup specification and can be used to store
|
||||||
// and can be used to store extensions to the markup specification,
|
// extensions to the markup specification, whether those are future version
|
||||||
// whether those are future version extensions of the markup specification
|
// extensions of the markup specification or are private extensions implemented
|
||||||
// or are private extensions implemented independently from the markup
|
// independently from the markup specification. Markup within an extension might
|
||||||
// specification. Markup within an extension might not be understood by a
|
// not be understood by a consumer.
|
||||||
// consumer.
|
|
||||||
type xlsxExtLst struct {
|
type xlsxExtLst struct {
|
||||||
Ext string `xml:",innerxml"`
|
Ext string `xml:",innerxml"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxDefinedNames directly maps the definedNames element. This element
|
// xlsxDefinedNames directly maps the definedNames element. This element defines
|
||||||
// defines the collection of defined names for this workbook. Defined
|
// the collection of defined names for this workbook. Defined names are
|
||||||
// names are descriptive names to represent cells, ranges of cells,
|
// descriptive names to represent cells, ranges of cells, formulas, or constant
|
||||||
// formulas, or constant values. Defined names can be used to represent
|
// values. Defined names can be used to represent a range on any worksheet.
|
||||||
// a range on any worksheet.
|
|
||||||
type xlsxDefinedNames struct {
|
type xlsxDefinedNames struct {
|
||||||
DefinedName []xlsxDefinedName `xml:"definedName"`
|
DefinedName []xlsxDefinedName `xml:"definedName"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxDefinedName directly maps the definedName element from the
|
// xlsxDefinedName directly maps the definedName element from the namespace
|
||||||
// namespace http://schemas.openxmlformats.org/spreadsheetml/2006/main
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main This element
|
||||||
// This element defines a defined name within this workbook. A defined
|
// defines a defined name within this workbook. A defined name is descriptive
|
||||||
// name is descriptive text that is used to represents a cell, range of
|
// text that is used to represents a cell, range of cells, formula, or constant
|
||||||
// cells, formula, or constant value. For a descriptions of the attributes
|
// value. For a descriptions of the attributes see https://msdn.microsoft.com/en-us/library/office/documentformat.openxml.spreadsheet.definedname.aspx
|
||||||
// see https://msdn.microsoft.com/en-us/library/office/documentformat.openxml.spreadsheet.definedname.aspx
|
|
||||||
type xlsxDefinedName struct {
|
type xlsxDefinedName struct {
|
||||||
Comment string `xml:"comment,attr,omitempty"`
|
Comment string `xml:"comment,attr,omitempty"`
|
||||||
CustomMenu string `xml:"customMenu,attr,omitempty"`
|
CustomMenu string `xml:"customMenu,attr,omitempty"`
|
||||||
|
@ -229,10 +222,9 @@ type xlsxDefinedName struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxCalcPr directly maps the calcPr element. This element defines the
|
// xlsxCalcPr directly maps the calcPr element. This element defines the
|
||||||
// collection of properties the application uses to record calculation
|
// collection of properties the application uses to record calculation status
|
||||||
// status and details. Calculation is the process of computing formulas
|
// and details. Calculation is the process of computing formulas and then
|
||||||
// and then displaying the results as values in the cells that contain
|
// displaying the results as values in the cells that contain the formulas.
|
||||||
// the formulas.
|
|
||||||
type xlsxCalcPr struct {
|
type xlsxCalcPr struct {
|
||||||
CalcCompleted bool `xml:"calcCompleted,attr,omitempty"`
|
CalcCompleted bool `xml:"calcCompleted,attr,omitempty"`
|
||||||
CalcID string `xml:"calcId,attr,omitempty"`
|
CalcID string `xml:"calcId,attr,omitempty"`
|
||||||
|
|
221
xmlWorksheet.go
221
xmlWorksheet.go
|
@ -3,9 +3,8 @@ package excelize
|
||||||
import "encoding/xml"
|
import "encoding/xml"
|
||||||
|
|
||||||
// xlsxWorksheet directly maps the worksheet element in the namespace
|
// xlsxWorksheet directly maps the worksheet element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have
|
||||||
// currently I have not checked it for completeness - it does as much
|
// not checked it for completeness - it does as much as I need.
|
||||||
// as I need.
|
|
||||||
type xlsxWorksheet struct {
|
type xlsxWorksheet struct {
|
||||||
XMLName xml.Name `xml:"http://schemas.openxmlformats.org/spreadsheetml/2006/main worksheet"`
|
XMLName xml.Name `xml:"http://schemas.openxmlformats.org/spreadsheetml/2006/main worksheet"`
|
||||||
SheetPr *xlsxSheetPr `xml:"sheetPr"`
|
SheetPr *xlsxSheetPr `xml:"sheetPr"`
|
||||||
|
@ -35,13 +34,12 @@ type xlsxDrawing struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxHeaderFooter directly maps the headerFooter element in the namespace
|
// xlsxHeaderFooter directly maps the headerFooter element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - When printed or
|
||||||
// When printed or viewed in page layout view (§18.18.69), each page of a
|
// viewed in page layout view (§18.18.69), each page of a worksheet can have a
|
||||||
// worksheet can have a page header, a page footer, or both. The headers and
|
// page header, a page footer, or both. The headers and footers on odd-numbered
|
||||||
// footers on odd-numbered pages can differ from those on even-numbered pages,
|
// pages can differ from those on even-numbered pages, and the headers and
|
||||||
// and the headers and footers on the first page can differ from those on odd-
|
// footers on the first page can differ from those on odd- and even-numbered
|
||||||
// and even-numbered pages. In the latter case, the first page is not considered
|
// pages. In the latter case, the first page is not considered an odd page.
|
||||||
// an odd page.
|
|
||||||
type xlsxHeaderFooter struct {
|
type xlsxHeaderFooter struct {
|
||||||
DifferentFirst bool `xml:"differentFirst,attr,omitempty"`
|
DifferentFirst bool `xml:"differentFirst,attr,omitempty"`
|
||||||
DifferentOddEven bool `xml:"differentOddEven,attr,omitempty"`
|
DifferentOddEven bool `xml:"differentOddEven,attr,omitempty"`
|
||||||
|
@ -50,24 +48,22 @@ type xlsxHeaderFooter struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxOddHeader directly maps the oddHeader element in the namespace
|
// xlsxOddHeader directly maps the oddHeader element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have
|
||||||
// currently I have not checked it for completeness - it does as much
|
// not checked it for completeness - it does as much as I need.
|
||||||
// as I need.
|
|
||||||
type xlsxOddHeader struct {
|
type xlsxOddHeader struct {
|
||||||
Content string `xml:",chardata"`
|
Content string `xml:",chardata"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxOddFooter directly maps the oddFooter element in the namespace
|
// xlsxOddFooter directly maps the oddFooter element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have
|
||||||
// currently I have not checked it for completeness - it does as much
|
// not checked it for completeness - it does as much as I need.
|
||||||
// as I need.
|
|
||||||
type xlsxOddFooter struct {
|
type xlsxOddFooter struct {
|
||||||
Content string `xml:",chardata"`
|
Content string `xml:",chardata"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxPageSetUp directly maps the pageSetup element in the namespace
|
// xlsxPageSetUp directly maps the pageSetup element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - Page setup
|
||||||
// Page setup settings for the worksheet.
|
// settings for the worksheet.
|
||||||
type xlsxPageSetUp struct {
|
type xlsxPageSetUp struct {
|
||||||
BlackAndWhite bool `xml:"blackAndWhite,attr,omitempty"`
|
BlackAndWhite bool `xml:"blackAndWhite,attr,omitempty"`
|
||||||
CellComments string `xml:"cellComments,attr,omitempty"`
|
CellComments string `xml:"cellComments,attr,omitempty"`
|
||||||
|
@ -91,9 +87,9 @@ type xlsxPageSetUp struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxPrintOptions directly maps the printOptions element in the namespace
|
// xlsxPrintOptions directly maps the printOptions element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - Print options for
|
||||||
// Print options for the sheet. Printer-specific settings are stored separately
|
// the sheet. Printer-specific settings are stored separately in the Printer
|
||||||
// in the Printer Settings part.
|
// Settings part.
|
||||||
type xlsxPrintOptions struct {
|
type xlsxPrintOptions struct {
|
||||||
GridLines bool `xml:"gridLines,attr,omitempty"`
|
GridLines bool `xml:"gridLines,attr,omitempty"`
|
||||||
GridLinesSet bool `xml:"gridLinesSet,attr,omitempty"`
|
GridLinesSet bool `xml:"gridLinesSet,attr,omitempty"`
|
||||||
|
@ -103,8 +99,8 @@ type xlsxPrintOptions struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxPageMargins directly maps the pageMargins element in the namespace
|
// xlsxPageMargins directly maps the pageMargins element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - Page margins for
|
||||||
// Page margins for a sheet or a custom sheet view.
|
// a sheet or a custom sheet view.
|
||||||
type xlsxPageMargins struct {
|
type xlsxPageMargins struct {
|
||||||
Bottom float64 `xml:"bottom,attr"`
|
Bottom float64 `xml:"bottom,attr"`
|
||||||
Footer float64 `xml:"footer,attr"`
|
Footer float64 `xml:"footer,attr"`
|
||||||
|
@ -115,9 +111,8 @@ type xlsxPageMargins struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxSheetFormatPr directly maps the sheetFormatPr element in the namespace
|
// xlsxSheetFormatPr directly maps the sheetFormatPr element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have
|
||||||
// currently I have not checked it for completeness - it does as much
|
// not checked it for completeness - it does as much as I need.
|
||||||
// as I need.
|
|
||||||
type xlsxSheetFormatPr struct {
|
type xlsxSheetFormatPr struct {
|
||||||
DefaultColWidth float64 `xml:"defaultColWidth,attr,omitempty"`
|
DefaultColWidth float64 `xml:"defaultColWidth,attr,omitempty"`
|
||||||
DefaultRowHeight float64 `xml:"defaultRowHeight,attr"`
|
DefaultRowHeight float64 `xml:"defaultRowHeight,attr"`
|
||||||
|
@ -128,24 +123,21 @@ type xlsxSheetFormatPr struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxSheetViews directly maps the sheetViews element in the namespace
|
// xlsxSheetViews directly maps the sheetViews element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - Worksheet views
|
||||||
// Worksheet views collection.
|
// collection.
|
||||||
type xlsxSheetViews struct {
|
type xlsxSheetViews struct {
|
||||||
SheetView []xlsxSheetView `xml:"sheetView"`
|
SheetView []xlsxSheetView `xml:"sheetView"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxSheetView directly maps the sheetView element in the namespace
|
// xlsxSheetView directly maps the sheetView element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have
|
||||||
// currently I have not checked it for completeness - it does as much
|
// not checked it for completeness - it does as much as I need. A single sheet
|
||||||
// as I need.
|
// view definition. When more than one sheet view is defined in the file, it
|
||||||
//
|
// means that when opening the workbook, each sheet view corresponds to a
|
||||||
// A single sheet view definition. When more than one sheet view is
|
// separate window within the spreadsheet application, where each window is
|
||||||
// defined in the file, it means that when opening the workbook, each
|
// showing the particular sheet containing the same workbookViewId value, the
|
||||||
// sheet view corresponds to a separate window within the spreadsheet
|
// last sheetView definition is loaded, and the others are discarded. When
|
||||||
// application, where each window is showing the particular sheet
|
// multiple windows are viewing the same sheet, multiple sheetView elements
|
||||||
// containing the same workbookViewId value, the last sheetView
|
|
||||||
// definition is loaded, and the others are discarded. When multiple
|
|
||||||
// windows are viewing the same sheet, multiple sheetView elements
|
|
||||||
// (with corresponding workbookView entries) are saved.
|
// (with corresponding workbookView entries) are saved.
|
||||||
type xlsxSheetView struct {
|
type xlsxSheetView struct {
|
||||||
WindowProtection bool `xml:"windowProtection,attr,omitempty"`
|
WindowProtection bool `xml:"windowProtection,attr,omitempty"`
|
||||||
|
@ -169,8 +161,8 @@ type xlsxSheetView struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxSelection directly maps the selection element in the namespace
|
// xlsxSelection directly maps the selection element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - Worksheet view
|
||||||
// Worksheet view selection.
|
// selection.
|
||||||
type xlsxSelection struct {
|
type xlsxSelection struct {
|
||||||
ActiveCell string `xml:"activeCell,attr,omitempty"`
|
ActiveCell string `xml:"activeCell,attr,omitempty"`
|
||||||
ActiveCellID int `xml:"activeCellId,attr"`
|
ActiveCellID int `xml:"activeCellId,attr"`
|
||||||
|
@ -178,8 +170,7 @@ type xlsxSelection struct {
|
||||||
SQRef string `xml:"sqref,attr,omitempty"`
|
SQRef string `xml:"sqref,attr,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxSelection directly maps the selection element.
|
// xlsxSelection directly maps the selection element. Worksheet view pane.
|
||||||
// Worksheet view pane.
|
|
||||||
type xlsxPane struct {
|
type xlsxPane struct {
|
||||||
ActivePane string `xml:"activePane,attr,omitempty"`
|
ActivePane string `xml:"activePane,attr,omitempty"`
|
||||||
State string `xml:"state,attr,omitempty"` // Either "split" or "frozen"
|
State string `xml:"state,attr,omitempty"` // Either "split" or "frozen"
|
||||||
|
@ -189,8 +180,8 @@ type xlsxPane struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxSheetPr directly maps the sheetPr element in the namespace
|
// xlsxSheetPr directly maps the sheetPr element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - Sheet-level
|
||||||
// Sheet-level properties.
|
// properties.
|
||||||
type xlsxSheetPr struct {
|
type xlsxSheetPr struct {
|
||||||
XMLName xml.Name `xml:"sheetPr"`
|
XMLName xml.Name `xml:"sheetPr"`
|
||||||
CodeName string `xml:"codeName,attr,omitempty"`
|
CodeName string `xml:"codeName,attr,omitempty"`
|
||||||
|
@ -205,25 +196,23 @@ type xlsxSheetPr struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxPageSetUpPr directly maps the pageSetupPr element in the namespace
|
// xlsxPageSetUpPr directly maps the pageSetupPr element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - Page setup
|
||||||
// Page setup properties of the worksheet.
|
// properties of the worksheet.
|
||||||
type xlsxPageSetUpPr struct {
|
type xlsxPageSetUpPr struct {
|
||||||
AutoPageBreaks bool `xml:"autoPageBreaks,attr,omitempty"`
|
AutoPageBreaks bool `xml:"autoPageBreaks,attr,omitempty"`
|
||||||
FitToPage bool `xml:"fitToPage,attr,omitempty"` // Flag indicating whether the Fit to Page print option is enabled.
|
FitToPage bool `xml:"fitToPage,attr,omitempty"` // Flag indicating whether the Fit to Page print option is enabled.
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxTabColor directly maps the tabColor element in the namespace
|
// xlsxTabColor directly maps the tabColor element in the namespace currently I
|
||||||
// currently I have not checked it for completeness - it does as much
|
// have not checked it for completeness - it does as much as I need.
|
||||||
// as I need.
|
|
||||||
type xlsxTabColor struct {
|
type xlsxTabColor struct {
|
||||||
Theme int `xml:"theme,attr,omitempty"` // (Theme Color) A zero-based index into the <clrScheme> collection (§20.1.6.2), referencing a particular <sysClr> or <srgbClr> value expressed in the Theme part.
|
Theme int `xml:"theme,attr,omitempty"`
|
||||||
Tint uint8 `xml:"tint,attr,omitempty"` // Specifies the tint value applied to the color.
|
Tint uint8 `xml:"tint,attr,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxCols directly maps the cols element in the namespace
|
// xlsxCols directly maps the cols element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have
|
||||||
// currently I have not checked it for completeness - it does as much
|
// not checked it for completeness - it does as much as I need.
|
||||||
// as I need.
|
|
||||||
type xlsxCols struct {
|
type xlsxCols struct {
|
||||||
Col []xlsxCol `xml:"col"`
|
Col []xlsxCol `xml:"col"`
|
||||||
}
|
}
|
||||||
|
@ -244,28 +233,27 @@ type xlsxCol struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxDimension directly maps the dimension element in the namespace
|
// xlsxDimension directly maps the dimension element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - This element
|
||||||
// This element specifies the used range of the worksheet. It specifies
|
// specifies the used range of the worksheet. It specifies the row and column
|
||||||
// the row and column bounds of used cells in the worksheet. This is
|
// bounds of used cells in the worksheet. This is optional and is not required.
|
||||||
// optional and is not required. Used cells include cells with formulas,
|
// Used cells include cells with formulas, text content, and cell formatting.
|
||||||
// text content, and cell formatting. When an entire column is formatted,
|
// When an entire column is formatted, only the first cell in that column is
|
||||||
// only the first cell in that column is considered used.
|
// considered used.
|
||||||
type xlsxDimension struct {
|
type xlsxDimension struct {
|
||||||
Ref string `xml:"ref,attr"`
|
Ref string `xml:"ref,attr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxSheetData directly maps the sheetData element in the namespace
|
// xlsxSheetData directly maps the sheetData element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have
|
||||||
// currently I have not checked it for completeness - it does as much
|
// not checked it for completeness - it does as much as I need.
|
||||||
// as I need.
|
|
||||||
type xlsxSheetData struct {
|
type xlsxSheetData struct {
|
||||||
XMLName xml.Name `xml:"sheetData"`
|
XMLName xml.Name `xml:"sheetData"`
|
||||||
Row []xlsxRow `xml:"row"`
|
Row []xlsxRow `xml:"row"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxRow directly maps the row element. The element expresses information
|
// xlsxRow directly maps the row element. The element expresses information
|
||||||
// about an entire row of a worksheet, and contains all cell definitions for
|
// about an entire row of a worksheet, and contains all cell definitions for a
|
||||||
// a particular row in the worksheet.
|
// particular row in the worksheet.
|
||||||
type xlsxRow struct {
|
type xlsxRow struct {
|
||||||
Collapsed bool `xml:"collapsed,attr,omitempty"`
|
Collapsed bool `xml:"collapsed,attr,omitempty"`
|
||||||
CustomFormat bool `xml:"customFormat,attr,omitempty"`
|
CustomFormat bool `xml:"customFormat,attr,omitempty"`
|
||||||
|
@ -284,20 +272,19 @@ type xlsxRow struct {
|
||||||
|
|
||||||
// xlsxMergeCell directly maps the mergeCell element. A single merged cell.
|
// xlsxMergeCell directly maps the mergeCell element. A single merged cell.
|
||||||
type xlsxMergeCell struct {
|
type xlsxMergeCell struct {
|
||||||
Ref string `xml:"ref,attr,omitempty"` // ref: horiz "A1:C1", vert "B3:B6", both "D3:G4"
|
Ref string `xml:"ref,attr,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxMergeCells directly maps the mergeCells element. This collection expresses
|
// xlsxMergeCells directly maps the mergeCells element. This collection
|
||||||
// all the merged cells in the sheet.
|
// expresses all the merged cells in the sheet.
|
||||||
type xlsxMergeCells struct {
|
type xlsxMergeCells struct {
|
||||||
Count int `xml:"count,attr,omitempty"`
|
Count int `xml:"count,attr,omitempty"`
|
||||||
Cells []*xlsxMergeCell `xml:"mergeCell,omitempty"`
|
Cells []*xlsxMergeCell `xml:"mergeCell,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxC directly maps the c element in the namespace
|
// xlsxC directly maps the c element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have
|
||||||
// currently I have not checked it for completeness - it does as much
|
// not checked it for completeness - it does as much as I need.
|
||||||
// as I need.
|
|
||||||
type xlsxC struct {
|
type xlsxC struct {
|
||||||
R string `xml:"r,attr"` // Cell ID, e.g. A1
|
R string `xml:"r,attr"` // Cell ID, e.g. A1
|
||||||
S int `xml:"s,attr,omitempty"` // Style reference.
|
S int `xml:"s,attr,omitempty"` // Style reference.
|
||||||
|
@ -308,9 +295,8 @@ type xlsxC struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxF directly maps the f element in the namespace
|
// xlsxF directly maps the f element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - currently I have
|
||||||
// currently I have not checked it for completeness - it does as much
|
// not checked it for completeness - it does as much as I need.
|
||||||
// as I need.
|
|
||||||
type xlsxF struct {
|
type xlsxF struct {
|
||||||
Content string `xml:",chardata"`
|
Content string `xml:",chardata"`
|
||||||
T string `xml:"t,attr,omitempty"` // Formula type
|
T string `xml:"t,attr,omitempty"` // Formula type
|
||||||
|
@ -318,8 +304,8 @@ type xlsxF struct {
|
||||||
Si string `xml:"si,attr,omitempty"` // Shared formula index
|
Si string `xml:"si,attr,omitempty"` // Shared formula index
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxSheetProtection collection expresses the sheet protection options
|
// xlsxSheetProtection collection expresses the sheet protection options to
|
||||||
// to enforce when the sheet is protected.
|
// enforce when the sheet is protected.
|
||||||
type xlsxSheetProtection struct {
|
type xlsxSheetProtection struct {
|
||||||
AlgorithmName string `xml:"algorithmName,attr,omitempty"`
|
AlgorithmName string `xml:"algorithmName,attr,omitempty"`
|
||||||
AutoFilter int `xml:"autoFilter,attr,omitempty"`
|
AutoFilter int `xml:"autoFilter,attr,omitempty"`
|
||||||
|
@ -343,19 +329,18 @@ type xlsxSheetProtection struct {
|
||||||
SpinCount int `xml:"spinCount,attr,omitempty"`
|
SpinCount int `xml:"spinCount,attr,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// A Conditional Format is a format, such as cell shading or font color,
|
// A Conditional Format is a format, such as cell shading or font color, that a
|
||||||
// that a spreadsheet application can automatically apply to cells if a
|
// spreadsheet application can automatically apply to cells if a specified
|
||||||
// specified condition is true. This collection expresses conditional
|
// condition is true. This collection expresses conditional formatting rules
|
||||||
// formatting rules applied to a particular cell or range.
|
// applied to a particular cell or range.
|
||||||
type xlsxConditionalFormatting struct {
|
type xlsxConditionalFormatting struct {
|
||||||
CfRule string `xml:",innerxml"`
|
CfRule string `xml:",innerxml"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxHyperlinks directly maps the hyperlinks element in the namespace
|
// xlsxHyperlinks directly maps the hyperlinks element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - A hyperlink can
|
||||||
// A hyperlink can be stored in a package as a relationship. Hyperlinks
|
// be stored in a package as a relationship. Hyperlinks shall be identified by
|
||||||
// shall be identified by containing a target which specifies the
|
// containing a target which specifies the destination of the given hyperlink.
|
||||||
// destination of the given hyperlink.
|
|
||||||
type xlsxHyperlinks struct {
|
type xlsxHyperlinks struct {
|
||||||
Hyperlink []xlsxHyperlink `xml:"hyperlink"`
|
Hyperlink []xlsxHyperlink `xml:"hyperlink"`
|
||||||
}
|
}
|
||||||
|
@ -370,31 +355,28 @@ type xlsxHyperlink struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxTableParts directly maps the tableParts element in the namespace
|
// xlsxTableParts directly maps the tableParts element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - The table element
|
||||||
// The table element has several attributes applied to identify the table
|
// has several attributes applied to identify the table and the data range it
|
||||||
// and the data range it covers. The table id attribute needs to be unique
|
// covers. The table id attribute needs to be unique across all table parts, the
|
||||||
// across all table parts, the same goes for the name and displayName. The
|
// same goes for the name and displayName. The displayName has the further
|
||||||
// displayName has the further restriction that it must be unique across
|
// restriction that it must be unique across all defined names in the workbook.
|
||||||
// all defined names in the workbook. Later on we will see that you can
|
// Later on we will see that you can define names for many elements, such as
|
||||||
// define names for many elements, such as cells or formulas. The name
|
// cells or formulas. The name value is used for the object model in Microsoft
|
||||||
// value is used for the object model in Microsoft Office Excel. The
|
// Office Excel. The displayName is used for references in formulas. The ref
|
||||||
// displayName is used for references in formulas. The ref attribute is
|
// attribute is used to identify the cell range that the table covers. This
|
||||||
// used to identify the cell range that the table covers. This includes
|
// includes not only the table data, but also the table header containing column
|
||||||
// not only the table data, but also the table header containing column
|
|
||||||
// names.
|
// names.
|
||||||
// To add columns to your table you add new tableColumn elements to the
|
// To add columns to your table you add new tableColumn elements to the
|
||||||
// tableColumns container. Similar to the shared string table the
|
// tableColumns container. Similar to the shared string table the collection
|
||||||
// collection keeps a count attribute identifying the number of columns.
|
// keeps a count attribute identifying the number of columns. Besides the table
|
||||||
// Besides the table definition in the table part there is also the need
|
// definition in the table part there is also the need to identify which tables
|
||||||
// to identify which tables are displayed in the worksheet. The worksheet
|
// are displayed in the worksheet. The worksheet part has a separate element
|
||||||
// part has a separate element tableParts to store this information. Each
|
// tableParts to store this information. Each table part is referenced through
|
||||||
// table part is referenced through the relationship ID and again a count
|
// the relationship ID and again a count of the number of table parts is
|
||||||
// of the number of table parts is maintained. The following markup sample
|
// maintained. The following markup sample is taken from the documents
|
||||||
// is taken from the documents accompanying this book. The sheet data
|
// accompanying this book. The sheet data element has been removed to reduce the
|
||||||
// element has been removed to reduce the size of the sample. To reference
|
// size of the sample. To reference the table, just add the tableParts element,
|
||||||
// the table, just add the tableParts element, of course after having
|
// of course after having created and stored the table part. For example:
|
||||||
// created and stored the table part.
|
|
||||||
// Example:
|
|
||||||
//
|
//
|
||||||
// <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
|
// <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
|
||||||
// ...
|
// ...
|
||||||
|
@ -415,25 +397,24 @@ type xlsxTablePart struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxPicture directly maps the picture element in the namespace
|
// xlsxPicture directly maps the picture element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - Background sheet
|
||||||
// Background sheet image.
|
// image. For example:
|
||||||
// Example:
|
|
||||||
//
|
//
|
||||||
// <picture r:id="rId1"/>
|
// <picture r:id="rId1"/>
|
||||||
//
|
//
|
||||||
type xlsxPicture struct {
|
type xlsxPicture struct {
|
||||||
RID string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"` // Relationship Id pointing to the image part.
|
RID string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// xlsxLegacyDrawing directly maps the legacyDrawing element in the namespace
|
// xlsxLegacyDrawing directly maps the legacyDrawing element in the namespace
|
||||||
// http://schemas.openxmlformats.org/spreadsheetml/2006/main -
|
// http://schemas.openxmlformats.org/spreadsheetml/2006/main - A comment is a
|
||||||
// A comment is a rich text note that is attached to, and associated with,
|
// rich text note that is attached to, and associated with, a cell, separate
|
||||||
// a cell, separate from other cell content. Comment content is stored
|
// from other cell content. Comment content is stored separate from the cell,
|
||||||
// separate from the cell, and is displayed in a drawing object (like a
|
// and is displayed in a drawing object (like a text box) that is separate from,
|
||||||
// text box) that is separate from, but associated with, a cell. Comments
|
// but associated with, a cell. Comments are used as reminders, such as noting
|
||||||
// are used as reminders, such as noting how a complex formula works, or
|
// how a complex formula works, or to provide feedback to other users. Comments
|
||||||
// to provide feedback to other users. Comments can also be used to explain
|
// can also be used to explain assumptions made in a formula or to call out
|
||||||
// assumptions made in a formula or to call out something special about the cell.
|
// something special about the cell.
|
||||||
type xlsxLegacyDrawing struct {
|
type xlsxLegacyDrawing struct {
|
||||||
RID string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"`
|
RID string `xml:"http://schemas.openxmlformats.org/officeDocument/2006/relationships id,attr,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue