1

VSTO で Office オブジェクト モデルを操作するためのパラメーターの多くは、パラメーターの概念的な型が int または string であっても、参照によって渡されるオブジェクト パラメーターを必要とします。

  1. このメカニズムは、コードがパラメーターを変更できるようにするために使用されていると思いますが、これらをより適切な型としてではなく、汎用オブジェクトとして渡す必要がある理由がわかりません。誰でも私を啓発できますか?
  2. 私が使用してきたメカニズム (ヘルプと MSDN リソースから引用) は、基本的に、適切なデータを含む汎用オブジェクトを作成し、それをメソッドに渡します。次に例を示します。

    object nextBookmarkName = "NextContent"; オブジェクト nextBookmark = this.Bookmarks.get_Item( ref nextBookmarkName ).Range;

    Microsoft.Office.Interop.Word.Range newRng = this.Range( ref nextBookmark, ref nextBookmark );

これは多くの余分なコードのように思えますが、それを行うためのより良い方法が見つかりません。私は何かが欠けていると確信しています。それは何ですか?それとも、これは本当にベストプラクティスですか?

4

4 に答える 4

2

私はジョーに同意します。次のようなヘルパー構造体とクラスも開発しました。

internal struct Argument
{
    internal static object False = false;

    internal static object Missing = System.Type.Missing;

    internal static object True = true;
}

そしてこれ:

/// <summary>
/// Defines the "special characters"
/// in Microsoft Word that VSTO 1.x
/// translates into C# strings.
/// </summary>
internal struct Characters
{
    /// <summary>
    /// Word Table end-of-cell marker.
    /// </summary>
    /// <remarks>
    /// Word Table end-of-row markers are also
    /// equal to this value.
    /// </remarks>
    internal static string CellBreak = "\r\a";

    /// <summary>
    /// Word line break (^l).
    /// </summary>
    internal static string LineBreak = "\v";

    /// <summary>
    /// Word Paragraph break (^p).
    /// </summary>
    internal static string ParagraphBreak = "\r";
}

そして、さらにいくつか...

于 2008-10-03T03:36:12.163 に答える
0

元の Word オブジェクト モデルの設計が悪かっただけだと思います。参照による文字列の受け渡しは、コピーを作成する必要がないため、COM の世界ではわずかに高速になる可能性があることを知っているので、おそらくそれが正当化の一部でした。ただし、欠点は、呼び出し先が値を変更できることです。ほとんどの場合、Word では値は入力パラメーターです。

あなたのテクニックはベストプラクティスだと思います。Word オブジェクト モデル メソッドの多くが必要とする何百万ものオプション パラメータについては、次のような「欠落している」単一の静的フィールドを作成できます。

オブジェクトがありません = Type.Missing;

// オブジェクトの例 fileName = ... document.SaveAs(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref行方不明、参照行方不明、参照行方不明、参照行方不明);

于 2008-09-16T17:41:56.490 に答える
0

私もこれに興味があるでしょう。Wordで自動化を使用するいくつかのアプリをコーディングしていますが、次のようなものもあります

object oFalse = false, oTrue = true, oOne = 1;

とても厄介ですが、今のところ私が知っている唯一の方法です。

私が考えることができる唯一のことは、頻繁に使用される関数のラッパークラスを書くことです...

于 2008-09-16T15:02:00.570 に答える
0

これはすべて、VS.NET 2010 と、c# 4.0 で導入された新しい言語構成要素で処理されていると思います (c# にはオプションの引数があります)。

オフィス開発に関連する変更については、channel9 の PDC 2008 での Anders Hejlberg によるビデオを参照してください。

そのリンクが見つかりませんが、これも役立つ可能性があります。
http://channel9.msdn.com/shows/Going+Deep/Inside-C-40-dynamic-type-optional-parameters-more-COM-friendly/

于 2008-11-02T08:31:07.353 に答える