当前位置:  开发笔记 > 编程语言 > 正文

如何使用C#将CSV数据粘贴到Windows剪贴板

如何解决《如何使用C#将CSV数据粘贴到Windows剪贴板》经验,为你挑选了2个好方法。

.NET Framework DataFormats.CommaSeparatedValue作为Unicode文本放在剪贴板上.但正如在http://www.syncfusion.com/faq/windowsforms/faq_c98c.aspx#q899q中提到的那样,Excel希望CSV数据是UTF-8内存流(很难说.NET或Excel是否有错误)对于不兼容性).

我在自己的应用程序中提出的解决方案是将两个版本的表格数据同时放在剪贴板上作为制表符分隔的文本和CSV内存流.这允许目标应用程序以其首选格式获取数据.记事本和Excel更喜欢制表符分隔的文本,但您可以强制Excel通过"选择性粘贴..."命令获取CSV数据以进行测试.

下面是一些示例代码(请注意,此处使用了WPF命名空间中的WinForms等效代码):

// 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);


BFree.. 6

使用制表符而不是逗号.即:

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

我自己测试了一下,它对我有用.



1> 小智..:

.NET Framework DataFormats.CommaSeparatedValue作为Unicode文本放在剪贴板上.但正如在http://www.syncfusion.com/faq/windowsforms/faq_c98c.aspx#q899q中提到的那样,Excel希望CSV数据是UTF-8内存流(很难说.NET或Excel是否有错误)对于不兼容性).

我在自己的应用程序中提出的解决方案是将两个版本的表格数据同时放在剪贴板上作为制表符分隔的文本和CSV内存流.这允许目标应用程序以其首选格式获取数据.记事本和Excel更喜欢制表符分隔的文本,但您可以强制Excel通过"选择性粘贴..."命令获取CSV数据以进行测试.

下面是一些示例代码(请注意,此处使用了WPF命名空间中的WinForms等效代码):

// 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);



2> BFree..:

使用制表符而不是逗号.即:

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

我自己测试了一下,它对我有用.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有