Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
יש כמה מצבים שבהם הסרת אזורים לא ממוזגים לחלוטין מהמסמך במהלך Mail Merge אינה רצויה או גורמת למסמך להיראות לא שלם. זה יכול להתרחש כאשר היעדר נתוני קלט צריך להיות מוצג בפני המשתמש בצורה של הודעה במקום שהאזור יוסר לחלוטין.
יש גם מקרים שבהם הסרת האזור הלא מנוצל בכוחות עצמו אינה מספיקה, למשל, אם האזור מוקדם עם כותרת או האזור כלול בטבלה. אם אזור זה אינו בשימוש, הכותרת והטבלה עדיין יישארו לאחר הסרת האזור שייראה לא במקום במסמך.
מאמר זה מספק פתרון להגדרה ידנית של אופן הטיפול באזורים שאינם בשימוש במסמך. קוד הבסיס לפונקציונליות זו מסופק וניתן לעשות בו שימוש חוזר בקלות בפרויקט אחר.
ההיגיון שיש להחיל על כל אזור מוגדר בתוך מחלקה שמיישמת את ממשק IFieldMergingCallback. באותו אופן, ניתן להגדיר מטפל Mail Merge כדי לשלוט באופן שבו כל שדה מתמזג, מטפל זה יכול להיות מוגדר לבצע פעולות על כל שדה באזור שאינו בשימוש או על האזור כולו. בתוך מטפל זה, אתה יכול להגדיר את הקוד לשינוי הטקסט של אזור, הסרת צמתים או שורות ותאים ריקים וכו'.
במדגם זה נשתמש במסמך המוצג להלן. הוא מכיל אזורים מקוננים ואזור הכלול בטבלה.
כהדגמה מהירה, אנו יכולים לבצע מסד נתונים לדוגמה במסמך המדגם כאשר הדגל MailMergeCleanupOptions.REMOVE_UNUSED_REGIONS מופעל. מאפיין זה יסיר באופן אוטומטי אזורים לא ממוזגים מהמסמך במהלך mail merge.
מקור הנתונים כולל שני רשומות עבור האזור StoreDetails אבל בכוונה יש כל נתונים עבור הילד ContactDetails אזורים עבור אחד הרשומות. יתר על כן, גם לאזור Suppliers אין שורות נתונים. זה יגרום לאזורים שאינם בשימוש להישאר במסמך. התוצאה לאחר מיזוג המסמך עם מקור נתונים זה נמצאת למטה.
כפי שצוין בתמונה ניתן לראות כי אזור ContactDetails עבור הרשומה השנייה ו Suppliers אזורים הוסרו אוטומטית על ידי מנוע Mail Merge מכיוון שאין להם נתונים. עם זאת, יש כמה בעיות שגורמות למסמך הפלט הזה להיראות לא שלם:
הטכניקה המוצגת במאמר זה מדגימה כיצד ליישם לוגיקה מותאמת אישית על כל אזורים לא ממוזגים כדי להימנע מבעיות אלה.
הפתרון
כדי להחיל לוגיקה ידנית על כל אזור שאינו בשימוש במסמך אנו מנצלים את התכונות שכבר זמינות ב Aspose.Words.
מנוע Mail Merge מספק תכונה להסרת אזורים שאינם בשימוש באמצעות דגל MailMergeCleanupOptions.RemoveUnusedRegions. זה יכול להיות מושבת כך אזורים כאלה נשארים ללא שינוי במהלך mail merge. זה מאפשר לנו להשאיר את האזורים הלא ממוזגים במסמך ולטפל בהם ידנית בעצמנו במקום.
לאחר מכן נוכל לנצל את המאפיין MailMerge.FieldMergingCallback כאמצעי ליישום ההיגיון המותאם אישית שלנו על אזורים לא ממוזגים אלה במהלך Mail Merge באמצעות שימוש בכיתת מטפל המיישמת את ממשק IFieldMergingCallback.
קוד זה בתוך מחלקת המטפל הוא המחלקה היחידה שתצטרך לשנות על מנת לשלוט בהיגיון המופעל על אזורים לא ממוזגים. ניתן לעשות שימוש חוזר בקוד האחר במדגם זה ללא שינוי בשום פרויקט.
פרויקט מדגם זה מדגים טכניקה זו. זה כולל את השלבים הבאים:
הקוד
היישום של שיטת ExecuteCustomLogicOnEmptyRegions נמצא להלן. שיטה זו מקבלת מספר פרמטרים:
דוגמה
מראה כיצד לבצע לוגיקה מותאמת אישית על אזורים שאינם בשימוש באמצעות המטפל שצוין.
דוגמה
מגדיר את השיטה המשמשת לטיפול ידני באזורים לא ממוזגים.
שיטה זו כוללת מציאת כל האזורים הלא ממוזגים במסמך. זה נעשה באמצעות שיטת MailMerge.GetFieldNames. שיטה זו מחזירה את כל שדות המיזוג במסמך, כולל סמני ההתחלה והסיום של האזור (המיוצגים על ידי שדות מיזוג עם הקידומת TableStart או TableEnd).
כאשר נתקל בשדה מיזוג TableStart
זה מתווסף כחדש DataTable ל DataSet. מכיוון שאזור עשוי להופיע יותר מפעם אחת (למשל מכיוון שהוא אזור מקונן שבו אזור האם מוזג עם מספר רשומות), הטבלה נוצרת ומוסיפה רק אם היא לא קיימת כבר ב DataSet.
כאשר התחלת אזור מתאימה נמצאה והוספה למסד הנתונים, השדה הבא (שמתאים לשדה הראשון באזור) מוסיף ל - DataTable. נדרש להוסיף רק את השדה הראשון כדי שכל שדה באזור ימוזג ויעבור למטפל.
אנו גם מגדירים את ערך השדה של השדה הראשון ל" FirstField " כדי להקל על החלת ההיגיון על השדות הראשונים או אחרים באזור. על ידי הכללת זה אומר שזה לא הכרחי לקודד את השם של השדה הראשון או מיישם קוד נוסף כדי לבדוק אם השדה הנוכחי הוא הראשון בקוד המטפל.
הקוד שלהלן מדגים כיצד מערכת זו פועלת. המסמך המוצג בתחילת מאמר זה מתמזג עם אותו מקור נתונים, אך הפעם, האזורים שאינם בשימוש מטופלים על ידי קוד מותאם אישית.
דוגמה
מראה כיצד לטפל באזורים לא ממוזגים לאחר Mail Merge עם קוד מוגדר על ידי המשתמש.
הקוד מבצע פעולות שונות בהתבסס על שם האזור שאוחזר באמצעות המאפיין FieldMergingArgs.TableName. שים לב כי בהתאם למסמך ולאזורים שלך אתה יכול לקודד את המטפל כדי להפעיל לוגיקה תלויה בכל אזור או קוד החלים על כל אזור שלא התמזג במסמך או שילוב של שניהם.
ההיגיון של האזור ContactDetails כולל שינוי הטקסט של כל שדה באזור ContactDetails עם הודעה מתאימה המציינת שאין נתונים. השמות של כל שדה מתאימים בתוך המטפל באמצעות המאפיין FieldMergingArgs.FieldName.
תהליך דומה מוחל על אזור Suppliers בתוספת קוד נוסף לטיפול בטבלה המכילה את האזור. הקוד יבדוק אם האזור נמצא בטבלה (כפי שהוא כבר הוסר). אם כן, הוא יסיר את כל הטבלה מהמסמך, כמו גם את הפסקה שקדמה לה כל עוד היא מעוצבת בסגנון כותרת, למשל “Heading 1”.
דוגמה
מראה כיצד להגדיר לוגיקה מותאמת אישית במטפל המיישם IFieldMergingCallback המבוצע עבור אזורים לא ממוזגים במסמך.
התוצאה של הקוד לעיל מוצגת להלן. השדות הלא משולבים באזור הראשון מוחלפים בטקסט אינפורמטיבי והסרת הטבלה והכותרת מאפשרת למסמך להיראות שלם.
הקוד שמסיר את הטבלה האם יכול גם להיות מופעל על כל אזור לא בשימוש במקום רק אזור מסוים על ידי הסרת הסימון עבור שם הטבלה. במקרה זה, אם אזור כלשהו בתוך טבלה לא מוזג עם נתונים כלשהם, גם האזור וגם טבלת המכולות יוסרו אוטומטית.
אנו יכולים להכניס קוד שונה למטפל כדי לשלוט באופן הטיפול באזורים ללא מיזוג. השימוש בקוד שלהלן במטפל במקום זאת ישנה את הטקסט בפסקה הראשונה של האזור להודעה מועילה בזמן שכל הפסקאות הבאות באזור יוסרו. פסקאות אחרות אלה מוסרות מכיוון שהן יישארו באזור לאחר מיזוג המסר שלנו.
הטקסט החלופי ממוזג לשדה הראשון על ידי הגדרת הטקסט שצוין למאפיין FieldMergingArgs.Text. הטקסט ממאפיין זה מוזג לשדה על ידי מנוע Mail Merge.
הקוד מיישם זאת רק עבור השדה הראשון באזור על ידי בדיקת המאפיין FieldMergingArgs.FieldValue. ערך השדה של השדה הראשון באזור מסומן ב " FirstField". זה מקל על יישום סוג זה של לוגיקה באזורים רבים מכיוון שאין צורך בקוד נוסף.
דוגמה
מראה כיצד להחליף אזור שאינו בשימוש בהודעה ולהסיר פסקאות נוספות.
המסמך שהתקבל לאחר ביצוע הקוד לעיל מוצג להלן. האזור שאינו בשימוש מוחלף בהודעה המציינת כי אין רשומות להצגה.
כדוגמה נוספת, אנו יכולים להכניס את הקוד למטה במקום הקוד שטיפל במקור ב - SuppliersRegion. פעולה זו תציג הודעה בתוך הטבלה ותמזג את התאים במקום להסיר את הטבלה מהמסמך. מכיוון שהאזור שוכן בתוך טבלה עם מספר תאים,נראה נחמד יותר שתאי הטבלה יתמזגו יחד והמסר יהיה מרוכז.
דוגמה
מראה כיצד למזג את כל תאי האב של אזור שאינו בשימוש ולהציג הודעה בטבלה.
המסמך שהתקבל לאחר ביצוע הקוד לעיל מוצג להלן.
לבסוף, אנו יכולים לקרוא לשיטת ExecuteCustomLogicOnEmptyRegions ולציין את שמות הטבלה שיש לטפל בהם בשיטת המטפל שלנו, תוך ציון אחרים להסרה אוטומטית.
דוגמה
מראה כיצד לציין רק את האזור ContactDetails
שיש לטפל בו באמצעות מחלקת המטפל.
קריאה לעומס יתר זה עם ArrayList שצוין תיצור את מקור הנתונים המכיל רק שורות נתונים עבור האזורים שצוינו. אזורים שאינם אזור ContactDetails
לא יטופלו ויוסרו אוטומטית על ידי מנוע Mail Merge במקום זאת. התוצאה של השיחה לעיל באמצעות הקוד המטפל המקורי שלנו מוצג להלן.
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.