3

アプリがテンプレートに基づいて Word ドキュメントを生成するための正しい方法は、(テンプレートを管理する) 管理者ユーザーにテンプレート ドキュメントに正しい差し込みフィールドまたはブックマークを埋め込むように勧めることです。

しかし、これまで、通常は MailMerge や Word のその他の「高度な」機能を使用しない一般的な管理者ユーザーが、差し込みフィールドを使用しなければならないことで大幅に後回しになっていることがわかりました。私たちは彼らのために、ドキュメンテーションやたくさんのスクリーンショットなどを作成してみました。

彼らは何十ものテンプレートを持っており (すべて異なる種類の非常に単純な文字にすぎません)、かなり頻繁にそれらを変更したいと考えています。

彼らが本当に望んでいるのは、次のように、中かっこのような単純な区切り記号でフィールドをマークできるようにすることです。

{CustomerSurname} 様

次に、次のように数行のコードでフィールドを取得できます。

w = New Word.Application
d = w.Documents.Open(...)
Dim mergedContent As String = d.Content.Text
mergedContent = mergedContent.Replace("{CustomerSurname}", Customer.Surname)
mergedContent = mergedContent.Replace("{CustomerPostcode}", Customer.Postcode)
d.Content.Text = mergedContent

これは大雑把に感じますが、美しくシンプルです (エンド ユーザーにとって)。

他の誰かがこのルートを下ったことがありますか? 何か問題がありますか?ドキュメントの通常のテキストの他の場所では "{" と "}" の文字を使用しないことをお勧めしますが、これは実際には重大な制限ではありません。

スピード?差し込み項目を 2 行で折り返しますか? その他の問題?

4

2 に答える 2

3

これは、私が見つけて置き換えていたコードの一部です。最初にあなたのコードを試しましたが、うまくいきませんでした。これは、マクロを記録するときに Word が生成する VBA コードに基づいています。

range = document.Range()

With range.Find
 .Text = "{" & name & "}"
 .Replacement.Text = NewValueHere
 .Forward = True
 .Wrap = Word.WdFindWrap.wdFindContinue
 .Format = False
 .MatchCase = True
 .MatchWholeWord = False
 .MatchWildcards = False
 .MatchSoundsLike = False
 .MatchAllWordForms = False
End With
range.Find.Execute(Replace:=Word.WdReplace.wdReplaceAll)

このコードを使用したのは、ドキュメントが Office バイナリ ファイル形式と互換性がある必要があるためです。Office 2007 形式を使用できる場合は、Word をインストールする必要はありません。ドキュメントを解凍し、word\document.xml ファイルを見つけて を実行しString.Replace("[OldValue]", "New value")、ファイルを保存して 1 つのパッケージ (docx ファイル) に戻します。ここに表示するコードは、Word を自動化しているため、かなり低速です。私の PC では、Word を開いて 6 つのフィールドを持つ 2 つのドキュメントを編集し、アプリを閉じるのに 4 秒かかります。

于 2009-11-12T14:16:25.977 に答える
1

ユーザーが中括弧を使用したい場合はどうなりますか? /{/}たとえば、それらをエスケープする方法を提供する必要があると思います{{}}

{CustomerSurname} と {Customersurname} の両方が同じフィールドを表すことができるようにするなど、置換ロジックで大文字と小文字が区別されないようにする必要があります。オプションで、{Customer surname} のように単語間にスペースを入れることもできます。

于 2009-10-12T14:10:05.083 に答える