4

.NETを使用したオフィスオートメーションの例を見るたびに、使用される言語はVB.NETです。

これは、元々、ExcelなどのOfficeアプリの自動化は、マクロでVB Scriptを使用してのみ実行でき、これらのマクロを作成したのと同じ人がVB.NETに引き寄せられる傾向があるためですか、それともOfficeオートメーションにC#を使用しない理由がありますか?

VB.NETのCr​​eateObjectを使用するのと同じように、C#からExcelクラスをインスタンス化できるように見えます。

excel = Type.GetTypeFromProgID("Excel.Application");

Excel Automationを使用して.NETプログラムを作成する必要がある場合、どの言語を使用しますか。また、VB.NETの例がある以外に、C#を回避する理由はありますか。

編集:

Microsoft Excel Objectライブラリへの明示的な参照とExcelクラスApplicationオブジェクトの明示的なインスタンス化を使用してコードを記述し、プログラムが基本的にテストされた後、遅延バインディングを使用してアプリを実行できるようにコードを変更することを考えていました。異なるバージョンのExcel。

コードは根本的に異なりますか?

たとえば、アーリーバインディングを使用してこれを行うことができます...

var excel2  = new Microsoft.Office.Interop.Excel.Application();
excel2.Visible = true;

レイトビッドでは、このような根本的に異なるコードを使用することを余儀なくされますか?

excel = Type.GetTypeFromProgID("Excel.Application");
excel.InvokeMember("Visible", BindingFlags.SetProperty, null, excelObject, parameter);
4

1 に答える 1

4

VB.NETで利用できるコード例は他にもありますが、両方をうまく使用しました。

私がすぐに思いつく違いの1つは、APIメソッドにはC#<4には存在しない数十億のオプションのメソッドパラメーターが含まれているように見えるため、次のようなことをしていることに気付くでしょう。

object missing = Type.Missing;
Excel.Application xl = new Excel.Application();
xl.Workbooks.Open(fileName, 0, true, 5, "", "", true, 
            Excel.XlPlatform.xlWindows, missing, missing, missing, 
            missing, missing, missing, missing);

VB.NETではこれだけではなく:

Dim xl As New Excel.Application()
xl.Workbooks.Open(fileName, 0, True, 5, "", "", true, Excel.XlPlatform.xlWindows)

VB.NETが提供する構文上の糖衣の一部は、OLEオートメーションライブラリまたは相互運用機能アセンブリを使用するアプリケーションの記述の簡潔さに大いに役立ちます。

編集:アーリーバインディングとレイトバインディングについては、レイトバインディングの経験があるとは言えません。この記事では、Officeアプリケーションの複数のバージョンに遅延バインディングを安全に実装するためのアプローチについて説明します。

記事からの引用:

...Officeアプリケーションの最高バージョンの相互運用機能を使用してアドインの開発を開始できます。これが行われると、このOfficeバージョンで導入された機能への早期バインディング呼び出しを遅延バインディング呼び出しに置き換えて、これらの呼び出しが機能することを確認できます。次に、プロジェクトで参照されている相互運用機能アセンブリを以前のバージョンのアプリケーションの相互運用機能に置き換えて、手順を繰り返すことができます。リファクタリングの一種。このアプローチが役立つかどうかにかかわらず、これが決定するのはあなたです

于 2012-09-11T18:25:37.807 に答える