summaryrefslogtreecommitdiff
path: root/stream.go
diff options
context:
space:
mode:
Diffstat (limited to 'stream.go')
-rw-r--r--stream.go34
1 files changed, 27 insertions, 7 deletions
diff --git a/stream.go b/stream.go
index b0e5b53..fdada74 100644
--- a/stream.go
+++ b/stream.go
@@ -26,12 +26,14 @@ import (
// StreamWriter defined the type of stream writer.
type StreamWriter struct {
- File *File
- Sheet string
- SheetID int
- worksheet *xlsxWorksheet
- rawData bufferedWriter
- tableParts string
+ File *File
+ Sheet string
+ SheetID int
+ worksheet *xlsxWorksheet
+ rawData bufferedWriter
+ mergeCellsCount int
+ mergeCells string
+ tableParts string
}
// NewStreamWriter return stream writer struct by given worksheet name for
@@ -322,6 +324,19 @@ func (sw *StreamWriter) SetRow(axis string, values []interface{}) error {
return sw.rawData.Sync()
}
+// MergeCell provides a function to merge cells by a given coordinate area for
+// the StreamWriter. Don't create a merged cell that overlaps with another
+// existing merged cell.
+func (sw *StreamWriter) MergeCell(hcell, vcell string) error {
+ _, err := areaRangeToCoordinates(hcell, vcell)
+ if err != nil {
+ return err
+ }
+ sw.mergeCellsCount++
+ sw.mergeCells += fmt.Sprintf(`<mergeCell ref="%s:%s"/>`, hcell, vcell)
+ return nil
+}
+
// setCellFormula provides a function to set formula of a cell.
func setCellFormula(c *xlsxC, formula string) {
if formula != "" {
@@ -413,7 +428,12 @@ func writeCell(buf *bufferedWriter, c xlsxC) {
// Flush ending the streaming writing process.
func (sw *StreamWriter) Flush() error {
_, _ = sw.rawData.WriteString(`</sheetData>`)
- bulkAppendFields(&sw.rawData, sw.worksheet, 8, 38)
+ bulkAppendFields(&sw.rawData, sw.worksheet, 8, 15)
+ if sw.mergeCellsCount > 0 {
+ sw.mergeCells = fmt.Sprintf(`<mergeCells count="%d">%s</mergeCells>`, sw.mergeCellsCount, sw.mergeCells)
+ }
+ _, _ = sw.rawData.WriteString(sw.mergeCells)
+ bulkAppendFields(&sw.rawData, sw.worksheet, 17, 38)
_, _ = sw.rawData.WriteString(sw.tableParts)
bulkAppendFields(&sw.rawData, sw.worksheet, 40, 40)
_, _ = sw.rawData.WriteString(`</worksheet>`)