Skip to content

Commit

Permalink
Add GetMergeCells
Browse files Browse the repository at this point in the history
  • Loading branch information
sairoutine committed Dec 19, 2018
1 parent ce5b37a commit 3012df0
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 0 deletions.
40 changes: 40 additions & 0 deletions excelize.go
Original file line number Diff line number Diff line change
Expand Up @@ -401,3 +401,43 @@ func (f *File) adjustAutoFilterHelper(xlsx *xlsxWorksheet, column, rowIndex, off
}
}
}

// GetMergeCells provides a function to get all merged cells from a worksheet currently.
func (f *File) GetMergeCells(sheet string) []MergeCell {
mergeCells := []MergeCell{}

xlsx := f.workSheetReader(sheet)
if xlsx.MergeCells != nil {
for i := 0; i < len(xlsx.MergeCells.Cells); i++ {
ref := xlsx.MergeCells.Cells[i].Ref
axis := strings.Split(ref, ":")[0]
mergeCells = append(mergeCells, []string{ref, f.GetCellValue(sheet, axis)})
}
}

return mergeCells
}

// MergeCell define a merged cell data.
// It consists of the following structure.
// example: []string{"D4:E10", "cell value"}
type MergeCell []string

// GetCellValue returns merged cell value.
func (m *MergeCell) GetCellValue() string {
return (*m)[1]
}

// GetStartAxis returns the merge start axis.
// example: "C2"
func (m *MergeCell) GetStartAxis() string {
axis := strings.Split((*m)[0], ":")
return axis[0]
}

// GetEndAxis returns the merge end axis.
// example: "D4"
func (m *MergeCell) GetEndAxis() string {
axis := strings.Split((*m)[0], ":")
return axis[1]
}
53 changes: 53 additions & 0 deletions excelize_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,59 @@ func TestMergeCell(t *testing.T) {
}
}

func TestGetMergeCells(t *testing.T) {
wants := []struct {
value string
start string
end string
}{
{
value: "A1",
start: "A1",
end: "B1",
},
{
value: "A2",
start: "A2",
end: "A3",
},
{
value: "A4",
start: "A4",
end: "B5",
},
{
value: "A7",
start: "A7",
end: "C10",
},
}

xlsx, err := OpenFile("./test/MergeCell.xlsx")
if err != nil {
t.Error(err)
}

mergeCells := xlsx.GetMergeCells("Sheet1")
if len(mergeCells) != len(wants) {
t.Fatalf("Expected count of merge cells %d, but got %d\n", len(wants), len(mergeCells))
}

for i, m := range mergeCells {
if wants[i].value != m.GetCellValue() {
t.Fatalf("Expected merged cell value %s, but got %s\n", wants[i].value, m.GetCellValue())
}

if wants[i].start != m.GetStartAxis() {
t.Fatalf("Expected merged cell value %s, but got %s\n", wants[i].start, m.GetStartAxis())
}

if wants[i].end != m.GetEndAxis() {
t.Fatalf("Expected merged cell value %s, but got %s\n", wants[i].end, m.GetEndAxis())
}
}
}

func TestSetCellStyleAlignment(t *testing.T) {
xlsx, err := OpenFile("./test/Book2.xlsx")
if err != nil {
Expand Down
Binary file added test/MergeCell.xlsx
Binary file not shown.

0 comments on commit 3012df0

Please sign in to comment.