summaryrefslogtreecommitdiff
path: root/comment.go
diff options
context:
space:
mode:
Diffstat (limited to 'comment.go')
-rw-r--r--comment.go79
1 files changed, 65 insertions, 14 deletions
diff --git a/comment.go b/comment.go
index b597da1..2bfd785 100644
--- a/comment.go
+++ b/comment.go
@@ -1,14 +1,24 @@
+// Copyright 2016 - 2018 The excelize Authors. All rights reserved. Use of
+// this source code is governed by a BSD-style license that can be found in
+// the LICENSE file.
+//
+// Package excelize providing a set of functions that allow you to write to
+// and read from XLSX files. Support reads and writes XLSX file generated by
+// Microsoft Excelâ„¢ 2007 and later. Support save file without losing original
+// charts of XLSX. This library needs Go version 1.8 or later.
+
package excelize
import (
"encoding/json"
"encoding/xml"
+ "fmt"
"strconv"
"strings"
)
-// parseFormatCommentsSet provides function to parse the format settings of the
-// comment with default value.
+// parseFormatCommentsSet provides a function to parse the format settings of
+// the comment with default value.
func parseFormatCommentsSet(formatSet string) (*formatComment, error) {
format := formatComment{
Author: "Author:",
@@ -18,6 +28,36 @@ func parseFormatCommentsSet(formatSet string) (*formatComment, error) {
return &format, err
}
+// GetComments retrieves all comments and returns a map of worksheet name to
+// the worksheet comments.
+func (f *File) GetComments() (comments map[string][]Comment) {
+ comments = map[string][]Comment{}
+ for n := range f.sheetMap {
+ commentID := f.GetSheetIndex(n)
+ commentsXML := "xl/comments" + strconv.Itoa(commentID) + ".xml"
+ c, ok := f.XLSX[commentsXML]
+ if ok {
+ d := xlsxComments{}
+ xml.Unmarshal([]byte(c), &d)
+ sheetComments := []Comment{}
+ for _, comment := range d.CommentList.Comment {
+ sheetComment := Comment{}
+ if comment.AuthorID < len(d.Authors) {
+ sheetComment.Author = d.Authors[comment.AuthorID].Author
+ }
+ sheetComment.Ref = comment.Ref
+ sheetComment.AuthorID = comment.AuthorID
+ for _, text := range comment.Text.R {
+ sheetComment.Text += text.T
+ }
+ sheetComments = append(sheetComments, sheetComment)
+ }
+ comments[n] = sheetComments
+ }
+ }
+ return
+}
+
// AddComment provides the method to add comment in a sheet by given worksheet
// index, cell and format set (such as author and text). Note that the max
// author length is 255 and the max text length is 32512. For example, add a
@@ -49,14 +89,23 @@ func (f *File) AddComment(sheet, cell, format string) error {
}
commentsXML := "xl/comments" + strconv.Itoa(commentID) + ".xml"
f.addComment(commentsXML, cell, formatSet)
- f.addDrawingVML(commentID, drawingVML, cell)
+ var colCount int
+ for i, l := range strings.Split(formatSet.Text, "\n") {
+ if ll := len(l); ll > colCount {
+ if i == 0 {
+ ll += len(formatSet.Author)
+ }
+ colCount = ll
+ }
+ }
+ f.addDrawingVML(commentID, drawingVML, cell, strings.Count(formatSet.Text, "\n")+1, colCount)
f.addContentTypePart(commentID, "comments")
return err
}
-// addDrawingVML provides function to create comment as
+// addDrawingVML provides a function to create comment as
// xl/drawings/vmlDrawing%d.vml by given commit ID and cell.
-func (f *File) addDrawingVML(commentID int, drawingVML, cell string) {
+func (f *File) addDrawingVML(commentID int, drawingVML, cell string, lineCount, colCount int) {
col := string(strings.Map(letterOnlyMapF, cell))
row, _ := strconv.Atoi(strings.Map(intOnlyMapF, cell))
xAxis := row - 1
@@ -83,7 +132,7 @@ func (f *File) addDrawingVML(commentID int, drawingVML, cell string) {
},
VPath: &vPath{
Gradientshapeok: "t",
- Connecttype: "rect",
+ Connecttype: "miter",
},
},
}
@@ -113,10 +162,12 @@ func (f *File) addDrawingVML(commentID int, drawingVML, cell string) {
},
ClientData: &xClientData{
ObjectType: "Note",
- Anchor: "3, 15, 8, 6, 4, 54, 13, 2",
- AutoFill: "False",
- Row: xAxis,
- Column: yAxis,
+ Anchor: fmt.Sprintf(
+ "%d, 23, %d, 0, %d, %d, %d, 5",
+ 1+yAxis, 1+xAxis, 2+yAxis+lineCount, colCount+yAxis, 2+xAxis+lineCount),
+ AutoFill: "True",
+ Row: xAxis,
+ Column: yAxis,
},
}
s, _ := xml.Marshal(sp)
@@ -149,8 +200,8 @@ func (f *File) addDrawingVML(commentID int, drawingVML, cell string) {
f.XLSX[drawingVML] = v
}
-// addComment provides function to create chart as xl/comments%d.xml by given
-// cell and format sets.
+// addComment provides a function to create chart as xl/comments%d.xml by
+// given cell and format sets.
func (f *File) addComment(commentsXML, cell string, formatSet *formatComment) {
a := formatSet.Author
t := formatSet.Text
@@ -209,8 +260,8 @@ func (f *File) addComment(commentsXML, cell string, formatSet *formatComment) {
f.saveFileList(commentsXML, v)
}
-// countComments provides function to get comments files count storage in the
-// folder xl.
+// countComments provides a function to get comments files count storage in
+// the folder xl.
func (f *File) countComments() int {
count := 0
for k := range f.XLSX {