@@ -784,6 +784,19 @@ protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
784
784
785
785
$ charts = $ chartDetails = [];
786
786
787
+ // Add richData (contains relation of in-cell images)
788
+ $ richData = [];
789
+ $ relationsFileName = $ dir . '/richData/_rels/richValueRel.xml.rels ' ;
790
+ if ($ zip ->locateName ($ relationsFileName )) {
791
+ $ relsWorksheet = $ this ->loadZip ($ relationsFileName , Namespaces::RELATIONSHIPS );
792
+ foreach ($ relsWorksheet ->Relationship as $ elex ) {
793
+ $ ele = self ::getAttributes ($ elex );
794
+ if ($ ele ['Type ' ] == Namespaces::IMAGE ) {
795
+ $ richData ['image ' ][(string ) $ ele ['Id ' ]] = (string ) $ ele ['Target ' ];
796
+ }
797
+ }
798
+ }
799
+
787
800
$ sheetCreated = false ;
788
801
if ($ xmlWorkbookNS ->sheets ) {
789
802
foreach ($ xmlWorkbookNS ->sheets ->sheet as $ eleSheet ) {
@@ -940,34 +953,28 @@ protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
940
953
941
954
break ;
942
955
case DataType::TYPE_ERROR :
943
- if (isset ($ cAttr ->vm )) {
944
- $ cell = $ docSheet ->getCell ($ r );
945
- if ($ cell ) {
946
-
947
- $ objDrawing = new \PhpOffice \PhpSpreadsheet \Worksheet \Drawing ();
948
- $ objDrawing ->setName ('' );
949
- $ objDrawing ->setDescription ('' );
950
- $ imagePath = 'xl/media/image ' . $ cAttr ->vm . '.png ' ;
951
- $ objDrawing ->setPath (
952
- 'zip:// ' . File::realpath ($ filename ) . '# ' . $ imagePath ,
953
- false ,
954
- $ zip
955
- );
956
+ if (isset ($ cAttr ->vm ) && isset ($ richData ['image ' ]['rId ' . $ cAttr ->vm ]) && !$ useFormula ) {
957
+ $ imagePath = $ dir . '/ ' . str_replace ('../ ' , '' , $ richData ['image ' ]['rId ' . $ cAttr ->vm ]);
958
+ $ objDrawing = new \PhpOffice \PhpSpreadsheet \Worksheet \Drawing ();
959
+ $ objDrawing ->setPath (
960
+ 'zip:// ' . File::realpath ($ filename ) . '# ' . $ imagePath ,
961
+ false ,
962
+ $ zip
963
+ );
956
964
957
- $ objDrawing ->setCoordinates ($ r );
958
- $ objDrawing ->setOffsetX (0 );
959
- $ objDrawing ->setOffsetY (0 );
960
- $ objDrawing ->setResizeProportional (false );
961
- $ objDrawing ->setWorksheet ($ docSheet );
962
- }
965
+ $ objDrawing ->setCoordinates ($ r );
966
+ $ objDrawing ->setOffsetX (0 );
967
+ $ objDrawing ->setOffsetY (0 );
968
+ $ objDrawing ->setResizeProportional (false );
969
+ $ objDrawing ->setWorksheet ($ docSheet );
963
970
964
971
$ value = $ objDrawing ;
965
972
$ cellDataType = DATATYPE ::TYPE_NULL ;
966
973
$ c ->t = DATATYPE ::TYPE_NULL ;
967
974
968
975
break ;
969
976
}
970
-
977
+
971
978
if (!$ useFormula ) {
972
979
$ value = self ::castToError ($ c );
973
980
} else {
0 commit comments