דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. עריכת קובץ docx

עריכת קובץ docx

מתוזמן נעוץ נעול הועבר ארכיון code613m
3 פוסטים 2 כותבים 322 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    אהרן
    כתב ב נערך לאחרונה על ידי
    #1

    אני רוצה לערוך קובץ וורד באמצעות קוד
    אבל ההחלפה צריכה להיות ידנית, לא אוטו' לפי מילות מפתח וכדו'.

    הספריה הזאת
    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)

    תגובה 1 תגובה אחרונה
    2
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #2

      הספריה הזו אכן בנויה נטו להחלפת שומרי מקום (סוג של מיזוג דואר יחידני).
      תוכל לראות בקוד 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)

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      4
      • א מנותק
        א מנותק
        אהרן
        כתב ב נערך לאחרונה על ידי
        #3

        טוב
        לקח מדי הרבה זמן
        וגם קבלתי חיזוק
        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)

        תגובה 1 תגובה אחרונה
        2

        בא תתחבר לדף היומי!
        • התחברות

        • אין לך חשבון עדיין? הרשמה

        • התחברו או הירשמו כדי לחפש.
        • פוסט ראשון
          פוסט אחרון
        0
        • דף הבית
        • קטגוריות
        • פוסטים אחרונים
        • משתמשים
        • חיפוש
        • חוקי הפורום