עריכת קובץ docx
-
אני רוצה לערוך קובץ וורד באמצעות קוד
אבל ההחלפה צריכה להיות ידנית, לא אוטו' לפי מילות מפתח וכדו'.הספריה הזאת
https://github.com/open-xml-templating/docxtemplater
מנתחת מאוד יפה את הקובץ
(ובגלל שהיא כתובה ב-JS היא מתאימה גם לעבודה בדפדפן ואנטגרלי בשרת nodejs)
היא מפרקת אותו בשלל צורות ושומרת הכל במופע אוביקט חדש שנוצר בכל הרצה.לא מצאתי דרך מובנית לקבל את הטקטס אבל אישהו לחלץ אותו מהאובקט (נראה בסדר, מקווה שגם במקרי קיצון)
אני אבל לא יודע איך להחזיר א"ז למסמך, כלומר איפה באוביקט לשנות את המילים הישנות לחדשות (נסיתי מאיפה שאני מחלץ אבל זה לא משפיע כלום).
נסיתי לשאול כאן
https://github.com/open-xml-templating/docxtemplater/issues/316
אבל מתברר שהכי טוב בבית :mrgreen:פורסם במקור בפורום CODE613 ב13/06/2017 18:14 (+03:00)
-
הספריה הזו אכן בנויה נטו להחלפת שומרי מקום (סוג של מיזוג דואר יחידני).
תוכל לראות בקוד https://github.com/open-xml-templating/docxtemplater/blob/master/es6/render.js#L37
שהוא עובר בלולאה על חלקי הקובץ ויש שלושה סוגים placeholder שזה ערכים מוקפים בסוגריים מסולסלות ואותם הוא מחליף, ויש את content וtag שבהם הוא לא נוגע.
למעשה אתה זקוק להחליף גם את הסוגים האלה אבל אחרי חילוץ הטקסט מהם, וזה אין בספריה, כלומר תצטרך לעבוד מאפס לעיבוד הxml.
אם לא אכפת לך לעבוד על חיפשו גולמי,
אז את שורות 37-39 תחליף בפירוק content וtag:if (part.type === "content") return options.rep(part.value); if(part.type === "tag") return part.value;
עכשיו צריך להעביר לו לאורך שרשרת הקריאות את הפונקציה rep. בקוד שלך תשנה את render לכזה שמקבל פרמטר:
function myReplace(str){ console.log(str); return str; //replace... } doc.render(myReplace);
את השורה פה
https://github.com/open-xml-templating/docxtemplater/blob/master/es6/docxtemplater.js#L111
תחליף ל:currentFile.render(to, arguments[0]);
ואחרון חביב:
https://github.com/open-xml-templating/docxtemplater/blob/master/es6/xml-templater.js#L90
תוסיף מתחת:rep: arguments[1]
אבל אני אחפש אני בטוח שיש ספריות שעושות יותר טוב את העבודה.
פורסם במקור בפורום CODE613 ב13/06/2017 19:16 (+03:00)
-
טוב
לקח מדי הרבה זמן
וגם קבלתי חיזוק
https://github.com/open-xml-templating/docxtemplater/issues/316#issuecomment-329955274אבל הצלחתי
מובנה, נקי וגמיש
אז טיפש כזה גדול אני לאפשוט כותבים מודול עם מתודה render, והוא מחליף את הפונקציה render
כאן
https://github.com/open-xml-templating/docxtemplater/blob/master/es6/render.js#L22פורסם במקור בפורום CODE613 ב17/09/2017 08:33 (+03:00)