|
|
@@ -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
|
|
|
}
|