דילוג לתוכן

תכנות

4.7k נושאים 38.6k פוסטים

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


  • 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 ודומיו מערכים אחרים), פונקציות בעלות שם, וכו' ע"ש בקישור.

  • אתר למידת תכנות

    הועבר
    11
    2 הצבעות
    11 פוסטים
    445 צפיות
    ב

    @אינטרקום אמר באתר למידת תכנות:

    @yossiz
    יש לך דרך אחרת להגיע לאוסף דרך יוטיוב? זה מסודר שם בצורה שנח להשתמש?

    יש את https://koshercode.netlify.com/

  • toggl מחפשים מתכנתים...

    הועבר
    8
    0 הצבעות
    8 פוסטים
    350 צפיות
    WWWW

    @aaron אמר בtoggl מחפשים מתכנתים...:

    אני משתמש גם בwakatime
    סתם בשביל למדוד סטיסטיקות תכנות\גלישה בצורה אוטומטית.
    זה סופר נחמד! (ולפעמים מפחיד..)

    השאלה מה הם עושים עם הנתונים שהם אוספים...
    קצת מפחד מזה.

  • הסבר | פונקציה להחלפת string בJavaME

    הועבר
    3
    0 הצבעות
    3 פוסטים
    111 צפיות
    נ

    @yossiz תודה רבה! זה עובד!

  • 1 הצבעות
    9 פוסטים
    304 צפיות
    אבייא

    @avi-rz כן. אני מדבר על הקובץ הזה
    24e6e3f1-57d8-4659-9d2b-752b705e211a-image.png

  • 0 הצבעות
    26 פוסטים
    854 צפיות
    פ

    @odeddvir הבנתי, אז תכל'ס אני לא יכול לשלוח את זה ככה

    ו.. עוד שאלה
    אם אני רוצה שהוא ישלח את הנתונים בלי contents
    אני צריך לשלוח את הנתונים בלי שום פרמטר (בget זה עם & )

  • עזרה בשליחת post בPHP | דחוף

    הועבר
    6
    -2 הצבעות
    6 פוסטים
    334 צפיות
    י

    @ליבל ה api שלהם זה רק לדף סליקה, אבל לא לסליקה בצד שרת

  • עזרה | אפיון db למערכת טלמרקטינג

    5
    0 הצבעות
    5 פוסטים
    157 צפיות
    אורייא

    @avi-rz
    לא הבנת אותי כוונתי לקשר בין התרומות לתורמים וכן את השיחות לתורמים
    אבל כבר מצאתי שיש אפשרות לקשר 2 טבלאות לטבלה אחת..

  • יצירת קובץ bat לפקודת ping -t

    הועבר
    4
    0 הצבעות
    4 פוסטים
    207 צפיות
    shragaS

    @מוטי-מן

    https://www.raymond.cc/blog/timestamp-ping-with-hrping/

    https://stackoverflow.com/questions/24906268

  • שליחת אימייל כל דקה דרך גוגל סקריפט

    הועבר
    12
    0 הצבעות
    12 פוסטים
    450 צפיות
    יוסף חיים 016י

    @systems אמר בשליחת אימייל כל דקה דרך גוגל סקריפט:

    אתה יכול לנסות להשתמש עם תוכנות אינגרציה/אוטומציה
    כמו זאפייר ואינטגרומט

    בהצלחה רבה

    לא הבנתי כלום
    אפשר קקשיורים?

  • כתב חרתומים לקריא - JS

    3
    0 הצבעות
    3 פוסטים
    124 צפיות
    ש

    @yossiz
    ובקצרה, מה הסיכויים לפענח את הקאפצה הזאת (זה נראה שהכל בjs)
    https://evisaforms.state.gov/acs/default.asp?postcode=JRS&appcode=1#

  • 0 הצבעות
    2 פוסטים
    110 צפיות
    ש

    @mgm-ivr משתמע כאן ש-2000

  • שימוש מ XMLHttpRequest בפונקציה של JAVASCRIPT

    הועבר
    8
    0 הצבעות
    8 פוסטים
    275 צפיות
    י

    @מוטי-אורן
    אכן
    עכשיו אני אוחז שזה נורא פשוט

  • ייצוא לPDF באקסס

    הועבר
    7
    0 הצבעות
    7 פוסטים
    211 צפיות
    מוטי מןמ

    @מלא תודה!! עובד מעולה!!

  • עזרה בשליחת דוח אקסס במייל

    הועבר
    2
    0 הצבעות
    2 פוסטים
    113 צפיות
    אורייא

    @מוטי-מן
    באיזו צורה אתה מפעיל את הקוד?
    תכניס בטופס תיבת טקסט ששם אתה מכניס את כתובת המייל של הנמען
    תפתח משתנה ותעביר לשם את הכתובת הנמען
    ובמיקום של הנמען תכניס את המשתנה
    אולי בהמשך יהיה לי זמן לכתוב לך את הקוד במלואו

  • גמטריה ב php

    הועבר
    3
    0 הצבעות
    3 פוסטים
    220 צפיות
    I

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

    //גימטריה מספרים לאותיות function convertWord($word) { $convertLetter = function ($letter) { $values = [ 1 => 'א', 2 => 'ב', 3 => 'ג', 4 => 'ד', 5 => 'ה', 6 => 'ו', 7 => 'ז', 8 => 'ח', 9 => 'ט', 10 => 'י', 20 => 'כ', 30 => 'ל', 40 => 'מ', 50 => 'נ', 60 => 'ס', 70 => 'ע', 80 => 'פ', 90 => 'צ', 100 => 'ק', 200 => 'ר', 300 => 'ש', 400 => 'ת', ]; return $values[$letter]; }; if (strlen($word)== 1){ $word = $convertLetter($word); } elseif (strlen($word)== 2){ $a = (intdiv($word, 10))*10; $b = $word-$a; $word = $convertLetter($a).$convertLetter($b); } elseif (strlen($word)== 3){ $a = (intdiv($word, 100))*100; $b = (intdiv(($word-$a), 10))*10; $c = $word-$a-$b; $word = $convertLetter($a).$convertLetter($b).$convertLetter($c); } $word = str_replace("י"."ה","טו",$word); $word = str_replace("י"."ו","טז",$word); return $word; }

    עריכה: זה עובד רק עד 499 (אני הייתי צריך את זה רק עד ל 200 אז זה מצוין בשבילי) מי שרוצה מוכן לשפר את זה

  • 2 הצבעות
    6 פוסטים
    142 צפיות
    yossizY

    הקדמה כללית לפרומיסים (למי שכבר מכיר איך פרומיס עובד יש פה הרבה אריכות מיותרת... אולי מי שעוד לא מכיר טוב יקבל מזה תועלת)
    ב-JS - כמו בכל שפה אחרת - יש פעולות שלוקחות זמן, מה ששונה ב-JS: שאנחנו מאוד לא רוצים להפסיק את הכל ולחכות עד שזה יקרה (כי כידוע יש רק ט'רד אחד, ואם הט'רד מושבת - כל הדף מושבת). הפתרון לזה הוא להקים תור של פעולות, בצורה שסיום פעולה א' תגרום להרצת פעולה ב' וכן הלאה, המשימה שלנו הוא רק ל"הצית את ניצוץ הראשון" של הפעולה הראשונה, וכל השאר רץ מאיליו בלי התערבות שלנו.
    בימי בראשית היו עושים את זה על ידי שהיו מעבירים לפעולה הראשונה את הפעולה השנייה, כך שהפעולה עצמה - שהיא יודעת מתי היא מסתיימת - היא תתחיל את הפעולה השניה, ולפעולה השנייה מעבירים את הפעולה השלישית, וכן הלאה. בעצם עשינו שרשרת של פעולות שכל טבעת בשרשרת מחזיקה את הפעולה הבאה.
    הבעיה בזה מבחינה תחבירית הוא שצורה זו מחייבת הרבה קינון. אם אנחנו רוצים להקים שרשרת של שלוש פעולות, סדר הדברים הוא שנכתוב את הפעולה הראשונה, נעביר לה את הפעולה השנייה, ולשנייה נעביר את השלישית. כולנו מכירים את פירמידת הגיהנום שזה גורם.
    אפשר לדמות את זה לשרשרת אמיתית שאם נרצה להוסיף עוד טבעת זה מחייב אותנו להתכופף לסוף השרשרת כדי להגיע לטבעת האחרונה כדי לתלות עליו עוד טבעות.
    הפתרון לזה הגיעה בצורת פרומיסים. בצורה של פרומיס - במקום שנעביר את הפעולה הבאה לפעולה הראשונה - הפעולה הראשונה מחזירה לנו ידית. ידית זו מיוחדת, שהיא מגיבה להצלחתה או כשלונה של הפעולה. ואנחנו מדביקים את הפעולה השנייה לידית של הפעולה הראשונה בצורה שהצלחת הפעולה הראשונה תגרום לפעולה השנייה להתחיל (סביבת JS דואגת לקסם הזה לעבוד).
    היתרון בזה הוא שאין צורך בקינון. יש לנו את הידית ביד ולא צריך להתכופף לתוך הפעולה כדי לקבל את המתלה שעליו אנו תולים את הפעולה הבאה.
    הרעיון של בנאי ה-Promise הוא לקחת פעולה שבנויה לקבל callback שזו צורת העבודה המקורית - זו המתלה שעליו בעבר היינו תולים את הפעולה הבאה - וליצור ממנה ידית/פרומיס שתגיב בצורה נכונה להצלחה וכשלון של הפעולה, והיא תשתמש לנו כידית לתלות עליו עוד פעולות.
    הבנאי של פרומיס מקבלת פונציה/פעולה שהיא מריצה, ובתוך הפונקציה כאשר קורה כשלון אתה אמור לאותת את זה על ידי קריאת reject ובמצב של הצלחה מאותתים את זה על ידי קריאה ל-resolve.

    @dovid אמר בכתיבה נכונה של פונקציית executor עבור פרומיס:

    זה מבלבל לי וזה גם סתם לדחוף לתוך פונקציית הפרומייז הקדמות בלתי נחוצות

    זו בעיה אחת. ענין של טעם טוב.

    להסביר יותר למוקשי הבנה כמוני או לאלה שהטעם הטוב מגיע להם אחרי התבוננות שכלית והוא עוד לא אינטואיטיבי אצלם:
    הטעם הטוב של המתכנת אמור להורות לו שאם פונקצייה מסויימת אמורה לפעול פעולה א' - שלא לערב שם דברים אחרים. והרי פונקציית ההרצה של הפרומיס נועד לעשות רק דבר אחד: המרת פעולה callback-ית לפרומיס על ידי הרצת הפעולה ה-callback-ית ואיתות הצלחתה/כשלונה לידית/פרומיס. ואם כן אין להוסיף שם עוד דברים.
    למה? כי כל מה שאתה מוסיף דברים שלא קשורים לענין - אתה בעצם מגרע. כי כבר לא ברור מה אתה רוצה לעשות.

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

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

    הבעיה שעליו אני מדבר הוא כזה:
    כאשר אתה מעביר פונקציה לבנאי של הפרומיס, הבנאי לוקחת את הפונקציה ומריצה אותה. אחרי ההרצה הבנאי מאזינה לאיתותים כדי לקבל מידע על הצלחתה/כשלונה של הפעולה. בעת קבלת איתות, הבנאי תגיב על ידי הפיכת מצבה של הפרומיס ל-fulfilled או rejected.
    יש שתי צורות שהבנאי מקבלת איתותים אלו. א) על ידי פונקציות resolve\reject וב) על יד תפיסת חריגות. חריגה (exception) בקוד של הפעולה תגרום מיד ל-rejection של הפרומיס.

    כדי שהקוד תצליח, אנחנו חייבים לקבל מצב שבו אין מוצא אחרת מהפונקציה - רק resolve או reject או exception.
    אם משהו רביעי קורה, נישאר תקוע עם פרומיס "קפואה" שאף פעם לא נדע את מצבו, כי אין לנו דרך אחרת לאותת את מצב הפרומיס.

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

    בקוד לדוגמה שלנו: ייתכן מצב ש-getBar נכשלת, ואף פעם לא נדע כי אנחנו לא תופסים את השגיאה וגם מי שמריץ את הפומיס לא יתפוס אותה. וכך נקבל פרומיס "קפואה" שאף פעם לא תקבל איתות על הצלחה או כשלון.

    יש שתי דרכים לתקן את זה, אחת נכונה והשנייה לא נכונה. הנכונה היא מה ש @dovid כתב.
    הלא נכונה היא לנסות לתפוס כל השגיאות ולקרוא ל-reject כאשר יש שגיאה.

    function getFooPromise () { return new Promise(async (resolve, reject) => { try { const bar = await getBar(); bar.getFooCallbackStyle((error, data) => { if (error) return reject(error); resolve(data); }); } catch (e) { reject(e); } }); }

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

    (אם קראת עד לפה - שאפו...)

  • שליחת קובץ עם מיילגן (php)

    3
    0 הצבעות
    3 פוסטים
    79 צפיות
    chagoldC

    @yossiz תודה.
    https://stackoverflow.com/questions/43963914/mailgun-send-mail-with-attachment

  • איך למחוק הודעה יוצאת בג'ימייל?

    הועבר
    24
    2 הצבעות
    24 פוסטים
    818 צפיות
    ש

    ככה הצלחתי להסתיר וגם למחוק את ההודעה

    function send() { let addressForSearch = 'hoduos123@gmail.com' // הכתובת שאת ההודעות ממנה אתה צריך להעביר let emailForTransfer = 'hoduos123@gmail.com' // המייל שאליו אתה צריך לשלוח את ההודעות let messages = GmailApp.search(`from:${addressForSearch}`) if (messages.length > 0) { messages.forEach(function (m) { let message = m.getMessages()[0] let subject = message.getSubject() let body = message.getBody() let attachments = message.getAttachments() var searchTerm = Utilities.getUuid(); var uidText = '<span style="color:transparent; display:none !important; height:0; opacity:0; visibility:hidden; width:0">' + searchTerm + '</span>'; GmailApp.sendEmail(emailForTransfer, subject, '', { htmlBody: body +uidText, attachments: attachments }) Utilities.sleep(2000); GmailApp.search(searchTerm)[0].moveToTrash() }) } }

    תודה @מוטי-אורן על כל הסקריפט..

  • עזרה | בניית ISO של CBL MARINER

    הועבר
    1
    0 הצבעות
    1 פוסטים
    122 צפיות
    אין תגובות
  • נושא זה נמחק!

    הועבר
    3
    0 הצבעות
    3 פוסטים
    29 צפיות
בא תתחבר לדף היומי!