VSTO在Excel中拖放

时间:2011-06-27 11:57:17

标签: xml excel drag-and-drop vsto

我有一个VSTO Excel工作簿。在操作窗格中有一个TreeView,我希望能够将项目拖放到Excel单元格中。 TreeView中的数据存储为内存中的XML。将XML转换为单元格值的方式取决于它被删除的工作簿中的位置,因此我希望能够将XML删除到工作簿上,然后在事件处理程序中解释它,而不是在调用之前进行转换的DoDragDrop()。

我发现可以删除由制表符和回车符分隔的文本到任务窗格中的单元格,Excel将其转换为单元格表布局。如上所述,这不是我想要的。

我还可以将XML片段转换为文本并将其放到工作簿上。然后在SheetChange处理程序中,我可以检查内容是否是XML,如果是,则检查它是否正确。

但是,如果XML包含<表>标记,然后Excel弄乱它,剥离所有XML标记,只是在触发SheetChange事件之前粘贴文本节点。它似乎没有检查任何其他东西;字符串< Table>的位置无关紧要出现,或者存在其他XML,或者即使文本代表格式良好的XML;只是出现的字符串足以触发Excel中的一些处理,我找不到办法绕过它。

所以这真的有两个问题:

  1. 有没有办法将非文本对象(即System.Xml.XmlElement或类似对象)放到Excel工作簿上,并在VSTO代码中捕获事件处理程序中的对象?
  2. 如果没有,有没有办法在Excel为我预处理它之前捕获粘贴的文本?

1 个答案:

答案 0 :(得分:0)

虽然这是一个非常糟糕的行为,你是否尝试Microsoft.Office.Interop.Excel.Application.Undo() Excel所做的更改,同时保留SheetChange事件的事件参数,为您提供第二次机会进行必要的插入处理使用自己的自定义方法将数据导入工作簿?

我已经读过,在隐藏Excel API中的默认行为时,Undo方法通常非常有用。