|  |  |  | @ -22,15 +22,6 @@ func parseFormatShapeSet(formatSet string) *formatShape { | 
			
		
	
		
			
				
					|  |  |  |  | 			XScale:           1.0, | 
			
		
	
		
			
				
					|  |  |  |  | 			YScale:           1.0, | 
			
		
	
		
			
				
					|  |  |  |  | 		}, | 
			
		
	
		
			
				
					|  |  |  |  | 		Font: formatFont{ | 
			
		
	
		
			
				
					|  |  |  |  | 			Bold:      false, | 
			
		
	
		
			
				
					|  |  |  |  | 			Italic:    false, | 
			
		
	
		
			
				
					|  |  |  |  | 			Underline: "none", | 
			
		
	
		
			
				
					|  |  |  |  | 			Family:    "Calibri", | 
			
		
	
		
			
				
					|  |  |  |  | 			Size:      11, | 
			
		
	
		
			
				
					|  |  |  |  | 			Color:     "#000000", | 
			
		
	
		
			
				
					|  |  |  |  | 		}, | 
			
		
	
		
			
				
					|  |  |  |  | 		Text: " ", | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 	json.Unmarshal([]byte(formatSet), &format) | 
			
		
	
		
			
				
					|  |  |  |  | 	return &format | 
			
		
	
	
		
			
				
					|  |  |  | @ -41,7 +32,7 @@ func parseFormatShapeSet(formatSet string) *formatShape { | 
			
		
	
		
			
				
					|  |  |  |  | // print settings) and properties set. For example, add text box (rect shape) in
 | 
			
		
	
		
			
				
					|  |  |  |  | // Sheet1:
 | 
			
		
	
		
			
				
					|  |  |  |  | //
 | 
			
		
	
		
			
				
					|  |  |  |  | //    xlsx.AddShape("Sheet1", "G6", `{"type":"rect", "text":"Rectangle Shape", "color":{"line":"#4286F4","fill":"#8eb9ff"}, "font":{"bold":true,"italic":true,"family":"Berlin Sans FB Demi","size":36,"color":"#777777","underline":"sng"}, "width": 180, "height": 90}`)
 | 
			
		
	
		
			
				
					|  |  |  |  | //    xlsx.AddShape("Sheet1", "G6", `{"type":"rect","color":{"line":"#4286F4","fill":"#8eb9ff"},"paragraph":[{"text":"Rectangle Shape","font":{"bold":true,"italic":true,"family":"Berlin Sans FB Demi","size":36,"color":"#777777","underline":"sng"}}],"width":180,"height": 90}`)
 | 
			
		
	
		
			
				
					|  |  |  |  | //
 | 
			
		
	
		
			
				
					|  |  |  |  | // The following shows the type of chart supported by excelize:
 | 
			
		
	
		
			
				
					|  |  |  |  | //
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -281,11 +272,6 @@ func (f *File) AddShape(sheet, cell, format string) { | 
			
		
	
		
			
				
					|  |  |  |  | // drawingXMLand format sets.
 | 
			
		
	
		
			
				
					|  |  |  |  | func (f *File) addDrawingShape(sheet, drawingXML, cell string, formatSet *formatShape) { | 
			
		
	
		
			
				
					|  |  |  |  | 	textUnderlineType := map[string]bool{"none": true, "words": true, "sng": true, "dbl": true, "heavy": true, "dotted": true, "dottedHeavy": true, "dash": true, "dashHeavy": true, "dashLong": true, "dashLongHeavy": true, "dotDash": true, "dotDashHeavy": true, "dotDotDash": true, "dotDotDashHeavy": true, "wavy": true, "wavyHeavy": true, "wavyDbl": true} | 
			
		
	
		
			
				
					|  |  |  |  | 	u := formatSet.Font.Underline | 
			
		
	
		
			
				
					|  |  |  |  | 	_, ok := textUnderlineType[u] | 
			
		
	
		
			
				
					|  |  |  |  | 	if !ok { | 
			
		
	
		
			
				
					|  |  |  |  | 		u = "none" | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 	cell = strings.ToUpper(cell) | 
			
		
	
		
			
				
					|  |  |  |  | 	fromCol := string(strings.Map(letterOnlyMapF, cell)) | 
			
		
	
		
			
				
					|  |  |  |  | 	fromRow, _ := strconv.Atoi(strings.Map(intOnlyMapF, cell)) | 
			
		
	
	
		
			
				
					|  |  |  | @ -346,29 +332,56 @@ func (f *File) addDrawingShape(sheet, drawingXML, cell string, formatSet *format | 
			
		
	
		
			
				
					|  |  |  |  | 				RtlCol:       false, | 
			
		
	
		
			
				
					|  |  |  |  | 				Anchor:       "t", | 
			
		
	
		
			
				
					|  |  |  |  | 			}, | 
			
		
	
		
			
				
					|  |  |  |  | 			P: &aP{ | 
			
		
	
		
			
				
					|  |  |  |  | 				R: &aR{ | 
			
		
	
		
			
				
					|  |  |  |  | 					RPr: aRPr{ | 
			
		
	
		
			
				
					|  |  |  |  | 						I:       formatSet.Font.Italic, | 
			
		
	
		
			
				
					|  |  |  |  | 						B:       formatSet.Font.Bold, | 
			
		
	
		
			
				
					|  |  |  |  | 						Lang:    "en-US", | 
			
		
	
		
			
				
					|  |  |  |  | 						AltLang: "en-US", | 
			
		
	
		
			
				
					|  |  |  |  | 						U:       u, | 
			
		
	
		
			
				
					|  |  |  |  | 						Sz:      formatSet.Font.Size * 100, | 
			
		
	
		
			
				
					|  |  |  |  | 						Latin:   &aLatin{Typeface: formatSet.Font.Family}, | 
			
		
	
		
			
				
					|  |  |  |  | 						SolidFill: &aSolidFill{ | 
			
		
	
		
			
				
					|  |  |  |  | 							SrgbClr: &attrValString{ | 
			
		
	
		
			
				
					|  |  |  |  | 								Val: strings.Replace(strings.ToUpper(formatSet.Font.Color), "#", "", -1), | 
			
		
	
		
			
				
					|  |  |  |  | 							}, | 
			
		
	
		
			
				
					|  |  |  |  | 		}, | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 	if len(formatSet.Paragraph) < 1 { | 
			
		
	
		
			
				
					|  |  |  |  | 		formatSet.Paragraph = []formatShapeParagraph{ | 
			
		
	
		
			
				
					|  |  |  |  | 			{ | 
			
		
	
		
			
				
					|  |  |  |  | 				Font: formatFont{ | 
			
		
	
		
			
				
					|  |  |  |  | 					Bold:      false, | 
			
		
	
		
			
				
					|  |  |  |  | 					Italic:    false, | 
			
		
	
		
			
				
					|  |  |  |  | 					Underline: "none", | 
			
		
	
		
			
				
					|  |  |  |  | 					Family:    "Calibri", | 
			
		
	
		
			
				
					|  |  |  |  | 					Size:      11, | 
			
		
	
		
			
				
					|  |  |  |  | 					Color:     "#000000", | 
			
		
	
		
			
				
					|  |  |  |  | 				}, | 
			
		
	
		
			
				
					|  |  |  |  | 				Text: " ", | 
			
		
	
		
			
				
					|  |  |  |  | 			}, | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 	for _, p := range formatSet.Paragraph { | 
			
		
	
		
			
				
					|  |  |  |  | 		u := p.Font.Underline | 
			
		
	
		
			
				
					|  |  |  |  | 		_, ok := textUnderlineType[u] | 
			
		
	
		
			
				
					|  |  |  |  | 		if !ok { | 
			
		
	
		
			
				
					|  |  |  |  | 			u = "none" | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		text := p.Text | 
			
		
	
		
			
				
					|  |  |  |  | 		if text == "" { | 
			
		
	
		
			
				
					|  |  |  |  | 			text = " " | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		paragraph := &aP{ | 
			
		
	
		
			
				
					|  |  |  |  | 			R: &aR{ | 
			
		
	
		
			
				
					|  |  |  |  | 				RPr: aRPr{ | 
			
		
	
		
			
				
					|  |  |  |  | 					I:       p.Font.Italic, | 
			
		
	
		
			
				
					|  |  |  |  | 					B:       p.Font.Bold, | 
			
		
	
		
			
				
					|  |  |  |  | 					Lang:    "en-US", | 
			
		
	
		
			
				
					|  |  |  |  | 					AltLang: "en-US", | 
			
		
	
		
			
				
					|  |  |  |  | 					U:       u, | 
			
		
	
		
			
				
					|  |  |  |  | 					Sz:      p.Font.Size * 100, | 
			
		
	
		
			
				
					|  |  |  |  | 					Latin:   &aLatin{Typeface: p.Font.Family}, | 
			
		
	
		
			
				
					|  |  |  |  | 					SolidFill: &aSolidFill{ | 
			
		
	
		
			
				
					|  |  |  |  | 						SrgbClr: &attrValString{ | 
			
		
	
		
			
				
					|  |  |  |  | 							Val: strings.Replace(strings.ToUpper(p.Font.Color), "#", "", -1), | 
			
		
	
		
			
				
					|  |  |  |  | 						}, | 
			
		
	
		
			
				
					|  |  |  |  | 					}, | 
			
		
	
		
			
				
					|  |  |  |  | 					T: formatSet.Text, | 
			
		
	
		
			
				
					|  |  |  |  | 				}, | 
			
		
	
		
			
				
					|  |  |  |  | 				EndParaRPr: &aEndParaRPr{ | 
			
		
	
		
			
				
					|  |  |  |  | 					Lang: "en-US", | 
			
		
	
		
			
				
					|  |  |  |  | 				}, | 
			
		
	
		
			
				
					|  |  |  |  | 				T: text, | 
			
		
	
		
			
				
					|  |  |  |  | 			}, | 
			
		
	
		
			
				
					|  |  |  |  | 		}, | 
			
		
	
		
			
				
					|  |  |  |  | 			EndParaRPr: &aEndParaRPr{ | 
			
		
	
		
			
				
					|  |  |  |  | 				Lang: "en-US", | 
			
		
	
		
			
				
					|  |  |  |  | 			}, | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		shape.TxBody.P = append(shape.TxBody.P, paragraph) | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 	twoCellAnchor.Sp = &shape | 
			
		
	
		
			
				
					|  |  |  |  | 	twoCellAnchor.ClientData = &xdrClientData{ | 
			
		
	
	
		
			
				
					|  |  |  | 
 |