【问题标题】:Clipboard c# workbook to Excel and notepad剪贴板 c# 工作簿到 Excel 和记事本
【发布时间】:2014-07-23 21:27:35
【问题描述】:

从我的 c# 应用程序中,我想将带有字体的文本添加到剪贴板。 如果我将它粘贴到 excel 中,我想用格式查看它,如果我将它粘贴到记事本,同样的结果显然没有字体。

问题:

  • 如果我使用 Microsoft.Office.Interop.Excel.Application 并创建工作簿和工作表,我可以使用 Clipboard.SetDataObject(wb) 提供剪贴板,其中 wb 是我的工作簿:粘贴功能适用于 excel 但没有任何东西粘贴到记事本中。

  • 如果我使用如下代码:

    DataObject dataObj = new DataObject();
    dataObj.SetData(wb);
    dataObj.SetData(DataFormats.Text, "myunformattedtext");
    Clipboard.SetDataObject(dataObj);
    

记事本可以,但excel也可以检索“myunformattedtext”而不是wb

我尝试将一些数据格式与 dataObj.SetData(wb) 一起使用,例如 dataObj.SetData(DataFormats.Rtf,wb) 但我测试了 DataFormats 中的所有可用格式以及我可以使用粘贴从 ClipBoard.GetDataObject() 获得的格式来自 excel(26 个可能的值)但没有积极的结果。

setdata 是否有专用的 excel 工作簿格式?我想如果响应是否定的,最好的解决方案是使用 XML 电子表格...

谢谢

【问题讨论】:

  • 呃?你覆盖剪贴板!您将 wb 写入它,然后是文本字符串...从格式化到未格式化的转换是在目标端而不是源端完成的。
  • 你能做类似的事情吗:Clipboard.SetDataObject(wb);Clipboard.SetDataObject(Clipboard.GetDataObject().SetData(DataFormats.Text, "myunformattedtext"));
  • @cjb110 你的意思是当我调用两次 setdata 时?不,我不认为,因为如果我反转 dataObj.SetData(wb);和 dataObj.SetData(DataFormats.Text, "myunformattedtext");当我尝试粘贴时,剪贴板仍然包含 myunformattedtext。只是如果我多次调用 ClipBoard.setdata 或 Clipboard.Setdataobject 我会覆盖
  • @Bolu 此代码似乎不起作用,因为 SetData 返回 void 并且 SetDataObject 需要一个参数,是否缺少括号或逗号?如果您尝试连接剪贴板内容,我认为它不起作用,我相信使用不同格式多次调用 setdata 是这样做的方法

标签: c# excel clipboard


【解决方案1】:

您可以先将剪贴板的DataObject 设置为wb,然后获取其当前的DataObject 并从那里开始工作:

Clipboard.SetDataObject(wb);
DataObject dataObj=new DataObject();

foreach(string format in Clipboard.GetDataObject().GetFormats())
{
    // have a look of its current available Formats, and add anything you feel is necessary.
    // you may need RTF for word for example        

    //this will work with excel 2003 (xls file):
    //if(format.Contains("Biff"))

    //for excel 2007 forwards (xlsx file) you may need to add HTML format:
    if(format==DataFormats.Html||format.Contains("Biff"))
    {
        dataObj.SetData(format, Clipboard.GetDataObject().GetData(format));
    }
}
//you can set your text data by 
//dataObj.SetData(DataFormats.Text, "myunformattedtext"); 
Clipboard.SetDataObject(dataObj);

【讨论】:

  • 好的,我明白你的意思。我创建了自己的循环并为每个数据格式调用 setdata(因为我不知道哪一个与 excel 相关)除了文本,因为我想编辑它。在几个 foreach 循环之后,我现在遇到内存不足的问题,似乎解决方案是序列化对象,但它变得越来越复杂,而且双 Clipboard.SetDataObject 有点像黑客(因为我们实际上不知道所需的格式)。我现在使用 XML 电子表格,感谢您的帮助。
  • 你不需要全部,只需选择DataFormats.Rtf例如
  • 我已经尝试过 DataFormats.Rtf,数据和格式在 Word 中可以,但在 excel 中不行,我只检索表格数据而不是格式(很奇怪)。 Biff 给出了相同的结果。正如我在第一篇文章中所说,我测试了几种格式,但它们都不起作用。如果我需要选择它们的正确组合,测试可能会很长。 “Biff”不在 DataFormats 中,“XML Spreadsheet”与调用 dataObj.SetData("XML Spreadsheet", xmlStream);其中 xmlStream 是 MemoryStream。我认为解决方案必须是带有“工作簿”的东西,也许是 wb 的转换,但找不到。
  • 谢谢!只有一件事是 DataFormats.Html 而不是 DataFormats.HTML
猜你喜欢
  • 2017-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 2011-07-07
  • 1970-01-01
相关资源
最近更新 更多