Browse Source

- New functions `GetColVisible()` and `SetColVisible()` added, relate issue #61;
- go test updated;
- Fix typo

Ri Xu 8 years ago
parent
commit
9928bbc7c8
3 changed files with 74 additions and 1 deletions
  1. 53 0
      col.go
  2. 20 0
      excelize_test.go
  3. 1 1
      table.go

+ 53 - 0
col.go

@@ -13,6 +13,59 @@ const (
 	EMU                    int = 9525
 )
 
+// GetColVisible provides a function to get visible of a single column by given
+// worksheet index and column name. For example, get visible state of column D
+// in Sheet1:
+//
+//    xlsx.GetColVisible("Sheet1", "D")
+//
+func (f *File) GetColVisible(sheet, column string) bool {
+	xlsx := f.workSheetReader(sheet)
+	col := titleToNumber(strings.ToUpper(column)) + 1
+	visible := true
+	if xlsx.Cols == nil {
+		return visible
+	}
+	for _, c := range xlsx.Cols.Col {
+		if c.Min <= col && col <= c.Max {
+			visible = !c.Hidden
+		}
+	}
+	return visible
+}
+
+// SetColVisible provides a function to set visible of a single column by given
+// worksheet index and column name. For example, hide column D in Sheet1:
+//
+//    xlsx.SetColVisible("Sheet1", "D", false)
+//
+func (f *File) SetColVisible(sheet, column string, visible bool) {
+	xlsx := f.workSheetReader(sheet)
+	c := titleToNumber(strings.ToUpper(column)) + 1
+	col := xlsxCol{
+		Min:         c,
+		Max:         c,
+		Hidden:      !visible,
+		CustomWidth: true,
+	}
+	if xlsx.Cols == nil {
+		cols := xlsxCols{}
+		cols.Col = append(cols.Col, col)
+		xlsx.Cols = &cols
+		return
+	}
+	for _, v := range xlsx.Cols.Col {
+		if v.Min <= c && c <= v.Max {
+			col = v
+		}
+	}
+	col.Min = c
+	col.Max = c
+	col.Hidden = !visible
+	col.CustomWidth = true
+	xlsx.Cols.Col = append(xlsx.Cols.Col, col)
+}
+
 // SetColWidth provides function to set the width of a single column or multiple
 // columns. For example:
 //

+ 20 - 0
excelize_test.go

@@ -492,6 +492,26 @@ func TestRowVisibility(t *testing.T) {
 	}
 }
 
+func TestColumnVisibility(t *testing.T) {
+	xlsx, err := OpenFile("./test/Workbook_2.xlsx")
+	if err != nil {
+		t.Log(err)
+	}
+	xlsx.SetColVisible("Sheet1", "F", false)
+	xlsx.SetColVisible("Sheet1", "F", true)
+	xlsx.GetColVisible("Sheet1", "F")
+	xlsx.SetColVisible("Sheet3", "E", false)
+	err = xlsx.Save()
+	if err != nil {
+		t.Log(err)
+	}
+	xlsx, err = OpenFile("./test/Workbook_3.xlsx")
+	if err != nil {
+		t.Log(err)
+	}
+	xlsx.GetColVisible("Sheet1", "B")
+}
+
 func TestCopySheet(t *testing.T) {
 	xlsx, err := OpenFile("./test/Workbook_2.xlsx")
 	if err != nil {

+ 1 - 1
table.go

@@ -297,7 +297,7 @@ func (f *File) autoFilter(sheet, ref string, refRange, hxAxis int, formatSet *fo
 	return nil
 }
 
-// writeAutoFilter provides funtion to check for single or double custom filters
+// writeAutoFilter provides function to check for single or double custom filters
 // as default filters and handle them accordingly.
 func (f *File) writeAutoFilter(filter *xlsxAutoFilter, exp []int, tokens []string) {
 	if len(exp) == 1 && exp[0] == 2 {