2

マイクロソフトのサポートページであるVisualC#.NETを使用したOfficeオートメーションサーバーのバインドを見て、Excelワークシートを作成し、データテーブルに値を入力して、マシンに保存しようとしています。

早期バインディングを使用し、アイテムを単純にループする実装がありますが、遅延バインディングでこれをどのように実現するかわかりません。アプリケーションのバージョンを独立させるには、相互運用機能タイプを埋め込むことができる必要があります。 MSOfficeに関して。

実行時バインディングを使用して、データテーブルから新しいExcelワークシートに行を追加するにはどうすればよいですか?

4

1 に答える 1

1

インターフェイスを作成し、データ母集団のステップとExcelのステップを抽象化することをお勧めします。そうすれば、Excelを使用して初期のバインドを実装して処理を実行し、次にこのインターフェイスを使用してExcelシートにデータを入力するエンジンを作成できます。ステップ2は、アーリーバインディングではなく、レイトバインディングを使用してインターフェイスの2番目の実装を作成することです。次に、インターフェイスを作成するときに、コードの最初の実装を2番目の実装に置き換えるだけです。

コードでは、インターフェイス自体の1つのオブジェクトのみを作成します。ただし、作成するときは、そのインターフェイスを実装する他のクラス/実装として割り当てることができます...これが私自身のコードの例です。

ISpreadsheetControl SSInterface;
if (conditionCheck())
    SSInterface = new ExcelImplementer();
else
    SSInterface = new OpenOfficeImplementer();

データを配置したりページ設定を変更したりするときなど、1つのオブジェクトSSInterfaceのみを使用します...他に実装したものは何でも...しかし、ロード時にインターフェイスに割り当てたクラスに基づいて、2つの異なる方法で使用できます時間。

「ハウツー」の詳細と詳細については...あなたが提供したリンクの2番目の例は確かに非常に役立つと思います。タイプと呼び出しについてのすべてです。難しいのは、いつでも何を扱っているかを追跡することです。これは、作業を困難にするものの1つであり、最初に初期バインディングの実装を抽出するのに十分な理由です。そうすれば、2番目のメソッドを作成するときに、必要なすべてのメソッド名とそれらのパラメーターリストを確認できます。

また、これを追加したいと思います。あなたの質問に対する非常に単純で短い答えは、「これまでとまったく同じように実行する」です。データを入力するメソッドを呼び出す方法を変更するだけです。残りのExcel相互運用機能とそれに伴う実装。

アップデート

これはあなたが探しているものを実行するかもしれないと思いますが、それはかなり厄介なので、どこかで独自の別のメソッドに入れることをお勧めします(実際には両方の操作、一方は他方を呼び出すことができます)。

//Get a range object that contains the cell.
Parameters = new Object[2];
Parameters[0] = iRow + 1;
Parameters[1] = iCol;
objRange_Late = objSheet_Late.GetType().InvokeMember( "Cells",
    BindingFlags.GetProperty, null, objSheet_Late, Parameters );

//Write value in cell
Parameters = new Object[1];
Parameters[0] = row[col.ColumnName];
objRange_Late.GetType().InvokeMember( "Value", BindingFlags.SetProperty, 
    null, objRange_Late, Parameters );

私は認めなければなりません、私は今これをテストできる実装を持っていません、しかし私がそれについて知っていることによれば、それはうまくいくはずです。「Cells」が機能しない場合は、「Range」と同じコードを使用します...実際には、それが数値入力を受け取るかどうかはわかりません。

セルのプロパティの説明へのリンク(msdn)

また、そのシステム全体を少し調べたいと思うかもしれません。それはあなたが探しているかもしれないもののいくつかを見つけるのを助けることができます。

上記のコードを正常に作成およびテストするために管理され、完全に機能します。

于 2012-05-30T12:01:21.310 に答える