xml - VSTO 在 Excel 中拖放

标签 xml excel drag-and-drop vsto

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

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

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

但是,如果 XML 包含一个

标签,那么 Excel 会把它弄得一团糟,去除所有 XML 标签,并在触发 SheetChange 事件之前将文本节点粘贴在一起。它似乎没有检查任何其他东西;字符串
出现在哪里,或存在什么其他 XML,甚至文本是否表示格式良好的 XML 都无关紧要;仅出现该字符串就足以触发 Excel 中的某些处理,我无法找到规避的方法。

所以这实际上是两个问题:

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

最佳答案

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

我读到过 Undo 方法在破解 Excel API 中的默认行为时通常非常有用。

关于xml - VSTO 在 Excel 中拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6492475/