Get sheet names based on index

SheetID only seems to indicate the file name for the sheet.
Check the sheets list based on index instead. Reordering sheets
in Excel changes the order they appear in that list.

Fixes #457
formula
Harris 6 years ago
parent d8df51098f
commit faaaa52cb8
No known key found for this signature in database
GPG Key ID: 0139BFA5D1B8F737

@ -317,14 +317,11 @@ func (f *File) SetSheetName(oldName, newName string) {
// string. // string.
func (f *File) GetSheetName(index int) string { func (f *File) GetSheetName(index int) string {
wb := f.workbookReader() wb := f.workbookReader()
if wb != nil { realIdx := index - 1 // sheets are 1 based index, but we're checking against an array
for _, sheet := range wb.Sheets.Sheet { if wb == nil || realIdx < 0 || realIdx >= len(wb.Sheets.Sheet) {
if sheet.SheetID == index { return ""
return sheet.Name
}
}
} }
return "" return wb.Sheets.Sheet[realIdx].Name
} }
// GetSheetIndex provides a function to get worksheet index of XLSX by given // GetSheetIndex provides a function to get worksheet index of XLSX by given
@ -357,8 +354,8 @@ func (f *File) GetSheetMap() map[int]string {
wb := f.workbookReader() wb := f.workbookReader()
sheetMap := map[int]string{} sheetMap := map[int]string{}
if wb != nil { if wb != nil {
for _, sheet := range wb.Sheets.Sheet { for i, sheet := range wb.Sheets.Sheet {
sheetMap[sheet.SheetID] = sheet.Name sheetMap[i+1] = sheet.Name
} }
} }
return sheetMap return sheetMap

@ -225,3 +225,24 @@ func TestUngroupSheets(t *testing.T) {
} }
assert.NoError(t, f.UngroupSheets()) assert.NoError(t, f.UngroupSheets())
} }
func TestGetSheetName(t *testing.T) {
f, _ := excelize.OpenFile(filepath.Join("test", "Book1.xlsx"))
assert.Equal(t, "Sheet1", f.GetSheetName(1))
assert.Equal(t, "Sheet2", f.GetSheetName(2))
assert.Equal(t, "", f.GetSheetName(0))
assert.Equal(t, "", f.GetSheetName(3))
}
func TestGetSheetMap(t *testing.T) {
expectedMap := map[int]string{
1: "Sheet1",
2: "Sheet2",
}
f, _ := excelize.OpenFile(filepath.Join("test", "Book1.xlsx"))
sheetMap := f.GetSheetMap()
for idx, name := range sheetMap {
assert.Equal(t, expectedMap[idx], name)
}
assert.Equal(t, len(sheetMap), 2)
}

Loading…
Cancel
Save