【问题标题】:VSTO drag-and-drop in excelexcel中的VSTO拖放
【发布时间】:2011-06-27 11:57:17
【问题描述】:

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

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

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

但是,如果 XML 包含

标记,那么 Excel 就会把它弄得一团糟,剥离所有 XML 标记,并在触发 SheetChange 事件之前将文本节点粘贴在一起。它似乎没有检查其他任何东西;字符串
出现在哪里,或者存在什么其他 XML,或者即使文本表示格式正确的 XML,都无关紧要;只是出现的那个字符串就足以在 Excel 中触发一些我找不到规避方法的处理。

所以这真的是两个问题:

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

【问题讨论】:

    标签: xml excel drag-and-drop vsto


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      相关资源
      最近更新 更多