Browse Source

Make AddSheet return error when trying to use a duplicate name. Fixes #148.

Geoffrey J. Teale 10 years ago
parent
commit
ade07d4004
6 changed files with 39 additions and 24 deletions
  1. 2 2
      cell_test.go
  2. 5 2
      file.go
  3. 18 6
      file_test.go
  4. 1 1
      row_test.go
  5. 11 11
      sheet_test.go
  6. 2 2
      write_test.go

+ 2 - 2
cell_test.go

@@ -35,7 +35,7 @@ func (s *CellSuite) TestGetStyleWithFonts(c *C) {
 // Test that SetStyle correctly translates into a xlsxFont element
 func (s *CellSuite) TestSetStyleWithFonts(c *C) {
 	file := NewFile()
-	sheet := file.AddSheet("Test")
+	sheet, _ := file.AddSheet("Test")
 	row := sheet.AddRow()
 	cell := row.AddCell()
 	font := NewFont(12, "Calibra")
@@ -64,7 +64,7 @@ func (s *CellSuite) TestGetStyleWithFills(c *C) {
 // Test that SetStyle correctly updates xlsxStyle.Fills.
 func (s *CellSuite) TestSetStyleWithFills(c *C) {
 	file := NewFile()
-	sheet := file.AddSheet("Test")
+	sheet, _ := file.AddSheet("Test")
 	row := sheet.AddRow()
 	cell := row.AddCell()
 	fill := NewFill("solid", "00FF0000", "FF000000")

+ 5 - 2
file.go

@@ -132,14 +132,17 @@ func (f *File) Write(writer io.Writer) (err error) {
 }
 
 // Add a new Sheet, with the provided name, to a File
-func (f *File) AddSheet(sheetName string) (sheet *Sheet) {
+func (f *File) AddSheet(sheetName string) (sheet *Sheet, err error) {
+	if _, exists := f.Sheet[sheetName]; exists {
+		return nil, fmt.Errorf("Duplicate sheet name '%s'.", sheetName)
+	}
 	sheet = &Sheet{Name: sheetName, File: f}
 	if len(f.Sheets) == 0 {
 		sheet.Selected = true
 	}
 	f.Sheet[sheetName] = sheet
 	f.Sheets = append(f.Sheets, sheet)
-	return sheet
+	return sheet, nil
 }
 
 func (f *File) makeWorkbook() xlsxWorkbook {

+ 18 - 6
file_test.go

@@ -215,18 +215,30 @@ func (l *FileSuite) TestAddSheet(c *C) {
 	var f *File
 
 	f = NewFile()
-	sheet := f.AddSheet("MySheet")
+	sheet, err := f.AddSheet("MySheet")
+	c.Assert(err, IsNil)
 	c.Assert(sheet, NotNil)
 	c.Assert(len(f.Sheets), Equals, 1)
 	c.Assert(f.Sheet["MySheet"], Equals, sheet)
 }
 
+// Test that AddSheet returns an error if you try to add two sheets with the same name
+func (l *FileSuite) TestAddSheetWithDuplicateName(c *C) {
+	var f *File
+
+	f = NewFile()
+	_, err := f.AddSheet("MySheet")
+	c.Assert(err, IsNil)
+	_, err = f.AddSheet("MySheet")
+	c.Assert(err, ErrorMatches, "Duplicate sheet name 'MySheet'.")
+}
+
 // Test that we can get the Nth sheet
 func (l *FileSuite) TestNthSheet(c *C) {
 	var f *File
 
 	f = NewFile()
-	sheet := f.AddSheet("MySheet")
+	sheet, _ := f.AddSheet("MySheet")
 	sheetByIndex := f.Sheets[0]
 	sheetByName := f.Sheet["MySheet"]
 	c.Assert(sheetByIndex, NotNil)
@@ -268,11 +280,11 @@ func (l *FileSuite) TestMarshalWorkbook(c *C) {
 func (l *FileSuite) TestMarshalFile(c *C) {
 	var f *File
 	f = NewFile()
-	sheet1 := f.AddSheet("MySheet")
+	sheet1, _ := f.AddSheet("MySheet")
 	row1 := sheet1.AddRow()
 	cell1 := row1.AddCell()
 	cell1.SetString("A cell!")
-	sheet2 := f.AddSheet("AnotherSheet")
+	sheet2, _ := f.AddSheet("AnotherSheet")
 	row2 := sheet2.AddRow()
 	cell2 := row2.AddCell()
 	cell2.SetString("A cell!")
@@ -669,11 +681,11 @@ func (l *FileSuite) TestSaveFile(c *C) {
 	var tmpPath string = c.MkDir()
 	var f *File
 	f = NewFile()
-	sheet1 := f.AddSheet("MySheet")
+	sheet1, _ := f.AddSheet("MySheet")
 	row1 := sheet1.AddRow()
 	cell1 := row1.AddCell()
 	cell1.Value = "A cell!"
-	sheet2 := f.AddSheet("AnotherSheet")
+	sheet2, _ := f.AddSheet("AnotherSheet")
 	row2 := sheet2.AddRow()
 	cell2 := row2.AddCell()
 	cell2.Value = "A cell!"

+ 1 - 1
row_test.go

@@ -12,7 +12,7 @@ var _ = Suite(&RowSuite{})
 func (r *RowSuite) TestAddCell(c *C) {
 	var f *File
 	f = NewFile()
-	sheet := f.AddSheet("MySheet")
+	sheet, _ := f.AddSheet("MySheet")
 	row := sheet.AddRow()
 	cell := row.AddCell()
 	c.Assert(cell, NotNil)

+ 11 - 11
sheet_test.go

@@ -15,7 +15,7 @@ var _ = Suite(&SheetSuite{})
 func (s *SheetSuite) TestAddRow(c *C) {
 	var f *File
 	f = NewFile()
-	sheet := f.AddSheet("MySheet")
+	sheet, _ := f.AddSheet("MySheet")
 	row := sheet.AddRow()
 	c.Assert(row, NotNil)
 	c.Assert(len(sheet.Rows), Equals, 1)
@@ -23,7 +23,7 @@ func (s *SheetSuite) TestAddRow(c *C) {
 
 func (s *SheetSuite) TestMakeXLSXSheetFromRows(c *C) {
 	file := NewFile()
-	sheet := file.AddSheet("Sheet1")
+	sheet, _ := file.AddSheet("Sheet1")
 	row := sheet.AddRow()
 	cell := row.AddCell()
 	cell.Value = "A cell!"
@@ -52,7 +52,7 @@ func (s *SheetSuite) TestMakeXLSXSheetFromRows(c *C) {
 // Test if the NumFmts assigned properly according the FormatCode in cell.
 func (s *SheetSuite) TestMakeXLSXSheetWithNumFormats(c *C) {
 	file := NewFile()
-	sheet := file.AddSheet("Sheet1")
+	sheet, _ := file.AddSheet("Sheet1")
 	row := sheet.AddRow()
 
 	cell1 := row.AddCell()
@@ -100,7 +100,7 @@ func (s *SheetSuite) TestMakeXLSXSheetWithNumFormats(c *C) {
 // with style information.
 func (s *SheetSuite) TestMakeXLSXSheetAlsoPopulatesXLSXSTyles(c *C) {
 	file := NewFile()
-	sheet := file.AddSheet("Sheet1")
+	sheet, _ := file.AddSheet("Sheet1")
 	row := sheet.AddRow()
 
 	cell1 := row.AddCell()
@@ -161,7 +161,7 @@ func (s *SheetSuite) TestMakeXLSXSheetAlsoPopulatesXLSXSTyles(c *C) {
 // If the column width is not customised, the xslxCol.CustomWidth field is set to 0.
 func (s *SheetSuite) TestMakeXLSXSheetDefaultsCustomColWidth(c *C) {
 	file := NewFile()
-	sheet := file.AddSheet("Sheet1")
+	sheet, _ := file.AddSheet("Sheet1")
 	row := sheet.AddRow()
 	cell1 := row.AddCell()
 	cell1.Value = "A cell!"
@@ -175,7 +175,7 @@ func (s *SheetSuite) TestMakeXLSXSheetDefaultsCustomColWidth(c *C) {
 // If the column width is customised, the xslxCol.CustomWidth field is set to 1.
 func (s *SheetSuite) TestMakeXLSXSheetSetsCustomColWidth(c *C) {
 	file := NewFile()
-	sheet := file.AddSheet("Sheet1")
+	sheet, _ := file.AddSheet("Sheet1")
 	err := sheet.SetColWidth(0, 0, 10.5)
 	c.Assert(err, IsNil)
 
@@ -187,7 +187,7 @@ func (s *SheetSuite) TestMakeXLSXSheetSetsCustomColWidth(c *C) {
 
 func (s *SheetSuite) TestMarshalSheet(c *C) {
 	file := NewFile()
-	sheet := file.AddSheet("Sheet1")
+	sheet, _ := file.AddSheet("Sheet1")
 	row := sheet.AddRow()
 	cell := row.AddCell()
 	cell.Value = "A cell!"
@@ -208,7 +208,7 @@ func (s *SheetSuite) TestMarshalSheet(c *C) {
 
 func (s *SheetSuite) TestMarshalSheetWithMultipleCells(c *C) {
 	file := NewFile()
-	sheet := file.AddSheet("Sheet1")
+	sheet, _ := file.AddSheet("Sheet1")
 	row := sheet.AddRow()
 	cell := row.AddCell()
 	cell.Value = "A cell (with value 1)!"
@@ -231,7 +231,7 @@ func (s *SheetSuite) TestMarshalSheetWithMultipleCells(c *C) {
 
 func (s *SheetSuite) TestSetColWidth(c *C) {
 	file := NewFile()
-	sheet := file.AddSheet("Sheet1")
+	sheet, _ := file.AddSheet("Sheet1")
 	_ = sheet.SetColWidth(0, 0, 10.5)
 	_ = sheet.SetColWidth(1, 5, 11)
 
@@ -245,7 +245,7 @@ func (s *SheetSuite) TestSetColWidth(c *C) {
 
 func (s *SheetSuite) TestSetRowHeightCM(c *C) {
 	file := NewFile()
-	sheet := file.AddSheet("Sheet1")
+	sheet, _ := file.AddSheet("Sheet1")
 	row := sheet.AddRow()
 	row.SetHeightCM(1.5)
 	c.Assert(row.Height, Equals, 42.51968505)
@@ -257,7 +257,7 @@ func (s *SheetSuite) TestAlignment(c *C) {
 	rightalign := Alignment{Horizontal: "right"}
 
 	file := NewFile()
-	sheet := file.AddSheet("Sheet1")
+	sheet, _ := file.AddSheet("Sheet1")
 
 	style := NewStyle()
 

+ 2 - 2
write_test.go

@@ -12,7 +12,7 @@ var _ = Suite(&WriteSuite{})
 func (r *RowSuite) TestWriteStruct(c *C) {
 	var f *File
 	f = NewFile()
-	sheet := f.AddSheet("Test1")
+	sheet, _ := f.AddSheet("Test1")
 	row := sheet.AddRow()
 	type e struct {
 		FirstName string
@@ -47,7 +47,7 @@ func (r *RowSuite) TestWriteStruct(c *C) {
 func (r *RowSuite) TestWriteSlice(c *C) {
 	var f *File
 	f = NewFile()
-	sheet := f.AddSheet("Test1")
+	sheet, _ := f.AddSheet("Test1")
 
 	type strA []string
 	type intA []int