תכנות

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

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


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

    שלום לכולם
    התבקשתי רבות מחברים פיתרון לבעיה הידועה לבצע מיזוג דואר, אך לשמור קובץ 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 פוסטים

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

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

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

  • 31 נושאים
    133 פוסטים

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

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

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

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

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

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

  • שינוי קובץ פעם בשבוע

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

    @EMG אמר בשינוי קובץ פעם בשבוע:

    @חוקר באמת התוצאה שמביא לי זה השנה והשבוע השאלה ממתי הוא סופר את השבוע כי אני צריך שממוצאי שבת יכנס כבר לקובץ נפרד וברור שמוצאי שבת לפני 12 לא נחשב כבר השבוע הבא

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

    $DateTime = new DateTime(); if ($DateTime->format('w') == '0'){ $Week = $DateTime->format('YW'); }else{ $Week = $DateTime->format('YW')-1; }
  • פרומיסים לוקחים זמן?

    11
    1 הצבעות
    11 פוסטים
    311 צפיות

    @dovid אמר בפרומיסים לוקחים זמן?:

    JS היא אסינכרונית

    סליחה שאני מתקן את מורי ורבי אבל אין משוא פנים בתיכנות, JS היא שפה סינכרונית לחלוטין!!!!
    כל מה ש"אסינכרוני" ב JS אלו משימות API שהדפדפן עושה בשבילו (כגון קריאות הטטפ או אינטרוול וכדומה), וזה מה שנכנס ללולאת האירועים.

  • 0 הצבעות
    3 פוסטים
    77 צפיות

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

  • נעילת קטע קריטי בקוד אסינכרוני

    4
    1 הצבעות
    4 פוסטים
    163 צפיות

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

    תודה לכל המסייעים.

  • סימניה שימושית

    הועבר
    3
    8 הצבעות
    3 פוסטים
    144 צפיות

    @dovid יפה לא ידעתי שיש כזו ספריה בקליינט

  • דרוש מחשב 32 ביט

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

    @קינג-קומפיוטר אתה צודק בעיקרון אבל המחשב שלי חלש מידי. (N5000).

  • עזרה|חילוץ מספר בPHP

    הועבר
    17
    0 הצבעות
    17 פוסטים
    123 צפיות

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

    אך לבסוף ברוך השם הסתדרתי
    ההסבר
    השרת מיד כשפגש את המספר הראשון שהוא מספר קטן הוא מייד תרגם אותו למה שהוגדר ולכן לא מצא אף פעם את המספר הגדול
    לכן הגדרתי במערך שקודם יהיה '555' ואחר כך '55' ורק אחר כך '5'

    תודה לכם

  • 0 הצבעות
    5 פוסטים
    252 צפיות
  • 4 הצבעות
    6 פוסטים
    115 צפיות

    תודה @רפאל על הדוגמא המפורטת, כהרגלך הטוב!

    @dovid @חגי, אם כוונתכם למקור שציינתי, אני משתמש ב-Core, והתקנת התבנית DAO.Entity בכלל לא הופיעה לי בתור אופציה. (שמא זה בגלל התמיכה רק ב Framework הישן) זה מה שסיבך עבורי את העניין...

    @dovid אמר בסקריפט ליצירה אוטומטית של מחלקות C# מבסיס נתונים ב-SQL Server:

    זה נכון אם אתה משתמש בORM או שאתה חובב טיפוסיות קשוחה.

    מודה באשמה...

  • 0 הצבעות
    20 פוסטים
    471 צפיות

    @יוסף-בן-שמעון

    @dovid אמר ברג'קס - התו "_":

    @צדיק-תמים A-z הכוונה מתו A עד תו z בסדר האותיות של הASCII
    בין הZ עד הa יש כמה וכמה סימנים. אני באמת אף פעם לא שמתי לב לכך, וכעת אני מבין למה טורחים לכתוב ככה
    [A-Za-z]

    התווים שA-z כולל בלי לשים לב:

    91 - [
    92 - \
    93 - ]
    94 - ^
    95 - _
    96 - `

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

  • עדכון משתנה בתנאי

    הועבר
    15
    0 הצבעות
    15 פוסטים
    205 צפיות

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

  • 0 הצבעות
    18 פוסטים
    294 צפיות

    @צדיק-תמים אמר בשליחת (וחתימת) מייל מדומיין פרטי בNode.js:

    וכן איך אני מאמת אותו ברשומות הDNS כך שזה לא ייכנס לספאם אצל המקבלים?

    צריך רשומות SPF, DKIM וDMARC

  • איך ליצור ספרייה / NameSpase בקוד VBA?

    הועבר
    2
    1 הצבעות
    2 פוסטים
    84 צפיות

    מידע נוסף:

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

    מישהו יודע או מכיר קישור ברור המסביר איך ליצור תוספים ב VBA?

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

    הועבר
    2
    1 הצבעות
    2 פוסטים
    66 צפיות
  • עזרה | התחברות עם api לפורום ב nodebb

    הועבר
    7
    0 הצבעות
    7 פוסטים
    159 צפיות

    @mmmm שני המקומות מצויינים אבל יש הבדל ביניהם:
    בלשונית אפלקיציה יש רשימה של כל הקוקיז שהוגדרו אי פעם. הם נשלחות בכל בבקשה (אם היא מתאימה לpath) בכותרת cookie.
    ואילו בלשונית רשת כשאתה בוחר תשובה מסויימת זה נותן לך את הקוקיז שהיא הרגע הגדירה (ע"י הכותרת set-cookie).

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

    @A0533057932 אמר באני יודע להריץ לוקאלית קובץ פייתון, איך אני מריץ אותו על שרת?:

    @צבי-ש אמר באני יודע להריץ לוקאלית קובץ פייתון, איך אני מריץ אותו על שרת?:

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

    server { listen 80; server_name forum.example.com; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://127.0.0.1:8080; proxy_redirect off; # Socket.IO Support proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }

    נ.ב. אולי לא כדאי את 8080

    קובץ תצורה כזה
    מה כוונתך איך עושים את זה?

  • יצירת הו"ק בנדרים פלוס באמצעות API

    12
    0 הצבעות
    12 פוסטים
    1k צפיות

    @מומחה-באקסס אמר ביצירת הו"ק בנדרים פלוס באמצעות API:

    השינוי העיקרי הוא כמובן הURL והפרמטר mosadId במקום mosad
    הפרמטרים day ו StartForm הם אופציונליים

    day אני חושב שאינו אופציונלי,
    אם אתה יודע, לא אמרתי.

  • node.js בויזואל סטודיו

    3
    2 הצבעות
    3 פוסטים
    218 צפיות

    @צדיק-תמים לא ברור לי מה @יוסף-בן-שמעון שואל, אבל יש שם משהו על ++C.
    לנוד JS רגיל אני חושב ש-vscode הוא יותר טוב וגם יותר קליל

  • תמונת דוקר mysql:8.0 זוללת זיכרון

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

    @yossiz אמר בתמונת דוקר mysql:8.0 זוללת זיכרון:

    (יש בעיה ישנה ב-WSL של אי שחרור זכרון מטמון, יכול להיות שמדובר בבעיה זו?)

    WSL זה של וינודוס? כי זה שרת של לינוקס

    @yossiz אמר בתמונת דוקר mysql:8.0 זוללת זיכרון:

    @יוסף-בן-שמעון האם מדובר בתהליך mysqld או על המכונה בכללות?
    כלומר האם נכנסת לתוך המכונה להריץ top ולראות מה תופס זכרון?

    בתוך המכונה אין top,

    bash: top: command not found bash: htop: command not found

    הרצתי מבחוץ docker top וזה התוצאה

    UID PID PPID C STIME TTY TIME CMD systemd+ 446012 445987 2 09:03 ? 00:06:43 mysqld --default-authentication-plugin=mysql_native_password

    מה אפשר לעשות עם זה?

  • 1 הצבעות
    12 פוסטים
    230 צפיות

    @yossiz אמר בTS: הגדרת interface לאובייקט המכיל מופעים של קלאס גנרי:

    הראשון תקין. למה? איפה מתועד התנהגות זו?

    נראה לי שהבנתי, יש שתי רמות של טייפים ב-TS, יש את ה-declared type וה-observed type. ה-declared type משפיע על ה-assignability וה-observed type משפיע על השימוש בפועל בערך.
    השמה של ערך לתוך משתנה יכול להשפיע על ה-observed type על ידי מנגנון שנקרא type narrowing.
    דוגמה:

    // declared type let x: string | number // observed type becomes number (type narrowing by assignment) x = 1.0 // legal to use as number x.toFixed() // still fine to reassign to string x = "Hi" // observed type is now string (again type narrowing by assignment) x.charAt(1); // coerced to string | number x = x as string | number // illegal! // Property 'charAt' does not exist on type 'string | number'. // Property 'charAt' does not exist on type 'number'.(2339) x.charAt(1)

    מקור:
    https://www.typescriptlang.org/docs/handbook/2/narrowing.html#assignments

    לכן בשורה זו:

    const param1: A | B = { field1: 1 }

    למרות שה-declared type הוא A | B אבל יש מיד type narrowing על ידי ההשמה.

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