C# 如何修改复制到剪贴板的内容?

C# 如何修改复制到剪贴板的内容?,c#,wpf,C#,Wpf,我正在将DataGrid复制到剪贴板,以便将其粘贴到Excel,同时保持其格式如下: MyDataGrid.SelectAllCells(); MyDataGrid.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader; ApplicationCommands.Copy.Execute(null, MyDataGrid); dg.SelectAllCells(); dg.ClipboardCopyMode = DataGridC

我正在将DataGrid复制到剪贴板,以便将其粘贴到Excel,同时保持其格式如下:

MyDataGrid.SelectAllCells();
MyDataGrid.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
ApplicationCommands.Copy.Execute(null, MyDataGrid);
dg.SelectAllCells();
dg.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
ApplicationCommands.Copy.Execute(null, dg);

string dataGridContent = (string)Clipboard.GetData(DataFormats.Html);
dataGridContent = dataGridContent.Replace("<TABLE>",
    String.Format("<TABLE><TR><TD colspan='{0}'>Your additional text<TD></TR>", dg.Columns.Count));

Clipboard.SetText(dataGridContent, TextDataFormat.Html);
这个很好用。但是,我需要添加字符串“MyDataGridTitle”。如果粘贴到Excel,它应该位于DataGrid之上

我尝试过各种方法(例如使用数据对象)并折磨过谷歌,但都没有成功。我会感谢你的提示、提示或回答

这不是一个非常优雅的解决方案,但是您可以尝试通过操纵由
数据网格
生成的html字符串(实际上,当您粘贴到Excel中时,使用的是
数据格式.html
格式)

大概是这样的:

MyDataGrid.SelectAllCells();
MyDataGrid.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
ApplicationCommands.Copy.Execute(null, MyDataGrid);
dg.SelectAllCells();
dg.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
ApplicationCommands.Copy.Execute(null, dg);

string dataGridContent = (string)Clipboard.GetData(DataFormats.Html);
dataGridContent = dataGridContent.Replace("<TABLE>",
    String.Format("<TABLE><TR><TD colspan='{0}'>Your additional text<TD></TR>", dg.Columns.Count));

Clipboard.SetText(dataGridContent, TextDataFormat.Html);
dg.SelectAllCells();
dg.ClipboardCopyMode=DataGridClipboardCopyMode.IncludeHeader;
ApplicationCommands.Copy.Execute(null,dg);
string dataGridContent=(string)Clipboard.GetData(DataFormats.Html);
dataGridContent=dataGridContent.Replace(“,
Format(“您的附加文本”,dg.Columns.Count));
SetText(dataGridContent,TextDataFormat.Html);

当然,您可以通过使用正则表达式而不是
Replace
方法来改进此代码。

您不能将多个项目放入剪贴板。您可以使用该类将数据复制到剪贴板或读取它们。也许您可以读取DataGrid放在那里的内容并修改itI,但它还没有对剪贴板执行任何操作,但使用
Clipboard.SetData
并提供
IDataObject
DataObject
的实例作为参数是否有用?您可以在这里使用一个包含头和MyDataGrid内容的复杂对象。我唯一不知道的是这个对象是如何被序列化的,以及Excel需要哪种序列化格式。feO2x,谢谢,我已经尝试了DataObject,但是它不能在Excel中粘贴。太好了!PS:当您处于我的级别时,这是一个非常优雅的解决方案:o)我注意到的一件事是,结果字符串在末尾被截断:复制到excel时,最后的单元格是空的,即使datagrid中有值。我猜这是因为在字符串“dataGridContent”中有关于STARTHTML和ENDHTML的信息。好的,我正在根据替换字符串的长度调整ENDHTML和EndFragment,现在它可以正常工作了。我现在同意这不是一个非常优雅的解决方案,但它仍然是一个解决方案;o) 我不知道你可以用html格式复制。再次感谢。