1

Word .doc (Word 97 - 2003) で既存のカスタム プロパティをプログラムで更新しようとしています。最初は Aspose で解決しましたが、ライセンスが限られているため、このプロジェクトでは使用できません。

このコードは、エクセルの代わりにワードのマイナーな変更を加えて、ここから大規模に取得されます プログラムによる Excel カスタム ドキュメント プロパティへのアクセス.

最初の方法は、カスタム プロパティが存在しない場合に追加するために機能し、2 番目の方法はカスタム プロパティを取得できます。既に存在するプロパティを更新する方法がわかりません。InvokeMember() の動詞と関係があるのではないかと思いますが、あまりドキュメントが見つかりません。

   public void SetDocumentProperty(string propertyName, string propertyValue)
    {
        object oDocCustomProps = oWordDoc.CustomDocumentProperties;
        Type typeDocCustomProps = oDocCustomProps.GetType();

        object[] oArgs = {propertyName,false, 
                             MsoDocProperties.msoPropertyTypeString, 
                             propertyValue};

        typeDocCustomProps.InvokeMember("Add",
                                        BindingFlags.Default | BindingFlags.InvokeMethod,
                                        null,
                                        oDocCustomProps,
                                        oArgs);

    }

    public object GetDocumentProperty(string propertyName, MsoDocProperties type)
    {
        object returnVal = null;

        object oDocCustomProps = oWordDoc.CustomDocumentProperties;
        Type typeDocCustomProps = oDocCustomProps.GetType();

        object returned = typeDocCustomProps.InvokeMember("Item",
                                                           BindingFlags.Default |
                                                           BindingFlags.GetProperty, null,
                                                           oDocCustomProps, new object[] { propertyName });

        Type typeDocAuthorProp = returned.GetType();
        returnVal = typeDocAuthorProp.InvokeMember("Value",
                                                   BindingFlags.Default |
                                                   BindingFlags.GetProperty,
                                                   null, returned,
                                                   new object[] { }).ToString();

        return returnVal;
    }
4

2 に答える 2

3

正しい答えが見つかったかどうかはわかりませんが、このページにアクセスして既存のカスタム ドキュメント プロパティを設定しようとしている人のために。最初に を使用してドキュメント プロパティを取得し、BindingFlags.GetProperty次に を使用BindingFlags.SetPropertyして取得した特定のアイテムの値を設定する必要があるようです。

カスタム チェックを追加して、設定しようとしているオブジェクトが有効であることを確認することもできます。

    public void SetDocumentProperty(string propertyName, object value)
    {
        // Get all the custom properties
        object customProperties = wordDocument.CustomDocumentProperties;
        Type customPropertiesType = customProperties.GetType();

        // Retrieve the specific custom property item
        object customPropertyItem = customPropertiesType.InvokeMember("Item",
            BindingFlags.Default | BindingFlags.GetProperty, null, customProperties,
            new object[] { propertyName });
        Type propertyNameType = customPropertyItem.GetType();

        // Set the value of the specific custom property item
        propertyNameType.InvokeMember("Value", BindingFlags.Default | BindingFlags.SetProperty, null,
            customPropertyItem, new object[] { value });
    }
于 2014-10-30T15:03:55.620 に答える
0

通常、すべての小道具をリストに取得してドキュメントから削除し、値を変更して再度挿入します。DSOFile.dll アプローチを使用します

于 2013-05-08T14:47:38.673 に答える