summaryrefslogtreecommitdiff
path: root/excelize.go
diff options
context:
space:
mode:
Diffstat (limited to 'excelize.go')
-rw-r--r--excelize.go34
1 files changed, 24 insertions, 10 deletions
diff --git a/excelize.go b/excelize.go
index bc37c0a..3c81db2 100644
--- a/excelize.go
+++ b/excelize.go
@@ -4,6 +4,9 @@ import (
"archive/zip"
"bytes"
"encoding/xml"
+ "io"
+ "io/ioutil"
+ "os"
"strconv"
"strings"
)
@@ -19,20 +22,31 @@ type File struct {
// OpenFile take the name of an XLSX file and returns a populated XLSX file
// struct for it.
func OpenFile(filename string) (*File, error) {
- var f *zip.ReadCloser
- var err error
- file := make(map[string]string)
- c := make(map[string]bool)
- sheetCount := 0
- f, err = zip.OpenReader(filename)
+ file, err := os.Open(filename)
if err != nil {
- return &File{}, err
+ return nil, err
+ }
+ b, err := ioutil.ReadAll(file)
+ if err != nil {
+ return nil, err
+ }
+ return OpenReader(bytes.NewReader(b), int64(len(b)))
+}
+
+// OpenReader take an io.Reader and return a populated XLSX file.
+func OpenReader(r io.ReaderAt, size int64) (*File, error) {
+ zr, err := zip.NewReader(r, size)
+ if err != nil {
+ return nil, err
+ }
+ file, sheetCount, err := ReadZipReader(zr)
+ if err != nil {
+ return nil, err
}
- file, sheetCount, _ = ReadZip(f)
return &File{
- checked: c,
+ checked: make(map[string]bool),
XLSX: file,
- Path: filename,
+ Path: "",
SheetCount: sheetCount,
}, nil
}