diff --git a/components/fpspreadsheet/fpshtml.pas b/components/fpspreadsheet/fpshtml.pas index 0288ca766..73e0b9ffe 100644 --- a/components/fpspreadsheet/fpshtml.pas +++ b/components/fpspreadsheet/fpshtml.pas @@ -1677,15 +1677,17 @@ end; procedure TsHTMLWriter.WriteToClipboardStream(AStream: TStream); begin + {$IFDEF MSWINDOWS} FClipboardMode := true; AppendToStream(AStream, Format( NATIVE_HEADER, [0, 0, 0, 0])); // value will be replaced at end - WriteToStream(AStream); - AStream.Position := 0; AppendToStream(AStream, Format( NATIVE_HEADER, [FStartHTMLPos, FEndHTMLPos, FStartFragmentPos, FEndFragmentPos])); + {$ELSE} + WriteToStream(AStream); + {$ENDIF} end; procedure TsHTMLWriter.WriteToStream(AStream: TStream); diff --git a/components/fpspreadsheet/fpspreadsheetctrls.pas b/components/fpspreadsheet/fpspreadsheetctrls.pas index 32a2da191..63bcf4e40 100644 --- a/components/fpspreadsheet/fpspreadsheetctrls.pas +++ b/components/fpspreadsheet/fpspreadsheetctrls.pas @@ -471,6 +471,7 @@ var cfBiff8Format: Integer = 0; cfBiff5Format: Integer = 0; cfHTMLFormat: Integer = 0; + cfTextHTMLFormat: Integer = 0; cfCSVFormat: Integer = 0; {@@ ---------------------------------------------------------------------------- @@ -1174,6 +1175,10 @@ begin if cfHTMLFormat = 0 then cfHTMLFormat := RegisterClipboardFormat('HTML Format'); + cfTextHTMLFormat := Clipboard.FindFormatID('text/html'); + if cfTextHTMLFormat = 0 then + cfTextHTMLFormat := RegisterClipboardFormat('text/html'); + // dto with CSV clipboard format cfCSVFormat := Clipboard.FindFormatID('CSV'); if cfCSVFormat = 0 then @@ -1189,10 +1194,13 @@ begin // Then write BIFF5 format FWorkbook.CopyToClipboardStream(stream, sfExcel5); Clipboard.AddFormat(cfBiff5Format, stream); + (stream as TMemoryStream).Clear; // Then write HTML format FWorkbook.CopyToClipboardStream(stream, sfHTML); Clipboard.AddFormat(cfHTMLFormat, stream); + Clipboard.AddFormat(cfTextHTMLFormat, stream); + (stream as TMemoryStream).Clear; // Then write CSV format csv := CSVParams; @@ -1201,12 +1209,14 @@ begin CsvParams.SheetIndex := FWorkbook.GetWorksheetIndex(FWorkbook.ActiveWorksheet); FWorkbook.CopyToClipboardStream(stream, sfCSV); Clipboard.AddFormat(cfCSVFormat, stream); + (stream as TMemoryStream).Clear; // Finally write TEXT format CsvParams.Delimiter := #9; FWorkbook.CopyToClipboardStream(stream, sfCSV); Clipboard.AddFormat(CF_TEXT, stream); CSVParams := csv; + (stream as TMemoryStream).Clear; // To do: XML format // I don't know which format is written by xlsx and ods natively.