相互運用機能を使用せずに既存の.docx
ドキュメントにマージフィールドを追加し、CodeBehind のオープン SDK のみで処理することはできますか?
質問する
1919 次
1 に答える
2
はい、可能です。差し込みフィールドに割り当てたい名前を渡すだけの簡単なメソッドを以下に作成しました。以下のコードは新しいドキュメントを作成するためのものですが、メソッドを使用して既存のドキュメントに追加するのは簡単なはずです。これがお役に立てば幸いです。
using System;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
using (WordprocessingDocument package = WordprocessingDocument.Create("D:\\ManualMergeFields.docx", WordprocessingDocumentType.Document))
{
package.AddMainDocumentPart();
Paragraph nameMergeField = CreateMergeField("Name");
Paragraph surnameMergeField = CreateMergeField("Surname");
Body body = new Body();
body.Append(nameMergeField);
body.Append(surnameMergeField);
package.MainDocumentPart.Document = new Document(new Body(body));
}
}
static Paragraph CreateMergeField(string name)
{
if (!String.IsNullOrEmpty(name))
{
string instructionText = String.Format(" MERGEFIELD {0} \\* MERGEFORMAT", name);
SimpleField simpleField1 = new SimpleField() { Instruction = instructionText };
Run run1 = new Run();
RunProperties runProperties1 = new RunProperties();
NoProof noProof1 = new NoProof();
runProperties1.Append(noProof1);
Text text1 = new Text();
text1.Text = String.Format("«{0}»", name);
run1.Append(runProperties1);
run1.Append(text1);
simpleField1.Append(run1);
Paragraph paragraph = new Paragraph();
paragraph.Append(new OpenXmlElement[] { simpleField1 });
return paragraph;
}
else return null;
}
}
}
Open Xml Productivity Tool は、この URL からダウンロードできます (まだお持ちでない場合) http://www.microsoft.com/download/en/details.aspx?id=5124 このツールには、「コードの反映」機能があります。 .したがって、MS Word ドキュメントで手動で差し込みフィールドを作成し、生産性向上ツールでドキュメントを開き、コードでこれを行う方法について C# コード サンプルを確認できます!非常に効果的で、私はこの正確なツールを使用して上記のサンプルを作成します。
于 2011-11-14T09:09:03.690 に答える