-
Notifications
You must be signed in to change notification settings - Fork 48
/
Copy pathtablib_xlsx.go
50 lines (42 loc) · 1014 Bytes
/
tablib_xlsx.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package tablib
import (
"github.com/tealeg/xlsx"
)
// XLSX exports the Dataset as a byte array representing the .xlsx format.
func (d *Dataset) XLSX() (*Exportable, error) {
file := xlsx.NewFile()
if err := d.addXlsxSheetToFile(file, "Sheet 1"); err != nil {
return nil, err
}
b := newBuffer()
file.Write(b)
return newExportable(b), nil
}
// XLSX returns a XLSX representation of the Databook as an exportable.
func (d *Databook) XLSX() (*Exportable, error) {
file := xlsx.NewFile()
for _, s := range d.sheets {
s.dataset.addXlsxSheetToFile(file, s.title)
}
b := newBuffer()
file.Write(b)
return newExportable(b), nil
}
func (d *Dataset) addXlsxSheetToFile(file *xlsx.File, sheetName string) error {
sheet, err := file.AddSheet(sheetName)
if err != nil {
return nil
}
back := d.Records()
for i, r := range back {
row := sheet.AddRow()
for _, c := range r {
cell := row.AddCell()
cell.Value = c
if i == 0 {
cell.GetStyle().Font.Bold = true
}
}
}
return nil
}