From 924140c87d166a1f54c455031501eb5ce83df74e Mon Sep 17 00:00:00 2001 From: Todd Date: Thu, 7 Sep 2017 17:13:03 -0500 Subject: [PATCH] spreadsheet: add support for merged cells --- README.md | 1 + _examples/spreadsheet/merged/main.go | 35 +++++++++++++++++ _examples/spreadsheet/merged/merged.xlsx | Bin 0 -> 4175 bytes spreadsheet/cell.go | 25 ++++++++++++ spreadsheet/mergedcell.go | 48 +++++++++++++++++++++++ spreadsheet/sheet.go | 43 ++++++++++++++++++++ spreadsheet/sheet_test.go | 31 +++++++++++++++ 7 files changed, 183 insertions(+) create mode 100644 _examples/spreadsheet/merged/main.go create mode 100644 _examples/spreadsheet/merged/merged.xlsx create mode 100644 spreadsheet/mergedcell.go diff --git a/README.md b/README.md index b8a1f5ee..770bed30 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ and .pptx). - [Bar Chart](https://github.com/baliance/gooxml/tree/master/_examples/spreadsheet/bar-chart) Bar Charts - [Mutiple Charts](https://github.com/baliance/gooxml/tree/master/_examples/spreadsheet/multiple-charts) Multiple charts on a single sheet - [Named Cell Ranges](https://github.com/baliance/gooxml/tree/master/_examples/spreadsheet/named-ranges) Naming cell ranges +- [Merged Cells](https://github.com/baliance/gooxml/tree/master/_examples/spreadsheet/merged) Merge and unmerge cells. ## Raw Types ## diff --git a/_examples/spreadsheet/merged/main.go b/_examples/spreadsheet/merged/main.go new file mode 100644 index 00000000..ab3f3821 --- /dev/null +++ b/_examples/spreadsheet/merged/main.go @@ -0,0 +1,35 @@ +// Copyright 2017 Baliance. All rights reserved. +package main + +import ( + "fmt" + "log" + + "baliance.com/gooxml/spreadsheet" + + sml "baliance.com/gooxml/schema/schemas.openxmlformats.org/spreadsheetml" +) + +func main() { + ss := spreadsheet.New() + sheet := ss.AddSheet() + + sheet.Cell("A1").SetString("Hello World!") + sheet.Cell("B1").SetString("will not be visible") // as it's not the first cell within a merged range Excel warns you when you do this through the UI + sheet.AddMergedCells("A1", "C2") + + centered := ss.StyleSheet.AddCellStyle() + centered.SetHorizontalAlignment(sml.ST_HorizontalAlignmentCenter) + centered.SetVerticalAlignment(sml.ST_VerticalAlignmentCenter) + sheet.Cell("A1").SetStyle(centered) + + for _, m := range sheet.MergedCells() { + fmt.Println("merged region", m.Reference(), "has contents", m.Cell().GetString()) + } + + if err := ss.Validate(); err != nil { + log.Fatalf("error validating sheet: %s", err) + } + + ss.SaveToFile("merged.xlsx") +} diff --git a/_examples/spreadsheet/merged/merged.xlsx b/_examples/spreadsheet/merged/merged.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..aeb4e7c0690732ca6b0e1bf0a485ad58fda95688 GIT binary patch literal 4175 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 sdqB5;qN5CYbce&KM&gD8n