@@ -499,26 +499,33 @@ func (f *File) getSheetRelationshipsTargetByID(sheet, rID string) string {
499499func (f * File ) GetPicture (sheet , cell string ) (string , []byte , error ) {
500500 col , row , err := CellNameToCoordinates (cell )
501501 if err != nil {
502- return "" , [] byte {} , err
502+ return "" , nil , err
503503 }
504504 col --
505505 row --
506506 xlsx , err := f .workSheetReader (sheet )
507507 if err != nil {
508- return "" , [] byte {} , err
508+ return "" , nil , err
509509 }
510510 if xlsx .Drawing == nil {
511- return "" , [] byte {} , err
511+ return "" , nil , err
512512 }
513-
514513 target := f .getSheetRelationshipsTargetByID (sheet , xlsx .Drawing .RID )
515514 drawingXML := strings .Replace (target , ".." , "xl" , - 1 )
516-
515+ _ , ok := f .XLSX [drawingXML ]
516+ if ! ok {
517+ return "" , nil , err
518+ }
517519 drawingRelationships := strings .Replace (
518520 strings .Replace (target , "../drawings" , "xl/drawings/_rels" , - 1 ), ".xml" , ".xml.rels" , - 1 )
519521
520- wsDr , _ := f .drawingParser (drawingXML )
522+ return f .getPicture (row , col , drawingXML , drawingRelationships )
523+ }
521524
525+ // getPicture provides a function to get picture base name and raw content
526+ // embed in XLSX by given coordinates and drawing relationships.
527+ func (f * File ) getPicture (row , col int , drawingXML , drawingRelationships string ) (string , []byte , error ) {
528+ wsDr , _ := f .drawingParser (drawingXML )
522529 for _ , anchor := range wsDr .TwoCellAnchor {
523530 if anchor .From != nil && anchor .Pic != nil {
524531 if anchor .From .Col == col && anchor .From .Row == row {
@@ -528,16 +535,12 @@ func (f *File) GetPicture(sheet, cell string) (string, []byte, error) {
528535 if ok {
529536 return filepath .Base (xlsxWorkbookRelation .Target ),
530537 []byte (f .XLSX [strings .Replace (xlsxWorkbookRelation .Target ,
531- ".." , "xl" , - 1 )]), err
538+ ".." , "xl" , - 1 )]), nil
532539 }
533540 }
534541 }
535542 }
536543
537- _ , ok := f .XLSX [drawingXML ]
538- if ! ok {
539- return "" , nil , err
540- }
541544 decodeWsDr := decodeWsDr {}
542545 _ = xml .Unmarshal (namespaceStrictToTransitional (f .readXML (drawingXML )), & decodeWsDr )
543546 for _ , anchor := range decodeWsDr .TwoCellAnchor {
@@ -548,12 +551,12 @@ func (f *File) GetPicture(sheet, cell string) (string, []byte, error) {
548551 xlsxWorkbookRelation := f .getDrawingRelationships (drawingRelationships , decodeTwoCellAnchor .Pic .BlipFill .Blip .Embed )
549552 _ , ok := supportImageTypes [filepath .Ext (xlsxWorkbookRelation .Target )]
550553 if ok {
551- return filepath .Base (xlsxWorkbookRelation .Target ), []byte (f .XLSX [strings .Replace (xlsxWorkbookRelation .Target , ".." , "xl" , - 1 )]), err
554+ return filepath .Base (xlsxWorkbookRelation .Target ), []byte (f .XLSX [strings .Replace (xlsxWorkbookRelation .Target , ".." , "xl" , - 1 )]), nil
552555 }
553556 }
554557 }
555558 }
556- return "" , [] byte {}, err
559+ return "" , nil , nil
557560}
558561
559562// getDrawingRelationships provides a function to get drawing relationships
0 commit comments