|
|
@@ -243,11 +243,8 @@ func (f *File) GetActiveSheetIndex() int {
|
|
|
// name in the formula or reference associated with the cell. So there may be
|
|
|
// problem formula error or reference missing.
|
|
|
func (f *File) SetSheetName(oldName, newName string) {
|
|
|
- r := strings.NewReplacer(":", "", "\\", "", "/", "", "?", "", "*", "", "[", "", "]", "")
|
|
|
- newName = r.Replace(newName)
|
|
|
- if len(newName) > 31 {
|
|
|
- newName = newName[0:31]
|
|
|
- }
|
|
|
+ oldName = trimSheetName(oldName)
|
|
|
+ newName = trimSheetName(newName)
|
|
|
content := f.workbookReader()
|
|
|
for k, v := range content.Sheets.Sheet {
|
|
|
if v.Name == oldName {
|
|
|
@@ -438,3 +435,50 @@ func (f *File) copySheet(from, to int) {
|
|
|
f.XLSX[toRels] = f.XLSX[fromRels]
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+// HideSheet provides function to hide worksheet by given name. A workbook must
|
|
|
+// contain at least one visible worksheet. If the given worksheet has been
|
|
|
+// activated, this setting will be invalidated.
|
|
|
+func (f *File) HideSheet(name string) {
|
|
|
+ name = trimSheetName(name)
|
|
|
+ content := f.workbookReader()
|
|
|
+ count := 0
|
|
|
+ for _, v := range content.Sheets.Sheet {
|
|
|
+ if v.State != "hidden" {
|
|
|
+ count++
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for k, v := range content.Sheets.Sheet {
|
|
|
+ sheetIndex := k + 1
|
|
|
+ xlsx := f.workSheetReader("sheet" + strconv.Itoa(sheetIndex))
|
|
|
+ tabSelected := false
|
|
|
+ if len(xlsx.SheetViews.SheetView) > 0 {
|
|
|
+ tabSelected = xlsx.SheetViews.SheetView[0].TabSelected
|
|
|
+ }
|
|
|
+ if v.Name == name && count > 1 && !tabSelected {
|
|
|
+ content.Sheets.Sheet[k].State = "hidden"
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// UnhideSheet provides function to unhide worksheet by given name.
|
|
|
+func (f *File) UnhideSheet(name string) {
|
|
|
+ name = trimSheetName(name)
|
|
|
+ content := f.workbookReader()
|
|
|
+ for k, v := range content.Sheets.Sheet {
|
|
|
+ if v.Name == name {
|
|
|
+ content.Sheets.Sheet[k].State = ""
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// trimSheetName provides function to trim invaild characters by given worksheet
|
|
|
+// name.
|
|
|
+func trimSheetName(name string) string {
|
|
|
+ r := strings.NewReplacer(":", "", "\\", "", "/", "", "?", "", "*", "", "[", "", "]", "")
|
|
|
+ name = r.Replace(name)
|
|
|
+ if len(name) > 31 {
|
|
|
+ name = name[0:31]
|
|
|
+ }
|
|
|
+ return name
|
|
|
+}
|