Fix missing `oneCellAnchor` element after add picture in some cases.

formula
Ri Xu 8 years ago
parent 1e340aea40
commit 109d8adae3

@ -212,14 +212,20 @@ func (f *File) addDrawing(sheet, drawingXML, cell, file string, width, height, r
decodeWsDr := decodeWsDr{} decodeWsDr := decodeWsDr{}
xml.Unmarshal([]byte(f.readXML(drawingXML)), &decodeWsDr) xml.Unmarshal([]byte(f.readXML(drawingXML)), &decodeWsDr)
cNvPrID = len(decodeWsDr.TwoCellAnchor) + 1 cNvPrID = len(decodeWsDr.TwoCellAnchor) + 1
for _, v := range decodeWsDr.OneCellAnchor {
content.WsDr.OneCellAnchor = append(content.WsDr.OneCellAnchor, &xlsxCellAnchor{
EditAs: v.EditAs,
GraphicFrame: v.Content,
})
}
for _, v := range decodeWsDr.TwoCellAnchor { for _, v := range decodeWsDr.TwoCellAnchor {
content.WsDr.TwoCellAnchor = append(content.WsDr.TwoCellAnchor, &xlsxTwoCellAnchor{ content.WsDr.TwoCellAnchor = append(content.WsDr.TwoCellAnchor, &xlsxCellAnchor{
EditAs: v.EditAs, EditAs: v.EditAs,
GraphicFrame: v.Content, GraphicFrame: v.Content,
}) })
} }
} }
twoCellAnchor := xlsxTwoCellAnchor{} twoCellAnchor := xlsxCellAnchor{}
twoCellAnchor.EditAs = "oneCell" twoCellAnchor.EditAs = "oneCell"
from := xlsxFrom{} from := xlsxFrom{}
from.Col = colStart from.Col = colStart

File diff suppressed because one or more lines are too long

@ -2,11 +2,11 @@ package excelize
import "encoding/xml" import "encoding/xml"
// decodeTwoCellAnchor directly maps the twoCellAnchor (Two Cell Anchor Shape // decodeCellAnchor directly maps the oneCellAnchor (One Cell Anchor Shape Size)
// Size). This element specifies a two cell anchor placeholder for a group, a // and twoCellAnchor (Two Cell Anchor Shape Size). This element specifies a two
// shape, or a drawing element. It moves with cells and its extents are in EMU // cell anchor placeholder for a group, a shape, or a drawing element. It moves
// units. // with cells and its extents are in EMU units.
type decodeTwoCellAnchor struct { type decodeCellAnchor struct {
EditAs string `xml:"editAs,attr,omitempty"` EditAs string `xml:"editAs,attr,omitempty"`
Content string `xml:",innerxml"` Content string `xml:",innerxml"`
} }
@ -16,8 +16,9 @@ type decodeTwoCellAnchor struct {
// after serialization and deserialization, two different structures are // after serialization and deserialization, two different structures are
// defined. decodeWsDr just for deserialization. // defined. decodeWsDr just for deserialization.
type decodeWsDr struct { type decodeWsDr struct {
A string `xml:"xmlns a,attr"` A string `xml:"xmlns a,attr"`
Xdr string `xml:"xmlns xdr,attr"` Xdr string `xml:"xmlns xdr,attr"`
TwoCellAnchor []*decodeTwoCellAnchor `xml:"twoCellAnchor,omitempty"` OneCellAnchor []*decodeCellAnchor `xml:"oneCellAnchor,omitempty"`
XMLName xml.Name `xml:"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing wsDr,omitempty"` TwoCellAnchor []*decodeCellAnchor `xml:"twoCellAnchor,omitempty"`
XMLName xml.Name `xml:"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing wsDr,omitempty"`
} }

@ -162,11 +162,11 @@ type xlsxClientData struct {
FPrintsWithSheet bool `xml:"fPrintsWithSheet,attr"` FPrintsWithSheet bool `xml:"fPrintsWithSheet,attr"`
} }
// xlsxTwoCellAnchor directly maps the twoCellAnchor (Two Cell Anchor Shape // xlsxCellAnchor directly maps the oneCellAnchor (One Cell Anchor Shape Size)
// Size). This element specifies a two cell anchor placeholder for a group, a // and twoCellAnchor (Two Cell Anchor Shape Size). This element specifies a two
// shape, or a drawing element. It moves with cells and its extents are in EMU // cell anchor placeholder for a group, a shape, or a drawing element. It moves
// units. // with cells and its extents are in EMU units.
type xlsxTwoCellAnchor struct { type xlsxCellAnchor struct {
EditAs string `xml:"editAs,attr,omitempty"` EditAs string `xml:"editAs,attr,omitempty"`
From *xlsxFrom `xml:"xdr:from"` From *xlsxFrom `xml:"xdr:from"`
To *xlsxTo `xml:"xdr:to"` To *xlsxTo `xml:"xdr:to"`
@ -178,9 +178,10 @@ type xlsxTwoCellAnchor struct {
// xlsxWsDr directly maps the root element for a part of this content type shall // xlsxWsDr directly maps the root element for a part of this content type shall
// wsDr. // wsDr.
type xlsxWsDr struct { type xlsxWsDr struct {
TwoCellAnchor []*xlsxTwoCellAnchor `xml:"xdr:twoCellAnchor"` OneCellAnchor []*xlsxCellAnchor `xml:"xdr:oneCellAnchor"`
Xdr string `xml:"xmlns:xdr,attr"` TwoCellAnchor []*xlsxCellAnchor `xml:"xdr:twoCellAnchor"`
A string `xml:"xmlns:a,attr"` Xdr string `xml:"xmlns:xdr,attr"`
A string `xml:"xmlns:a,attr"`
} }
// encodeWsDr directly maps the element xdr:wsDr. // encodeWsDr directly maps the element xdr:wsDr.

Loading…
Cancel
Save