diff options
-rw-r--r-- | adjust_test.go | 8 | ||||
-rw-r--r-- | picture.go | 29 | ||||
-rw-r--r-- | rows.go | 4 |
3 files changed, 22 insertions, 19 deletions
diff --git a/adjust_test.go b/adjust_test.go index 364a8b8..a0de844 100644 --- a/adjust_test.go +++ b/adjust_test.go @@ -104,13 +104,13 @@ func TestAdjustCalcChain(t *testing.T) { func TestCoordinatesToAreaRef(t *testing.T) { f := NewFile() - ref, err := f.coordinatesToAreaRef([]int{}) + _, err := f.coordinatesToAreaRef([]int{}) assert.EqualError(t, err, "coordinates length must be 4") - ref, err = f.coordinatesToAreaRef([]int{1, -1, 1, 1}) + _, err = f.coordinatesToAreaRef([]int{1, -1, 1, 1}) assert.EqualError(t, err, "invalid cell coordinates [1, -1]") - ref, err = f.coordinatesToAreaRef([]int{1, 1, 1, -1}) + _, err = f.coordinatesToAreaRef([]int{1, 1, 1, -1}) assert.EqualError(t, err, "invalid cell coordinates [1, -1]") - ref, err = f.coordinatesToAreaRef([]int{1, 1, 1, 1}) + ref, err := f.coordinatesToAreaRef([]int{1, 1, 1, 1}) assert.NoError(t, err) assert.EqualValues(t, ref, "A1:A1") } @@ -499,26 +499,33 @@ func (f *File) getSheetRelationshipsTargetByID(sheet, rID string) string { func (f *File) GetPicture(sheet, cell string) (string, []byte, error) { col, row, err := CellNameToCoordinates(cell) if err != nil { - return "", []byte{}, err + return "", nil, err } col-- row-- xlsx, err := f.workSheetReader(sheet) if err != nil { - return "", []byte{}, err + return "", nil, err } if xlsx.Drawing == nil { - return "", []byte{}, err + return "", nil, err } - target := f.getSheetRelationshipsTargetByID(sheet, xlsx.Drawing.RID) drawingXML := strings.Replace(target, "..", "xl", -1) - + _, ok := f.XLSX[drawingXML] + if !ok { + return "", nil, err + } drawingRelationships := strings.Replace( strings.Replace(target, "../drawings", "xl/drawings/_rels", -1), ".xml", ".xml.rels", -1) - wsDr, _ := f.drawingParser(drawingXML) + return f.getPicture(row, col, drawingXML, drawingRelationships) +} +// getPicture provides a function to get picture base name and raw content +// embed in XLSX by given coordinates and drawing relationships. +func (f *File) getPicture(row, col int, drawingXML, drawingRelationships string) (string, []byte, error) { + wsDr, _ := f.drawingParser(drawingXML) for _, anchor := range wsDr.TwoCellAnchor { if anchor.From != nil && anchor.Pic != nil { if anchor.From.Col == col && anchor.From.Row == row { @@ -528,16 +535,12 @@ func (f *File) GetPicture(sheet, cell string) (string, []byte, error) { if ok { return filepath.Base(xlsxWorkbookRelation.Target), []byte(f.XLSX[strings.Replace(xlsxWorkbookRelation.Target, - "..", "xl", -1)]), err + "..", "xl", -1)]), nil } } } } - _, ok := f.XLSX[drawingXML] - if !ok { - return "", nil, err - } decodeWsDr := decodeWsDr{} _ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML(drawingXML)), &decodeWsDr) for _, anchor := range decodeWsDr.TwoCellAnchor { @@ -548,12 +551,12 @@ func (f *File) GetPicture(sheet, cell string) (string, []byte, error) { xlsxWorkbookRelation := f.getDrawingRelationships(drawingRelationships, decodeTwoCellAnchor.Pic.BlipFill.Blip.Embed) _, ok := supportImageTypes[filepath.Ext(xlsxWorkbookRelation.Target)] if ok { - return filepath.Base(xlsxWorkbookRelation.Target), []byte(f.XLSX[strings.Replace(xlsxWorkbookRelation.Target, "..", "xl", -1)]), err + return filepath.Base(xlsxWorkbookRelation.Target), []byte(f.XLSX[strings.Replace(xlsxWorkbookRelation.Target, "..", "xl", -1)]), nil } } } } - return "", []byte{}, err + return "", nil, nil } // getDrawingRelationships provides a function to get drawing relationships @@ -21,7 +21,7 @@ import ( // GetRows return all the rows in a sheet by given worksheet name (case // sensitive). For example: // -// rows, err := f.GetRows("Sheet1") +// rows, err := f.GetRows("Sheet1") // for _, row := range rows { // for _, colCell := range row { // fmt.Print(colCell, "\t") @@ -160,7 +160,7 @@ func (err ErrSheetNotExist) Error() string { // // rows, err := f.Rows("Sheet1") // for rows.Next() { -// row, err := rows.Columns() +// row, err := rows.Columns() // for _, colCell := range row { // fmt.Print(colCell, "\t") // } |