4

Excel.Applicationをインスタンス化して開くためにC#4.0を使用していますExcel.Workbook。分解すると、私のコードは次のようになります。

Excel.Application xlApp;
Excel.Workbook xlWorkBook;

xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Open("someFile");

このOpen()メソッドには、提供する必要のないオプションの値がたくさんあります。これらのオプションのパラメータのデフォルト値がわからないことを除けば、これは便利です。そのため、価値を提供する必要があるかどうかを判断することはできません。

この場合、 MSDNドキュメントでいくつかのパラメータに必要な情報を見つけることができます。COM相互運用機能タイプのオプションパラメータのデフォルト値を決定する一般的な方法はありますか?

アップデート:

oleviewonを使用して、インターフェイスMSO.dllに対応するIDLをチェックアウトしました。Workbookメソッドの場合SaveAs()、次のようになります。

HRESULT SaveAs(
    [in, optional] VARIANT Filename,
    [in, optional] VARIANT FileFormat,
    [in, optional] VARIANT Password,
    blahblah...
    [in, optional, defaultvalue(1)] XlSaveAsAccessMode AccessMode,
    blahblah...
    [in, optional] VARIANT Local,
    [in, lcid] long lcid);

Visual Studioでは、ほとんどのパラメーターに対してインテリセンスが表示されます。これは、IDLがタイプ( )やデフォルト値[object Filename = Type.Missing]に関する情報を提供しないため、理にかなっていると思います。VARIANTただし、パラメータについてはAccessMode、IDLが必要な情報を提供し、インテリセンスがそれを示します。

したがって、質問は次のようになると思います。IDLが、すべてのパラメーターのタイプ(およびデフォルト値)について、それがそうであるように、より具体的でないのはなぜAccessModeですか?

4

1 に答える 1

3

IDLがタイプ(およびデフォルト値)についてより具体的でないのはなぜですか

タイプに固有で、VARIANTです。デフォルト値について具体的にする必要はありません。バリアントは「指定なし」を指定できます。タイプライブラリでデフォルト値を実際に指定することは可能ですが、リバースエンジニアリングされたIDLからそれを確認しました。

ここには多くの柔軟性があります。ただし、バリアント値が「指定されていない」場合、COMサーバーは、デフォルトと見なされる値を置き換えるか、指定されていない値に特定の動作を与えます。それが何であるかを知る唯一の方法は、ドキュメントを介することです。これは確かに常に恒星ではありません。

于 2012-06-30T00:31:46.913 に答える