Browse Source

Resolve #345, get comments by target reference

xuri 6 năm trước cách đây
mục cha
commit
c223815cfe
1 tập tin đã thay đổi với 15 bổ sung3 xóa
  1. 15 3
      comment.go

+ 15 - 3
comment.go

@@ -33,9 +33,7 @@ func parseFormatCommentsSet(formatSet string) (*formatComment, error) {
 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]
+		c, ok := f.XLSX["xl"+strings.TrimPrefix(f.getSheetComments(f.GetSheetIndex(n)), "..")]
 		if ok {
 			d := xlsxComments{}
 			xml.Unmarshal([]byte(c), &d)
@@ -58,6 +56,20 @@ func (f *File) GetComments() (comments map[string][]Comment) {
 	return
 }
 
+// getSheetComments provides the method to get the target comment reference by
+// given worksheet index.
+func (f *File) getSheetComments(sheetID int) string {
+	var rels = "xl/worksheets/_rels/sheet" + strconv.Itoa(sheetID) + ".xml.rels"
+	var sheetRels xlsxWorkbookRels
+	_ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML(rels)), &sheetRels)
+	for _, v := range sheetRels.Relationships {
+		if v.Type == SourceRelationshipComments {
+			return v.Target
+		}
+	}
+	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