How to paste CSV data to Windows Clipboard with C# How to paste CSV data to Windows Clipboard with C# windows windows

How to paste CSV data to Windows Clipboard with C#


The .NET Framework places DataFormats.CommaSeparatedValue on the clipboard as Unicode text. But as mentioned at http://www.syncfusion.com/faq/windowsforms/faq_c98c.aspx#q899q, Excel expects CSV data to be a UTF-8 memory stream (it is difficult to say whether .NET or Excel is at fault for the incompatibility).

The solution I've come up with in my own application is to place two versions of the tabular data on the clipboard simultaneously as tab-delimited text and as a CSV memory stream. This allows the destination application to acquire the data in its preferred format. Notepad and Excel prefer the tab-delimited text, but you can force Excel to grab the CSV data via the Paste Special... command for testing purposes.

Here is some example code (note that WinForms-equivalents from the WPF namespaces are used here):

// Generate both tab-delimited and CSV strings.string tabbedText = //...string csvText = //...// Create the container object that will hold both versions of the data.var dataObject = new System.Windows.DataObject();// Add tab-delimited text to the container object as is.dataObject.SetText(tabbedText);// Convert the CSV text to a UTF-8 byte stream before adding it to the container object.var bytes = System.Text.Encoding.UTF8.GetBytes(csvText);var stream = new System.IO.MemoryStream(bytes);dataObject.SetData(System.Windows.DataFormats.CommaSeparatedValue, stream);// Copy the container object to the clipboard.System.Windows.Clipboard.SetDataObject(dataObject, true);


Use tabs instead of commas. ie:

Clipboard.SetText("1\t2\t3\t4\t3\t2\t3\t4", TextDataFormat.Text);

Just tested this myself, and it worked for me.


I have had success pasting into Excel using \t (see BFree's answer) as column separators and \n as row separators.