1

それで、最初に、dotxを開いて、新しいdocxコピーを作成するための私のコードがあります(そのコピーが次に変更されます)。簡潔にするためにカットしますが、基本的に3つのパラメータをデータテーブル(レガシーシステムで使用できるようにするため)、テンプレートへの文字列としてのUNCパス、および出力ドキュメントへの文字列としてのUNCパスを取ります。

using (WordprocessingDocument docGenerated = WordprocessingDocument.Open(outputPath, true))
{
    docGenerated.ChangeDocumentType(WordprocessingDocumentType.Document);

    foreach (SimpleField field in docGenerated.MainDocumentPart.Document.Descendants<SimpleField>())
    {
        string mergeFieldName = GetFieldName(field).Trim();

        DataRow[] dr = dtSchema.Select("FieldName = '" + mergeFieldName + "'");

        if (dr.Length > 0)
        {
            string runProperties = string.Empty;
            foreach (RunProperties property in field.Descendants<RunProperties>())
            {
                runProperties = property.OuterXml;
                break;
            }

            Run run = new Run();
            run.Append(new RunProperties(runProperties));
            run.Append(new Text(dr[0]["FieldDataValue"].ToString()));

            field.Parent.ReplaceChild<SimpleField>(run, field);
        }
    }

    docGenerated.MainDocumentPart.Document.Save();
}

私が最初にしたことは、.dotテンプレートを取得し、それを.dotxとして再保存して、指を交差させただけで、機能しませんでした。そこで、代わりに.dotxのすべてのマージフィールドを削除して、もう一度追加してみました。これは機能しましたが、(SimpleFieldとして)1つのマージフィールド、具体的には.dotxを保存する前に追加された最後のフィールドしか見つかりませんでした。オープンXML生産性ツールを使用してテンプレートをさらに見ると、他のすべてのマージフィールドがタイプw:instrTextであることがわかります。これが、それらが無視されている理由です。

現在のオフィスオートメーションをOpenXMLに置き換えることを検討しているため、文字通りOpenXMLを使い始めたばかりなので、現時点ではほとんどわかりません。誰かが私にもう少し教えてくれますか、それとも私に良いリソースを教えてもらえますか?私は少しグーグルで回りましたが、私は私の特定の問題を見つけることができません。ソリューションをすばやくまとめる必要があるため、SDKドキュメント全体を読むのを延期しようとしています(私は知っています!)。既存の.dotテンプレートを取得し、それらをに変換するという単一のタスクに焦点を当てています。 .dotxを作成し、マージフィールドをデータに置き換えて.docxを派生させます。

前もって感謝します!

4

3 に答える 3

4

OpenXmlの操作-テンプレートに.dotxを厳密に使用する必要はありません。代わりに、DocXを使用してすぐにテンプレートを作成できます。OpenXMLを学ぶための優れたリソースは、明らかにhttp://openxmldeveloper.org/であり、そこで優れたpdfを読むことができます。

また、会社のサーバー側のドキュメント自動化ソリューションを開発するために現在使用しているサードパーティのAPIdocx.codeplex.comも一見の価値があります。シナリオに似たhttp://cathalscorner.blogspot.co.uk/2009/08/docx-v1007-released.htmlの例を参照してください。フィールドとデータをマージします。これがお役に立てば幸いです。

于 2012-03-22T16:09:54.313 に答える
2

「C#OpenXMLメールマージの完全な例」へのリンクは次のとおりですhttp://www.jarredcapellman.com/2012/10/22/c-openxml-mail-merge-complete-example/

これを使用して、.DOC(.DOT)ファイルのマージフィールドで機能していたWebアプリケーションコードを更新しました(MS Wordをインストールし、対応するDCOMをWebサーバーに構成する必要がありました)。このソリューションでは、OpenXML SDK 2.0をWebサーバーにインストールし、.DOC(.DOT)テンプレートを.DOCX(.DOTX)として保存する必要があります。

于 2013-03-07T03:59:15.837 に答える
0

コンテンツコントロールを使用する場合は、WordDocumentGeneratorを試すこともできます。WordDocumentGeneratorは、VisualStudio2010およびOpenXML2.0 SDK@ http: //worddocgenerator.codeplex.comを使用してテンプレートからWord文書を生成するためのユーティリティです。

于 2012-03-22T21:40:14.927 に答える