それで、最初に、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を派生させます。
前もって感謝します!