문제

앱이 템플릿을 기반으로 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

이것은 조잡하지만 아름답게 간단하다고 느낍니다 (최종 사용자를 위해).

다른 사람 이이 길을 내려 갔습니까? 문제가 있습니까? 문서의 일반 텍스트의 다른 곳에서 "{"및 "}"문자를 사용하지 말 것을 권고하지만 실제로는 중요한 제한이 아닙니다.

속도? 합병 필드를 두 줄로 감싸고 있습니까? 다른 문제?

도움이 되었습니까?

해결책

이것은 내가 찾고 교체하는 데 사용한 내 코드의 일부입니다. 코드를 먼저 시도했지만 작동하지 않았습니다. 이것은 매크로를 녹음 할 때 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 형식을 사용할 수있는 경우 단어를 설치할 필요가 없습니다. 문서를 압축 해제하고 단어 document.xml 파일을 찾으십시오. String.Replace("[OldValue]", "New value"), 파일을 저장하고 하나의 패키지 (DOCX 파일)로 다시 지퍼하십시오. 여기에 표시 한 코드는 단어를 자동화하기 때문에 매우 느립니다. 단어 열기, 6 개의 필드로 2 개의 문서를 편집하고 앱을 닫는 것은 내 PC에서 4 초가 걸립니다.

다른 팁

사용자가 Curly Braces를 사용하려면 어떻게해야합니까? 예를 들어 탈출 할 수있는 방법을 제공해야한다고 생각합니다. /{/} 또는 {{}} 등.

예를 들어 {customersurname} 및 {customersurname}과 같은 대체 로직이 사례 둔감한지 확인해야합니다. {customer surname}과 같은 단어 사이의 공백을 선택적으로 허용 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top