سؤال

من الواضح أن الطريقة الصحيحة لتطبيقنا لإنشاء مستند Word استنادًا إلى قالب هو تشجيع مستخدمي المسؤولين (الذين سيعتنون بالقوالب) لتضمين حقول الدمج الصحيحة أو الإشارات المرجعية في مستند القالب.

ومع ذلك ، فقد وجدنا في الماضي مستخدم المشرف النموذجي الذي لا يستخدم عادة Mailmerge أو أي من الميزات "المتقدمة" الأخرى في Word يتم تأجيلها بشكل كبير من خلال استخدام حقول الدمج. لقد حاولنا القيام بذلك من أجلهم ، وإنتاج الوثائق ، والكثير من لقطات الشاشة وما إلى ذلك ، لكن الأمر كله "بغيض" بالنسبة لهم.

لديهم العشرات من القوالب (كل أنواع مختلفة من الرسائل البسيطة حقًا) ، وسوف يرغبون في تعديلها بشكل متكرر بشكل معقول.

ما يرغبون فيه حقًا هو أن تكون قادرًا على تحديد الحقول ذات المحدد البسيط مثل الدعامة المجعد ، والتي تمثل فعليًا حقل دمج محلي الصنع إلى تطبيقنا (على الرغم من أن الكلمة غافلة عن أهميتها) كما في:

عزيزي {customerurnam}

ثم يمكننا فقط التقاط الحقل (الحقل) مع عدة أسطر من التعليمات البرمجية كما في:

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

هذا يشعر الخام ، لكنه بسيط بشكل جميل (للمستخدم النهائي).

هل ذهب أي شخص آخر في هذا الطريق؟ أي شيء خاطئ في ذلك؟ ننصحهم بعدم استخدام شخصية "{" و "}" في مكان آخر في النص الطبيعي للوثيقة ، ولكن هذا ليس قيدًا مهمًا.

سرعة؟ لف حقل الدمج عبر سطرين؟ مشاكل أخرى؟

هل كانت مفيدة؟

المحلول

هذا جزء من الكود الذي كنت أجده واستبداله. جربت الكود الخاص بك أولاً ولكن هذا لم ينجح. يعتمد هذا على رمز 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 2007 ، فلن تحتاج إلى تثبيت كلمة. فقط قم بفك ضغط المستند ، ابحث عن ملف Word Document.xml ، قم String.Replace("[OldValue]", "New value"), ، احفظ الملف وسرده مرة أخرى إلى حزمة واحدة (ملف docx). الرمز الذي عرضته هنا بطيء جدًا لأنني أتم أتمتة الكلمات. فتح الكلمة ، وتحرير مستندات 2 مع 6 حقول وإغلاق التطبيق يستغرق 4 ثوان على جهاز الكمبيوتر الخاص بي.

نصائح أخرى

ماذا لو يريد المستخدم استخدام الأقواس المجعد؟ أعتقد أنه يجب عليك توفير وسيلة للهروب منها على سبيل المثال /{/} أو {{}} إلخ.

تحتاج إلى التأكد من أن منطق استبدالك هو غير حساس للحالة على سبيل المثال ، يجب السماح لكل من {customerurname} و {customerurname} بتمثيل الحقل نفسه. قد تكون حتى اختياريًا للمسافات بين كلمات مثل {لقب العميل}.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top