diff --git a/components/fpspreadsheet/xlsbiff8.pas b/components/fpspreadsheet/xlsbiff8.pas index 7785109e2..e0f7ffc53 100755 --- a/components/fpspreadsheet/xlsbiff8.pas +++ b/components/fpspreadsheet/xlsbiff8.pas @@ -673,7 +673,7 @@ end; {******************************************************************* * TsSpreadBIFF8Writer.WriteFonts () * -* DESCRIPTION: Writes the Excel 8 FONT records neede for the +* DESCRIPTION: Writes the Excel 8 FONT records needed for the * used fonts in the workbook. * *******************************************************************} diff --git a/components/fpspreadsheet/xlsxooxml.pas b/components/fpspreadsheet/xlsxooxml.pas index 6e92eb3cd..1eb4e17af 100755 --- a/components/fpspreadsheet/xlsxooxml.pas +++ b/components/fpspreadsheet/xlsxooxml.pas @@ -69,6 +69,7 @@ type procedure DestroyStreams; procedure ResetStreams; function GetStyleIndex(ACell: PCell): Cardinal; + procedure WriteFonts(AStream: TStream); protected { Streams with the contents of files } FSContentTypes: TStream; @@ -148,6 +149,36 @@ const { TsSpreadOOXMLWriter } +procedure TsSpreadOOXMLWriter.WriteFonts(AStream: TStream); +var + i: Integer; + font: TsFont; + bold, italic, underline, strikeout, color: String; + rgb: TsColorValue; +begin + AppendToStream(FSStyles, Format( + '', [Workbook.GetFontCount])); + for i:=0 to Workbook.GetFontCount-1 do begin + font := Workbook.GetFont(i); + if font <> nil then begin + if (fssBold in font.Style) then bold := '' else bold := ''; + if (fssItalic in font.Style) then italic := '' else italic := ''; + if (fssUnderline in font.Style) then underline := '' else underline := ''; + if (fssStrikeout in font.Style) then strikeout := '' else strikeout := ''; + if font.Color <> scBlack then begin + rgb := Workbook.GetPaletteColor(font.Color); + color := Format('', [ColorToHTMLColorStr(rgb)]) + end else + color := ''; + AppendToStream(AStream, Format( + '%s%s%s%s%s', [ + font.Size, color, font.FontName, bold, italic, underline, strikeout])); + end; + end; + AppendToStream(AStream, + ''); +end; + procedure TsSpreadOOXMLWriter.WriteGlobalFiles; var i: Integer; @@ -191,13 +222,9 @@ begin XML_Header); AppendToStream(FSStyles, Format( '', [SCHEMAS_SPREADML])); - AppendToStream(FSStyles, - ''); - AppendToStream(FSStyles, - '', - ''); - AppendToStream(FSStyles, - ''); + + WriteFonts(FSStyles); + AppendToStream(FSStyles, ''); AppendToStream(FSStyles, @@ -437,7 +464,7 @@ begin LCell.Col := c; AVLNode := CurSheet.Cells.Find(@LCell); if Assigned(AVLNode) then - WriteCellCallback(PCell(AVLNode.Data), nil) + WriteCellCallback(PCell(AVLNode.Data), FSSheets[FCurSheetNum]) else begin CellPosText := CurSheet.CellPosToText(r, c); AppendToStream(FSSheets[FCurSheetNum], Format(