diff options
author | Ri Xu <xuri.me@gmail.com> | 2017-04-01 21:02:25 +0800 |
---|---|---|
committer | Ri Xu <xuri.me@gmail.com> | 2017-04-01 21:02:25 +0800 |
commit | b4ed9cc40fd78356ed62961be1450988dcd26e7e (patch) | |
tree | d3c1e64d7cb4d0080033c3cc943dcd622f55fce5 | |
parent | 8fd061b98f660f5b67380bda13a5424f3a8164c1 (diff) |
New function `GetSheetIndex()` added, relate issue #25;
Fix return index error in function `GetSheetMap()`;
Fix return worksheet name error in function `GetSheetName()`;
go test updated
-rw-r--r-- | excelize_test.go | 2 | ||||
-rw-r--r-- | sheet.go | 41 |
2 files changed, 37 insertions, 6 deletions
diff --git a/excelize_test.go b/excelize_test.go index 0d83c86..4139da0 100644 --- a/excelize_test.go +++ b/excelize_test.go @@ -72,6 +72,8 @@ func TestOpenFile(t *testing.T) { xlsx.GetCellValue("Sheet2", "E231") // Test get active sheet of XLSX and get sheet name of XLSX by given sheet index. xlsx.GetSheetName(xlsx.GetActiveSheetIndex()) + // Test get sheet index of XLSX by given worksheet name. + xlsx.GetSheetIndex("Sheet1") // Test get sheet name of XLSX by given invalid sheet index. xlsx.GetSheetName(4) // Test get sheet map of XLSX. @@ -256,18 +256,42 @@ func (f *File) SetSheetName(oldName, newName string) { } } -// GetSheetName provides function to get sheet name of XLSX by given sheet +// GetSheetName provides function to get sheet name of XLSX by given worksheet // index. If given sheet index is invalid, will return an empty string. func (f *File) GetSheetName(index int) string { content := f.workbookReader() - for _, v := range content.Sheets.Sheet { - if v.ID == "rId"+strconv.Itoa(index) { - return v.Name + rels := f.workbookRelsReader() + for _, rel := range rels.Relationships { + rID, _ := strconv.Atoi(strings.TrimSuffix(strings.TrimPrefix(rel.Target, "worksheets/sheet"), ".xml")) + if rID == index { + for _, v := range content.Sheets.Sheet { + if v.ID == rel.ID { + return v.Name + } + } } } return "" } +// GetSheetIndex provides function to get worksheet index of XLSX by given sheet +// name. If given sheet name is invalid, will return an integer type value 0. +func (f *File) GetSheetIndex(name string) int { + content := f.workbookReader() + rels := f.workbookRelsReader() + for _, v := range content.Sheets.Sheet { + if v.Name == name { + for _, rel := range rels.Relationships { + if v.ID == rel.ID { + rID, _ := strconv.Atoi(strings.TrimSuffix(strings.TrimPrefix(rel.Target, "worksheets/sheet"), ".xml")) + return rID + } + } + } + } + return 0 +} + // GetSheetMap provides function to get sheet map of XLSX. For example: // // xlsx, err := excelize.OpenFile("/tmp/Workbook.xlsx") @@ -281,10 +305,15 @@ func (f *File) GetSheetName(index int) string { // func (f *File) GetSheetMap() map[int]string { content := f.workbookReader() + rels := f.workbookRelsReader() sheetMap := map[int]string{} for _, v := range content.Sheets.Sheet { - id, _ := strconv.Atoi(strings.TrimPrefix(v.ID, "rId")) - sheetMap[id] = v.Name + for _, rel := range rels.Relationships { + if rel.ID == v.ID { + rID, _ := strconv.Atoi(strings.TrimSuffix(strings.TrimPrefix(rel.Target, "worksheets/sheet"), ".xml")) + sheetMap[rID] = v.Name + } + } } return sheetMap } |