1

Word文書をローカルマシンで正しく動作させるのに苦労した後、サーバーにMicrosoftOfficeがないことを理解しました。ドキュメントを開いたり、変更したり、保存したり、表示したりしようとしています。OPEN XMLSDK2.0がその方法だと思いました。今朝このプログラムをダウンロードしたばかりですが、これをコードに統合する方法がわかりません。どうすればこれを行うことができますか?

私はブラインドで飛んでいます、これが私がやりたいことです。このコードはオフィスで機能します

object pathToUse = Server.MapPath("~/Document/TemplateX.docx");
object pathToSave = Server.MapPath("~/Document/FinishedX.docx");

//open file
tempDoc = wordApp.Documents.Open(ref pathToUse, ref missing,
   ref missing, ref missing, ref missing, ref missing,
   ref missing, ref missing, ref missing, ref missing,
   ref missing, ref isVisible, ref missing, ref missing,
   ref missing, ref missing);

//Make edits - I had this for my word document
this.FindAndReplace(Application wordApp, "<date>", DateTime.Today.ToShortDateString());

//save
tempDoc.SaveAs(ref pathToSave, ref missing,
   ref missing, ref missing, ref missing, ref missing,
   ref missing, ref missing, ref missing, ref missing,
   ref missing, ref isVisible, ref missing, ref missing,
   ref missing, ref missing);

//return file in my Controller
return File(pathToSave.ToString(), "docx");

必要なものがあることを示すコードを追加しましたが、Microsoftのカーブボールがないために精神的な問題が発生しました。前もって感謝します。ヘルプ!

4

1 に答える 1

2

OpenXml SDK ではそれが可能ですが、Word でテンプレートを編集する際に発生する可能性がある特殊なケースを考慮する必要がある場合があります。たとえば、同じスタイルのテキストが複数の要素に分割されている場合などです。

まず、VS2010 用の Open XML アドインをダウンロードします。VS2010 で .docx ファイルをドラッグし、パッケージ内の document.xml を探し、Ctrl-KD を押して読みやすいようにドキュメントをフォーマットします。

SDK に付属の DLL をプロジェクトに追加します。

ストリームから Word 文書を開きます。その前に必ずテンプレート ファイルをコピーしてください。

using (var document = WordprocessingDocument.Open(stream, true))
                {
...
}// document auto-saves when done

タグ内のテキストを置き換えます:

List<Text> textElements = document.MainDocumentPart.Document.Body.Descendants<Text>()
    .Where(t=>t.InnerText == "<date>").ToList();
textElements.ForEach(te=>te.InnerText = DateTime.Today.ToShortDateString());

このサンプルで作業を開始できますが、特にドキュメントが複雑な場合は、Word が予期しない奇妙な方法で XML を構造化することが予想されます。

于 2013-01-29T20:31:31.223 に答える