2011-06-27 80 views
4

我有一個VSTO Excel工作簿。在操作窗格中有一個TreeView,我希望能夠將其拖放到Excel單元格中。 TreeView中的數據存儲爲內存中的XML。將此XML轉換爲單元值的方式取決於它在工作簿中的放置位置,因此我希望能夠將XML放到工作簿上,然後在事件處理程序中對其進行解釋,而不是在調用之前進行轉換的DoDragDrop()。VSTO在excel中的拖放操作

我發現可以將選項卡和回車符分隔的文本從任務窗格拖放到單元格中,並且Excel將其轉換爲單元格表格佈局。如上所述,這不是我想要的。

我也可以將XML片段轉換爲文本並將其放到工作簿上。然後,在SheetChange處理程序中,我可以檢查內容是否爲XML,如果是,則進行適當處理。

但是,如果XML包含一個表>標記,那麼Excel會將其混亂,在觸發SheetChange事件之前剝去所有XML標記並將文本節點粘貼到一起。它似乎沒有檢查其他的東西;字符串<表>出現的位置或其他XML存在的位置無關緊要,或者即使文本表示格式良好的XML;只是出現的字符串足以觸發Excel中的某些處理,我無法找到避開的方法。

所以這實際上是兩個問題:

  1. 有沒有辦法在事件處理程序爲丟棄非文本對象(即System.Xml.XmlElement或類似)到一個Excel工作簿和捕捉對象在VSTO代碼?
  2. 如果沒有,是否有辦法在Excel爲我預處理之前捕獲粘貼的文本?

回答

0

雖然這是相當一個黑客,你試圖Microsoft.Office.Interop.Excel.Application.Undo()用Excel進行了更改,而持續的SheetChange事件的事件參數,得到你第二次機會做必要的處理將數據插入到工作簿使用你自己的定製方法?

我讀過Undo方法通常在Excel API的默認行爲中進行攻擊時非常有用。