1010use PhpOffice \PhpSpreadsheet \RichText \Run ;
1111use PhpOffice \PhpSpreadsheet \Shared \StringHelper ;
1212use PhpOffice \PhpSpreadsheet \Shared \XMLWriter ;
13+ use PhpOffice \PhpSpreadsheet \Style \Font ;
1314use PhpOffice \PhpSpreadsheet \Worksheet \Worksheet as ActualWorksheet ;
1415
1516class StringTable extends WriterPart
@@ -111,7 +112,7 @@ public function writeStringTable(array $stringTable): string
111112 *
112113 * @param ?string $prefix Optional Namespace prefix
113114 */
114- public function writeRichText (XMLWriter $ objWriter , RichText $ richText , ?string $ prefix = null ): void
115+ public function writeRichText (XMLWriter $ objWriter , RichText $ richText , ?string $ prefix = null , ? Font $ defaultFont = null ): void
115116 {
116117 if ($ prefix !== null ) {
117118 $ prefix .= ': ' ;
@@ -122,63 +123,64 @@ public function writeRichText(XMLWriter $objWriter, RichText $richText, ?string
122123 foreach ($ elements as $ element ) {
123124 // r
124125 $ objWriter ->startElement ($ prefix . 'r ' );
126+ $ font = ($ element instanceof Run) ? $ element ->getFont () : $ defaultFont ;
125127
126128 // rPr
127- if ($ element instanceof Run && $ element -> getFont () !== null ) {
129+ if ($ font !== null ) {
128130 // rPr
129131 $ objWriter ->startElement ($ prefix . 'rPr ' );
130132
131133 // rFont
132- if ($ element -> getFont () ->getName () !== null ) {
134+ if ($ font ->getName () !== null ) {
133135 $ objWriter ->startElement ($ prefix . 'rFont ' );
134- $ objWriter ->writeAttribute ('val ' , $ element -> getFont () ->getName ());
136+ $ objWriter ->writeAttribute ('val ' , $ font ->getName ());
135137 $ objWriter ->endElement ();
136138 }
137139
138140 // Bold
139141 $ objWriter ->startElement ($ prefix . 'b ' );
140- $ objWriter ->writeAttribute ('val ' , ($ element -> getFont () ->getBold () ? 'true ' : 'false ' ));
142+ $ objWriter ->writeAttribute ('val ' , ($ font ->getBold () ? 'true ' : 'false ' ));
141143 $ objWriter ->endElement ();
142144
143145 // Italic
144146 $ objWriter ->startElement ($ prefix . 'i ' );
145- $ objWriter ->writeAttribute ('val ' , ($ element -> getFont () ->getItalic () ? 'true ' : 'false ' ));
147+ $ objWriter ->writeAttribute ('val ' , ($ font ->getItalic () ? 'true ' : 'false ' ));
146148 $ objWriter ->endElement ();
147149
148150 // Superscript / subscript
149- if ($ element -> getFont ()-> getSuperscript () || $ element -> getFont () ->getSubscript ()) {
151+ if ($ font -> getSuperscript () || $ font ->getSubscript ()) {
150152 $ objWriter ->startElement ($ prefix . 'vertAlign ' );
151- if ($ element -> getFont () ->getSuperscript ()) {
153+ if ($ font ->getSuperscript ()) {
152154 $ objWriter ->writeAttribute ('val ' , 'superscript ' );
153- } elseif ($ element -> getFont () ->getSubscript ()) {
155+ } elseif ($ font ->getSubscript ()) {
154156 $ objWriter ->writeAttribute ('val ' , 'subscript ' );
155157 }
156158 $ objWriter ->endElement ();
157159 }
158160
159161 // Strikethrough
160162 $ objWriter ->startElement ($ prefix . 'strike ' );
161- $ objWriter ->writeAttribute ('val ' , ($ element -> getFont () ->getStrikethrough () ? 'true ' : 'false ' ));
163+ $ objWriter ->writeAttribute ('val ' , ($ font ->getStrikethrough () ? 'true ' : 'false ' ));
162164 $ objWriter ->endElement ();
163165
164166 // Color
165- if ($ element -> getFont () ->getColor ()->getARGB () !== null ) {
167+ if ($ font ->getColor ()->getARGB () !== null ) {
166168 $ objWriter ->startElement ($ prefix . 'color ' );
167- $ objWriter ->writeAttribute ('rgb ' , $ element -> getFont () ->getColor ()->getARGB ());
169+ $ objWriter ->writeAttribute ('rgb ' , $ font ->getColor ()->getARGB ());
168170 $ objWriter ->endElement ();
169171 }
170172
171173 // Size
172- if ($ element -> getFont () ->getSize () !== null ) {
174+ if ($ font ->getSize () !== null ) {
173175 $ objWriter ->startElement ($ prefix . 'sz ' );
174- $ objWriter ->writeAttribute ('val ' , (string ) $ element -> getFont () ->getSize ());
176+ $ objWriter ->writeAttribute ('val ' , (string ) $ font ->getSize ());
175177 $ objWriter ->endElement ();
176178 }
177179
178180 // Underline
179- if ($ element -> getFont () ->getUnderline () !== null ) {
181+ if ($ font ->getUnderline () !== null ) {
180182 $ objWriter ->startElement ($ prefix . 'u ' );
181- $ objWriter ->writeAttribute ('val ' , $ element -> getFont () ->getUnderline ());
183+ $ objWriter ->writeAttribute ('val ' , $ font ->getUnderline ());
182184 $ objWriter ->endElement ();
183185 }
184186
0 commit comments