nam*_*los 28 c# windows csv clipboard paste
Clipboard.SetText()
System.Windows.Forms.Clipboard.SetText(
"1,2,3,4\n5,6,7,8",
System.Windows.Forms.TextDataFormat.CommaSeparatedValue
);
Run Code Online (Sandbox Code Playgroud)
Clipboard.SetData()
System.Windows.Forms.Clipboard.SetData(
System.Windows.Forms.DataFormats.CommaSeparatedValue,
"1,2,3,4\n5,6,7,8",
);
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,都会在剪贴板上放置一些内容,但是当粘贴到Excel中时,它会显示为一个加载文本的单元格:" - §žý; pC |yVk²û"
正如BFree的答案所示,SetText与TextDataFormat一起作为一种解决方法
System.Windows.Forms.Clipboard.SetText(
"1\t2\t3\t4\n5\t6\t7\t8",
System.Windows.Forms.TextDataFormat.Text
);
Run Code Online (Sandbox Code Playgroud)
我已经尝试了这一点,并确认现在粘贴到Excel和Word正常工作.在每种情况下,它都会粘贴为带有单元格而不是纯文本的表格.
仍然好奇,为什么CommaSeparatedValue是不工作的.
小智 35
.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);
Run Code Online (Sandbox Code Playgroud)
使用制表符而不是逗号.即:
Clipboard.SetText("1\t2\t3\t4\t3\t2\t3\t4", TextDataFormat.Text);
Run Code Online (Sandbox Code Playgroud)
我自己测试了一下,它对我有用.
| 归档时间: |
|
| 查看次数: |
18965 次 |
| 最近记录: |