VSTO拖放在Excel中

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

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

我也可以将XML片段转换为文本并将其放到工作簿上。 然后在SheetChange处理程序中,我可以检查内容是否为XML,如果是,则进行适当的处​​理。

但是,如果XML包含一个<Table>标记,那么Excel会将其混乱,在触发SheetChange事件之前剥去所有XML标记并将文本节点粘贴到一起。 它似乎没有检查其他的东西; string<Table>出现在什么地方,或者其他XML是什么,或者即使文本表示格式良好的XML也没有关系。 只是出现的string就足以触发Excel中的某些处理,我无法find避开的方法。

所以这真的是两个问题:

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

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

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