Использование System.IO.MemoryStream
добавляет строки в буфер обмена без лишних байтов в начале и в конце строковых значений.
Например, следующая строка представляет фрагмент таблицы Microsoft Excel:
class Program
{
[STAThread]
static void Main(string[] args)
{
string content = @"<?xml version=""1.0""?>
<?mso-application progid=""Excel.Sheet""?>
<Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet""
xmlns:o=""urn:schemas-microsoft-com:office:office""
xmlns:x=""urn:schemas-microsoft-com:office:excel""
xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet""
xmlns:html=""http://www.w3.org/TR/REC-html40"">
<Styles>
<Style ss:ID=""Default"" ss:Name=""Normal"">
<Alignment ss:Vertical=""Bottom""/>
<Borders/>
<Font ss:FontName=""Calibri"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000""/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID=""s18"" ss:Name=""Currency"">
<NumberFormat
ss:Format=""_("$"* #,##0.00_);_("$"* \(#,##0.00\);_("$"* "-"??_);_(@_)""/>
</Style>
<Style ss:ID=""s64"">
<Font ss:FontName=""Calibri"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000""
ss:Bold=""1""/>
</Style>
<Style ss:ID=""s65"" ss:Parent=""s18"">
<Font ss:FontName=""Calibri"" x:Family=""Swiss"" ss:Size=""11"" ss:Color=""#000000""/>
</Style>
</Styles>
<Worksheet ss:Name=""Sheet1"">
<Table ss:ExpandedColumnCount=""2"" ss:ExpandedRowCount=""2""
ss:DefaultRowHeight=""15"">
<Row>
<Cell><Data ss:Type=""String"">Month</Data></Cell>
<Cell><Data ss:Type=""String"">Year</Data></Cell>
</Row>
<Row>
<Cell ss:StyleID=""s64""><Data ss:Type=""String"">August</Data></Cell>
<Cell ss:StyleID=""s65""><Data ss:Type=""Number"">999.99</Data></Cell>
</Row>
</Table>
</Worksheet>
</Workbook>";
Передача его классу Clipboard
в виде строки:
Clipboard.SetData("XML Spreadsheet", content);
Создает несовместимый формат с Excel, и Excel при попытке вставки этого содержимого выдает следующую ошибку:
Однако, сериализация его в байты с последующей передачей в виде MemoryStream :
Clipboard.SetData("XML Spreadsheet", new MemoryStream(Encoding.UTF8.GetBytes(content)));
Создаетсодержимое буфера обмена, совместимое с Excel: