3

これまでのところ、VSTOを使用し、次のようにアクティブなドキュメントにパッケージストリームを追加することで、カスタムプロパティをWordドキュメントに設定できました。

public static void SetCustomProperty(Microsoft.Office.Interop.Word.Document doc, string propertyName, object propertyValue)
{
    using (MemoryStream stream = new MemoryStream())
    using ((WordprocessingDocument wordDoc = WordprocessingDocument.Create(stream,  WordprocessingDocumentType.Document, true))
    {
        SetProperty(wordDoc, propertyName, propertyValue);
        // Flush the contents of the package.
        wordDoc.Package.Flush();
        // Convert back to flat OPC by using this in-memory package.
        XDocument xDoc = OpcHelper.OpcToFlatOpc(wordDoc.Package);
        // Return the xml string.
        string openxml = xDoc.ToString();
        // Add to Word doc
        doc.CustomXMLParts.Add(openxml);
    }
}

このSetProperty方法はここで説明されているように機能し、OpcHelperはここにあり、ここで説明されています

問題は、私のカスタムプロパティが、OpenXMLファイル形式のdocument.zip \ customXmlフォルダーにあるxmlファイル(例:item1.xml)に挿入されることです。後でカスタムプロパティを読みたいときWordProcessingDocument.CustomFilePropertiesPartは、空のプロパティを使用します。実際、これはdocument.zip \ docProps\custom.xmlファイルをCustomFilePropertiesPart参照していることがわかりました。

doc.CustomXMLParts.Add(openxml);したがって、適切なxmlファイル、つまりdocument.zip \ docProps \ custom.xmlにデータを入力するために何を使用する必要があるかを使用する代わりに、

編集 私はすでにMishraによって提案された解決策を試しましたが、成功しませんでした。つまり、カスタムプロパティが常に保存されるとは限りませんでした。しかし、彼がこの解決策を投稿したので、私は再試行しました。ここで、最初にドキュメントを未保存としてマークする必要があることがわかりました。

doc.CustomDocumentProperties.Add("MyProp", False, MsoDocProperties.msoPropertyTypeNumber, 123);
doc.Saved = false;
doc.Save();
4

1 に答える 1

0

CustomXMLParts コレクションを使用してカスタム プロパティを設定することはできません。ドキュメントを開いている場合は、それをシンプルに保ち、CustomDocumentProperties コレクションを使用すると、非常に高速で簡単になります。挿入するデータが大きく異なる場合にのみ、オープン ドキュメントでオープン XML を使用します。

于 2013-03-22T06:50:50.860 に答える