Дополнительный ответ через 3 года, конечно, если какой-либо предыдущий не работает для вас, потому что «что-то».
Готово!
Места Платформы.NET DataFormats.CommaSeparatedValue
на буфере обмена как текст Unicode. Но, как упомянуто в http://www.syncfusion.com/faq/windowsforms/faq_c98c.aspx#q899q , Excel ожидает, что данные CSV будут потоком памяти UTF-8 (трудно сказать или.NET, или Excel виновным в несовместимости).
решение, которое я предложил в своем собственном приложении, состоит в том, чтобы поместить две версии табличных данных на буфере обмена одновременно как разделенный текст вкладки и как поток памяти CSV. Это позволяет целевому приложению получать данные в своем предпочтительном формате. Блокнот и Excel предпочитают разделенный текст вкладки, но можно вынудить Excel захватить данные CSV через Вставку, Особенную... управляют для тестирования.
Вот некоторый пример кода (обратите внимание, что WinForms-эквиваленты от пространств имен WPF используются здесь):
// 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);
Используйте вкладки вместо запятых. т.е.:
Clipboard.SetText("1\t2\t3\t4\t3\t2\t3\t4", TextDataFormat.Text);
Просто протестировал это самостоятельно, и это работало на меня.
Я успешно вставил в Excel, используя \ t (см. Ответ BFree) в качестве разделителей столбцов и \ n в качестве разделителей строк.