Browse Source

add FileToSlice function

bronze1man 11 years ago
parent
commit
0330efcd64
2 changed files with 69 additions and 0 deletions
  1. 34 0
      FileToSlice.go
  2. 35 0
      FileToSlice_test.go

+ 34 - 0
FileToSlice.go

@@ -0,0 +1,34 @@
+package xlsx
+
+// get all raw data from excel
+// output index mean=> sheetIndex ,row ,cell ,value
+// not remove any cells
+func FileToSlice(path string) ([][][]string, error) {
+	f, err := OpenFile(path)
+	if err != nil {
+		return nil, err
+	}
+	return f.ToSlice()
+}
+
+// get all raw data from excel
+// output index mean=> sheetIndex ,row ,cell ,value
+// not remove any cells
+func (file *File) ToSlice() (output [][][]string, err error) {
+	output = [][][]string{}
+	for _, sheet := range file.Sheets {
+		s := [][]string{}
+		for _, row := range sheet.Rows {
+			if row == nil {
+				continue
+			}
+			r := []string{}
+			for _, cell := range row.Cells {
+				r = append(r, cell.String())
+			}
+			s = append(s, r)
+		}
+		output = append(output, s)
+	}
+	return output, nil
+}

+ 35 - 0
FileToSlice_test.go

@@ -0,0 +1,35 @@
+package xlsx
+
+import (
+	. "gopkg.in/check.v1"
+)
+
+type SliceReaderSuite struct{}
+
+var _ = Suite(&SliceReaderSuite{})
+
+func (s *SliceReaderSuite) TestFileToSlice(c *C) {
+	output, err := FileToSlice("testfile.xlsx")
+	c.Assert(err, IsNil)
+	fileToSliceCheckOutput(c, output)
+}
+
+func (s *SliceReaderSuite) TestFileObjToSlice(c *C) {
+	f, err := OpenFile("testfile.xlsx")
+	output, err := f.ToSlice()
+	c.Assert(err, IsNil)
+	fileToSliceCheckOutput(c, output)
+}
+
+func fileToSliceCheckOutput(c *C, output [][][]string) {
+	c.Assert(len(output), Equals, 3)
+	c.Assert(len(output[0]), Equals, 2)
+	c.Assert(len(output[0][0]), Equals, 2)
+	c.Assert(output[0][0][0], Equals, "Foo")
+	c.Assert(output[0][0][1], Equals, "Bar")
+	c.Assert(len(output[0][1]), Equals, 2)
+	c.Assert(output[0][1][0], Equals, "Baz")
+	c.Assert(output[0][1][1], Equals, "Quuk")
+	c.Assert(len(output[1]), Equals, 0)
+	c.Assert(len(output[2]), Equals, 0)
+}