2011-06-27 19 views
4

VSTO Excelワークブックを持っています。アクションペインにはTreeViewがあり、このアイテムをExcelセルにドラッグアンドドロップできるようにしたいと考えています。 TreeViewのデータは、メモリ内のXMLとして格納されます。このXMLをセル値に変換する方法は、ワークブックのどこにドロップされるかによって異なります。したがって、XMLをブックにドロップしてから、イベントハンドラで解釈できるようにしてから、コールする前に変換するDoDragDrop()。VSTOでのドラッグ&ドロップでExcel

タブとキャリッジリターンで区切られたテキストをタスクペインのセルにドロップすることが可能であり、Excelがこれをセルテーブルレイアウトに変換することができることを発見しました。上記のとおり、これは私が望むものではありません。

XMLフラグメントをテキストに変換してブックにドロップすることもできます。次に、SheetChangeハンドラで、コンテンツがXMLであるかどうかをチェックし、コンテンツがあればそれを適切に処理できます。

しかし、XMLに<テーブル>タグが含まれていると、Excelはそれを混乱させ、すべてのXMLタグを取り除き、SheetChangeイベントが発生する前にテキストノードを貼り付けます。それ以外は何もチェックしていないようです。文字列< Table>がどこに表示されているか、または他のXMLがどこにあるか、またはテキストが整形式XMLを表している場合でも問題ありません。その文字列が表示されるだけで、Excelで処理を開始するには十分であり、回避する方法を見つけることはできません。

だから、これは実際には2つの質問です:

  1. Excelワークブックに非テキストオブジェクト(すなわちSystem.Xml.XmlElementまたは類似)をドロップし、イベントハンドラでオブジェクトをキャッチする方法はありますVSTOコードで?
  2. もしそうでなければ、Excelがそれを前処理する前に貼り付けられたテキストをキャッチする方法はありますか?

答えて

0

それは非常にハックですが、SheetChangeイベントのイベント引数を永続化しているときに、ブックにデータを挿入するためにあなたに必要な処理を行うための第2のチャンスを与える、Excelで行われた変更をMicrosoft.Office.Interop.Excel.Application.Undo()しようとしています独自のカスタムアプローチを使用していますか?

私は、Undoのアプローチは、Excel APIのデフォルトの動作をハッキングするときにしばしば非常に役に立ちますと読んだことがあります。

関連する問題