我可以通过剪贴板将一个对象传递给Excel AddIn吗?

我有2个应用程序:一个基于WPF DataGrid,另一个是Excel AddIn。

我的目标是通过剪贴板将数据从前者传递给后者。

我没有问题复制制表符分隔,cuadriculated数据到常规的Excel“粘贴”操作。 另外,我实施了我自己的“智能粘贴”。

当我决定复制+粘贴更复杂的对象时,我的麻烦就开始了。 我把所有的类标记为[Serializable],并有一个方法确保对象可以被序列化。 事实上,整个操作完美的提供了粘贴的应用程序不是Excel的AddIn。

传递的对象是一个名为Engineering.Export.Exported的类。 正如我们所看到的,剪贴板看起来很好:

http://patriot.net/~ramon/misc/Copy-is-Okay.png

见3条相关的陈述。 它们在两种应用中都是相同的。

http://patriot.net/~ramon/misc/Failed-Assignment.png

最后的分配只在我需要的应用程序中失败。

我已经尝试了很多组合,例如GetData(“ExportFormat”),但结果是一样的。

任何提示,build议都非常受欢迎。

TIA

加成:

我准备了一个超简单的对象:

namespace Engineering { [Serializable] public class SimpleStuff { public string Greetings; public int GraduationYear; public bool Available; } } 

问题仍然存在:我可以将它导出到 VSTO AddIn 之外的任何应用程序中。 最后一条语句总是在AddIns中返回null。

如果你擅长debugging,你可以“testing”这个types是什么:

 private void pasteButton_Click(object sender, RoutedEventArgs e) { var dataObject = Clipboard.GetDataObject(); if (dataObject != null) { Exported incomingObject; if (dataObject.GetDataPresent(typeof(Exported))) { incomingObject = dataObject.GetData(typeof(Exported)); } else { var obj = dataObject.GetData(typeof(Object)); incomingObject = obj as Exported; } if (incomingObject != null) { // what you want to do with it can go here } } } 

Console.WriteLine上放置一个断点,看看dataTypevariables是什么。

当然,确保你只用你感兴趣的数据types进行testing。

让我知道这是怎么回事。

运行一个非AddIn应用程序的实验后,我发现这个问题。 这个语句不是返回null,而是有关缺less程序集的错误消息。

解决scheme是创build一个单独的MSVS项目,其中只包含要传输的对象,编译它并在它的两个应用程序中添加一个引用。

感谢Eric J.