This question already has answers here:
How to set HTML to clipboard in C#?
                                
                                    (4个答案)
                                
                        
                                3年前关闭。
            
                    
我注意到,许多应用程序根据目标应用程序进行不同的复制和粘贴。例如,如果我“ HTML复制” TFS中的一个项目(在Web界面中):


如果将其粘贴到记事本中,则会得到类似csv的输出
如果将其粘贴到Excel中,则会得到格式正确的行和列
如果我将其粘贴到Outlook中,则会得到一个漂亮的表格


我尝试使用具有不同Clipboard.SetText(String, TextDataFormat)值的TextDataFormat的多个实例,但是可惜,它们彼此覆盖(除了TextDataFormat.Text之外的任何东西似乎都无法“允许”粘贴)。

到目前为止我尝试过的是:

private static void KeyPressed(KeyEventArgs e, GridView grid)
{
    if (e.Control && e.KeyCode == Keys.C)
    {
        var textContent = new StringBuilder();
        var htmlContent = new StringBuilder("<table>");

        // build content
        for (int i = 0; i < 10; i++)
        {
            htmlContent.AppendFormat("<tr><td>{0}</td></tr>", i);
            textContent.AppendFormat("{0}\t", i);
        }

        textContent.Length--; // remove last tab
        htmlContent.Append("</table>");

        // send contents to clipboard
        Clipboard.Clear();
        Clipboard.SetText(textContent.ToString(), TextDataFormat.CommaSeparatedValue);
        Clipboard.SetText(textContent.ToString(), TextDataFormat.Text);
        Clipboard.SetText(htmlContent.ToString(), TextDataFormat.Html);

        e.Handled = true;
        e.SuppressKeyPress = true;
    }
}

最佳答案

我认为您可能只需要以下内容:

var dataObject = new DataObject(textContent); // allows data to auto-convert on paste
Clipboard.SetDataObject(dataObject);

10-07 19:23
查看更多