summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRi Xu <xuri.me@gmail.com>2017-04-01 21:02:25 +0800
committerRi Xu <xuri.me@gmail.com>2017-04-01 21:02:25 +0800
commitb4ed9cc40fd78356ed62961be1450988dcd26e7e (patch)
treed3c1e64d7cb4d0080033c3cc943dcd622f55fce5
parent8fd061b98f660f5b67380bda13a5424f3a8164c1 (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.go2
-rw-r--r--sheet.go41
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.
diff --git a/sheet.go b/sheet.go
index 0c16295..dba7fa8 100644
--- a/sheet.go
+++ b/sheet.go
@@ -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
}