דילוג לתוכן

תכנות

4.6k נושאים 38.2k פוסטים

קטגוריות משנה


  • 22 נושאים
    137 פוסטים
    katzK

    שלום לכולם
    התבקשתי רבות מחברים פיתרון לבעיה הידועה לבצע מיזוג דואר, אך לשמור קובץ PDF נפרד לכל רשומה, עם שם מותאם אישית.

    אפרט כאן במדריך שלב אחר שלב איך לבצע זאת, תהיו איתי עד הסוף מקווה שתהנו...

    נתחיל...

    שלב א:

    ראשית בקובץ ה- Excel של רשימת הנמענים, הוסיפו לטבלת הנתונים ארבעה עמודות בשמות כדלהלן (חשוב שהשמות יהיו מדויקים ללא רווחים מיותרים - לתשומת ליבכם):

    DocFolderPath

    DocFileName

    PdfFolderPath

    PdfFileName

    שלב ב:
    צרו שתי תיקיות נפרדות, אחד לקבצי הפלט בפורמט docx, ואחד לקבצי הקלט בפורמט pdf, העתיקו את נתיב התיקייה של קבצי ה- docx והדביקו אותם עבור כל רשומה בשדה שיצרתם בשם DocFolderPath, לאחמ"כ חזרו על הפעולה והפעם העתיקו את נתיב התיקייה של קובצי ה- PDF והדביקו בשדה PdfFolderPath.
    בשדה DocFileName כתבו את השם של הקובץ עבור הרשומה - ניתן להשתמש בנוסחאות, כמו"כ בשדה PdfFileName כתבו את שם הקובץ כנ"ל.

    שלב ג:
    פתחו את קובץ ה- word והשלימו את פעולת המיזוג כרגיל, עצבו את המסמך כרצונכם.

    שלב ד:
    פתחו את לשונית מפתחים בקובץ ה- word פתחו את עורך הקוד הוסיפו מודל חדש מצו"ב צילום מסך:
    3eb2538f-9ab1-41eb-a1df-452212916da6-image.png

    הדביקו את הקוד הבא:

    Sub MailMergeToPdfBasic() ' Mark the start of the Subroutine (i.e. Macro) and name it "MailMergeToPdf" ' Macro created by Imnoss Ltd ' Please share freely while retaining attribution ' Last Updated 2021-05-03 Dim masterDoc As Document, singleDoc As Document, lastRecordNum As Long ' Create variables ("Post-it Notes") for later use Set masterDoc = ActiveDocument ' Identify the ActiveDocument (foremost doc when Macro run) as "masterDoc" masterDoc.MailMerge.DataSource.ActiveRecord = wdLastRecord ' jump to the last active record (active = ticked in edit recipients) lastRecordNum = masterDoc.MailMerge.DataSource.ActiveRecord ' retrieve the record number of the last active record so we know when to stop masterDoc.MailMerge.DataSource.ActiveRecord = wdFirstRecord ' jump to the first active record (active = ticked in edit recipients) Do While lastRecordNum > 0 ' create a loop, lastRecordNum is used to end the loop by setting to zero (see below) masterDoc.MailMerge.Destination = wdSendToNewDocument ' Identify that we are creating a word docx (and no e.g. an email) masterDoc.MailMerge.DataSource.FirstRecord = masterDoc.MailMerge.DataSource.ActiveRecord ' Limit the selection to just one document by setting the start ... masterDoc.MailMerge.DataSource.LastRecord = masterDoc.MailMerge.DataSource.ActiveRecord ' ... and end points to the active record masterDoc.MailMerge.Execute False ' run the MailMerge based on the above settings (i.e. for one record) Set singleDoc = ActiveDocument ' Identify the ActiveDocument (foremost doc after running the MailMerge) as "singleDoc" singleDoc.SaveAs2 _ FileName:=masterDoc.MailMerge.DataSource.DataFields("DocFolderPath").Value & Application.PathSeparator & _ masterDoc.MailMerge.DataSource.DataFields("DocFileName").Value & ".docx", _ FileFormat:=wdFormatXMLDocument ' Save "singleDoc" as a word docx with the details provided in the DocFolderPath and DocFileName fields in the MailMerge data singleDoc.ExportAsFixedFormat _ OutputFileName:=masterDoc.MailMerge.DataSource.DataFields("PdfFolderPath").Value & Application.PathSeparator & _ masterDoc.MailMerge.DataSource.DataFields("PdfFileName").Value & ".pdf", _ ExportFormat:=wdExportFormatPDF ' Export "singleDoc" as a PDF with the details provided in the PdfFolderPath and PdfFileName fields in the MailMerge data singleDoc.Close False ' Close "singleDoc", the variable "singleDoc" can now be used for the next record when created If masterDoc.MailMerge.DataSource.ActiveRecord >= lastRecordNum Then ' test if we have just created a document for the last record lastRecordNum = 0 ' if so we set lastRecordNum to zero to indicate that the loop should end Else masterDoc.MailMerge.DataSource.ActiveRecord = wdNextRecord ' otherwise go to the next active record End If Loop ' loop back to the Do start End Sub ' Mark the end of the Subroutine

    שלב ה וסיום:
    סגרו את עורך הקוד.
    לחצו על כפתור פקודות מאקרו שבכרטיסיית מפתחים, בחרו את המאקרו בשם MailMergeToPdfBasic ולחצו הפעל מצו"ב צילום מסך
    3890ce69-c0e9-4f30-89ce-3e97b7de750b-image.png

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

    מקור

  • ארכיון האתר הקודם והחביב קוד-613

    1k נושאים
    10k פוסטים
    chagoldC

    @אבי אמר בשוב, צילומי הצ'קים בבנקים:

    התעסקתי לאחרונה עם סורקים של חברת MAGTEK, הם ידידותיים ונוחים להתממשקות, אבל כמדומני שהבנקים בישראל מוכנים לקבל סריקות רק מסורקים של חברת PANINI

    @אבי איך יוצרים אתך קשר?

  • 31 נושאים
    133 פוסטים
    Y.Excel.AccessY

    יש כמה נוסחאות חדשות שממש משנות את כללי המשחק בגוגל שיטס:

    CHOOSECOLS לבחירת עמודות ממערך CHOOSEROWS לבחירת שורות ממערך WRAPROWS להמרת מערך חד ממדי לרב ממדי - פריסה לשורות WRAPCOLS כנ"ל - פריסה לעמודות HSTACK ו VSTACK - הפעולה של {} אך בלי סוגריים - לא משמעותי לכאורה

    והעולה על כולנה, סוף סוף:

    LET - ליצירת משתנים.

    כל אלו מצטרפות לפונקציות שנוספו מוקדם יותר -
    https://blog.sheetgo.com/google-sheets-formulas/10-new-google-sheets-functions/

    וכלול בתוכם - LAMBDA, MAP (חלקי - לא עובד לקנן ב MAP ודומיו מערכים אחרים), פונקציות בעלות שם, וכו' ע"ש בקישור.

  • 0 הצבעות
    29 פוסטים
    192 צפיות
    ח

    @dovid אמר בשליפת שעה קודמת ומאוחרת של הממצא המבוקש ממערך שעות:

    return {'next' : normalizedTimes[nearestIndex - 1], 'previous' : normalizedTimes[nearestIndex]};

    אם אני צודק זה אמור להיות הפוך:

    return {'previous' : normalizedTimes[nearestIndex - 1], 'next' : normalizedTimes[nearestIndex]};

    תקן אותי אם אני טועה

  • אקסס נורא איטי, יש פיתרון?

    הועבר
    22
    0 הצבעות
    22 פוסטים
    679 צפיות
    A0533057932A

    @odeddvir פרטי יצירת קשר
    פעם קודמת לא הספקתי להעתיק

  • 0 הצבעות
    29 פוסטים
    582 צפיות
    nigunN

    @שואף @clickone
    אני מנסה להבין קצת איך NFS עובד?
    מה קורה אם יש 10 קריאות לאותו קובץ
    האם הוא מוריד אותו 10 פעמים? או שיש מטמון כל שהוא?
    אם יש מטמון איפה הוא נשמר? בזכרון?
    (או בא נשאל יותר פשוט,מה יקרה אם יהיו 10,000 משתמשים על 20 שרתים שמשתמשים בשרת NFS אחד?)
    מה ההבדל בינו לבין שאר הפרוטוקולים של DFS?

  • כתיבת סקריפט לדפלוימנט בבאש

    4
    0 הצבעות
    4 פוסטים
    75 צפיות
    nigunN

    @yossiz אמר בכתיבת סקריפט לדפלוימנט בבאש:

    מתי/למה זה מופיע? (אני לא משתמש בשורת הפקודה של גיט... )

    לא יודע
    בהתחלה זה לא היה מופיע לי
    אבל אחרי פעם אחת עשיתי מרג' הוא דורש

    Merge branch 'master' of /root/test # Please enter a commit message to explain why this merge is necessary, # especially if it merges an updated upstream into a topic branch. # # Lines starting with '#' will be ignored, and an empty message aborts # the commit.

    אולי הפתרון הוא git pull --no-edit ?

  • IF על טקסט עם תוים מיוחדים, PHP

    7
    0 הצבעות
    7 פוסטים
    82 צפיות
    yossizY

    @chagold אמר בIF על טקסט עם תוים מיוחדים, PHP:

    כיון שכשהIF בPHP מקבל השוואה בין 2 ערכים שאחד מספרי אז הוא ממיר את הערך הסטרינגי למספר וממילא ההשוואה ל0 יוצאת נכונה.

    בדיוק. ב-PHP יש שני אופרטורים להשוואה: == ו-===. ההבדל הוא ש-=== משווה בצורה קפדנית, משא"כ == עושה לפני ההשוואה פעולה שנקרא type juggling. דהיינו שהוא ממיר את הערכים לסוגים דומים לפי כללים ידועים (או לא ידועים...) ואח"כ הוא עושה את ההשוואה.
    הכללים הנ"ל מאוד מסובכים, וההמלצה היא תמיד להשתמש באופרטור === כאשר אין הכרח חזק להשתמש ב-==.
    הבדל דומה קיים ב-JS ושוב ההמלצה כנ"ל.

  • נושא זה נמחק!

    1
    0 הצבעות
    1 פוסטים
    19 צפיות
    אין תגובות
  • php, substr מטקסט מרובה שורות

    6
    0 הצבעות
    6 פוסטים
    92 צפיות
    OdedDvirO

    @chagold כתוב כאן ש substr סופרת בתים ולא תווים, אם הטקסט מכיל תוים מיוחדים, מומלץ שם להשתמש בפונקציה החלופית mb_substr

  • 0 הצבעות
    4 פוסטים
    105 צפיות
    yossizY

    @חוקר זה נשמע כמו סוג דבר שמשווע לאוטומציה, כמה שעות עבודה שלך וחסכת המון זמן של המזכיר.

    א. ההוא שכותב את השאלות לא יכול להכניס אותם ישירות למערכת?
    ב. במידה ויש לו רק מייל, האם לא תוכל לעשות סקריפט ששולף אותם מהמייל ישירות למערכת במקום לעשות העתקה הדבקה?

  • query string peremeters ב-fetch post

    6
    0 הצבעות
    6 פוסטים
    126 צפיות
    yossizY

    אגב על ידי שימוש ב-tagged strings של ES6 אפשר להשתמש בחבילה זו לכתוב מחרוזות ארוכות כך:

    import dedent from "dedent"; fetch(detent`https://example.com? &parameter1=x &parameter2=y &parameter3=z`)...

    עריכה: החבילה רק מורידה את הכניסות מהמחרוזות אבל לא שבירות השורות... יש על זה issue פתוח אבל לא נראה שמשהו מתקדם שם. אפשר בקלות לכתוב פונקציה זו לבד.

  • דרוש מפתח ידע בחיבור שרתים

    7
    0 הצבעות
    7 פוסטים
    73 צפיות
    אבי 203א

    @nigun דבר איתו טלפונית.
    (הוא ביקש שמחר אמחק את המספר).

  • אתגרים מגוגל foo.bar

    8
    3 הצבעות
    8 פוסטים
    132 צפיות
    yossizY

    @chagold חחח... כמה תשובות:

    בכל מקרה אני לא מתכנן לעבוד עבור גוגל... פורום התכנות תמיד היה פתוח לבוט של גוגל. אפשר להווכח בכך כאשר אתה מקבל תוצאות מפורום התכנות בחיפושי גוגל גוגל היא חברה גדולה מאוד, אין סיכוי שיש כזה שיתוף פעולה הדוקה בין הסניפים
  • קריאת JSON בPYTHON

    19
    1 הצבעות
    19 פוסטים
    434 צפיות
    dovidD

    @יוסף1111 זה לא טוב.
    עניין אותך איך לסיים, ואכן עוד מעט אתה מסיים אבל עד עכשיו (למרות שזה כבר נאמר לך בשאלה הקודמת ששאלת) אתה לא יודע שקוראים לזה מערך ולא מילון (מה זה משנה, העיקר סיימת!), והעזרה של @yossiz עזרה לך לחסוך קריאה ולהיות טוב בלמצוא בפורום את האנשים הנכונים ופחות להכיר את השפה איתה עובד...
    כשאתה שואל, עליך לשים בצד את התקדמות בפרוייקט, ולהיות במצב של שאלה בבית ספר.
    יש לי אוסף ואני צריך לאתר בו איבר, לפי ערך של אחד שדותיו.
    איך לחפש את זה? מה זה אומר מבחינת קוד?

    בקשר לחיפוש, אין מה לחפש בעברית. יש אפס חומר ורמתו בהתאם ליחס המספרי הכולל.
    אתה יכול לשאול פה איך לחפש, נעזור לך בשמחה. ככה לא רק תתקדם, אלא גם תשתכלל.

  • נושא זה נמחק!

    1
    0 הצבעות
    1 פוסטים
    4 צפיות
    אין תגובות
  • API ניקוד

    1
    0 הצבעות
    1 פוסטים
    59 צפיות
    אין תגובות
  • אישור העברת דואר בג'ימייל, אוטומטי

    18
    0 הצבעות
    18 פוסטים
    157 צפיות
    dovidD

    @שואף אמר באישור העברת דואר בג'ימייל, אוטומטי:

    נפתרה התעלומה (לכאורה...)
    אני שולף את הלינק בREGEX מתוך המייל שמגיע מגוגל.

    אם אתה צודק הREGEX שגוי.
    להפעיל REGEX ואחריו trim זה redundancy.

  • 0 הצבעות
    11 פוסטים
    264 צפיות
    chvC

    @dovid אמר בהמרה של fetch רגיל, ל-UrlFetchApp של גוגל סקריפט:

    אתה אמור לא לישון בלילה על סיפור הקריסות, במקום לעשות מאה סקריפטים שפותרים את הבעיה.

    ובכן...
    בסוף פתרתי את הבעיה (זה אכן היה כמו ששיערתי, טעות בבניה של האפליקציה בהרוקו. כלומר ההגדרות של ה-git לא שמרו נכון את הערכות נושא שמועלות על ידי המשתמש, ולכן בכל בניה מחדש של האפליקציה - נשכחו הקבצים, אבל ההגדרה עצמה נשארה).
    אז אני לא צריך את כל הסקריפט עכשיו...

    אבל זה היה שווה כמובן. למדתי כאן כמה דברים חשובים, והכרתי כמה פלטפורמות יותר לעומק.

    חוץ מזה שהיה לי על מה לכתוב 😉

  • בקשת http שהתגובה ריקה

    2
    0 הצבעות
    2 פוסטים
    47 צפיות
    dovidD

    בfetch התשובה הראשונית רק מכילה קוד מצב וכותרות (שזה ההתחלה של התשובה), לא את גוף התשובה מה שנקרא body/payload שיש את זה גם בבקשה.
    זה שני שלבים במציאות כי גוף התשובה יכול להיות גדול/ארוך/אין סופי.
    כדי לגשת לתוכן קוראים למתודה text או json שמחזירים גם פרומייז ש"נפתר" בסיום הקבלה והעיבוד, ככה:

    await fetch("/index.php?p=get_functions&format=json", { method: "post", headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', }, //make sure to serialize your JSON body body: JSON.stringify({}) }).then(response => response.text() ).then(resText => console.log(resText) );

    אגב אם באמת בדוגמה שלך הבקשה מכילה body עם JSON של אובייקט ריק, זה בהחלט מיותר, אפשר להשמיט את השורה הזאת.

  • דיסק רשת משותף בלינוקס

    2
    1 הצבעות
    2 פוסטים
    43 צפיות
    yossizY

    מראי מקומות:
    https://www.google.com/search?q=nfs+vs+smb+vs+sshfs

  • web gui לניהול חומת האש

    7
    0 הצבעות
    7 פוסטים
    106 צפיות
    nigunN

    @clickone
    מדובר בקמיליו
    אגב גם באסטריסק אני לא פותח את הRTP
    וזה עובד
    נראה לי שזה אמור לעבוד בכל מקרה כמו שwebrtc עוקף את הNAT

  • עזרה בהתקנת ספריית monaco-editor

    2
    1 הצבעות
    2 פוסטים
    57 צפיות
    chagoldC

    @chagold כאן זה עובד לי

    אבל באתר שלי זה לא עובד
    יש שגיאה בקונסול

    TypeError: require.config is not a function at Object.eval (eval at compile (http-vue-loader.js:161), <anonymous>:5:13) at ScriptContext.compile (http-vue-loader.js:161) at Component.compile (http-vue-loader.js:329) at http-vue-loader.js:382

    אני מבין שהשגיאה היא בvue-loader. אבל אולי אפשר לשכתב את הקוד כJS רגיל?

    תודה.

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