我有2个应用程序:一个基于WPF DataGrid,另一个是Excel AddIn。
我的目标是通过剪贴板将数据从前者传递到后者。
将制表符分隔的cuadriculated数据复制到常规Excel“粘贴”操作中没有问题。另外,我实现了自己的“智能粘贴”。
当我决定复制+粘贴更复杂的对象时,我的麻烦就开始了。我将所有类标记为[Serializable]并且有一个方法可以确保对象可以序列化。事实上,只要粘贴应用程序不是Excel AddIn,整个操作就可以完美运行。
传递的对象是名为Engineering.Export.Exported的类。我们可以看到,剪贴板看起来很好:
参见3个相关陈述。它们在两种应用中都是相同的。
最后一次分配仅在我需要它的应用程序中失败。
我尝试了很多组合,例如GetData(“ExportFormat”),但结果是一样的。
非常欢迎任何提示,建议。
TIA
增加:
我准备了一个超级简单的对象:
namespace Engineering
{
[Serializable]
public class SimpleStuff
{
public string Greetings;
public int GraduationYear;
public bool Available;
}
}
问题仍然存在:我可以将其导出到任何应用程序,除了一个VSTO AddIn。最后一个语句总是在AddIns中返回null。
答案 0 :(得分:1)
如果您擅长调试,可以“测试”类型:
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
上放置一个断点,看看dataType
变量是什么。
当然,请确保您只测试您感兴趣的数据类型。
让我知道这是怎么回事。
答案 1 :(得分:0)
使用非AddIn应用程序运行一些实验后,我发现了问题。而不是返回null,有问题的语句失败,并显示有关缺少程序集的错误消息。
解决方案是在所涉及的两个应用程序中创建一个单独的MSVS项目,该项目仅包含要传输的对象,编译它并添加对它的引用。
感谢Eric J.