תכנות

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

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


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

  • דרוש מתכנת וקצת יותר מזה

    1
    2 הצבעות
    1 פוסטים
    98 צפיות
    אין תגובות
  • עזרה | לולאה בjs שנתקעת

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

    @נ-נח אמר בעזרה | לולאה בjs שנתקעת:

    @dovid במקרה הזה המערך משמש לעוד דברים

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

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

    הועבר
    2
    0 הצבעות
    2 פוסטים
    5 צפיות
  • נושא זה נמחק!

    הועבר
    3
    1 הצבעות
    3 פוסטים
    18 צפיות
  • תכנות | איך להתחיל?

    הועבר
    103
    7 הצבעות
    103 פוסטים
    3k צפיות

    @אוריי אמר בתכנות | איך להתחיל?:

    @magicode אמר בתכנות | איך להתחיל?:

    מטרה של להיות מתכנת זה לא נחשב מטרה לדעתי.

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

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

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

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

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

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

    @yossiz תודה רבה!!! תותח!!

  • קבלת תאריך לא UTC מאנגולר 2 לצד שרת

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

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

    מה שקרה זה (היה כמה סיטואציות, ניקח אחת מהן, ש=)אני מחזיר מהבקאנד מערך של זמנים (=datetime objects שמומרים ל-JSON סטרינגיפי)
    ואני מצפה מהיוזר לשלוח לי בחזרה זמנים (כלומר נגיד - אני מרנדר לו את הזמנים האלו בתוך כפתורים, הוא בוחר אני יודע מה הוא בחר ושולח בחזרה לבקאנד את מה שהוא בחר)
    הבעיה כאן היתה - שהבקאנד (שולף זמנים מתוך ה-DB, פוסטגרס. ששומר את הזמנים עם TZ של ישראל) משום מה ממיר את הזמנים ושולח אותם בלי TZ. (למה הוא עושה את זה? לא ברור לי, אבל לא היה לי עניין לנסות לשנות)
    כלומר בפרונטאנד - ה-JS לא יכול לדעת איזה TZ האובייקט date שהוא יצור מהסטרינג שייך. הוא פשוט עושה new Date וזה כמובן נהיה datetime object של UTC.

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

    לכן מה שעשיתי זה לשלוח מהפרונט את הזמנים - כ-UNIX (שזה UTC)
    ולפרסר אותם בפייתון לאובייקט של זמן, ואת הזמנים האלו הוא פירסר לזמן מתאים ונכון!! והשווה בצורה הנכונה מול ה-DB, והכניס בצורה נכונה ל-DB.

    מה שיוצא זה שצריך לבדוק:

    אולי המנגנון שפייתון מפרסר timestamp ל-datetime object הוא שונה מהמנגנון שהוא מפרסר סטרינג של datetime בפורמט ISO ל-datetime object אולי יש כאן משהו שבכלל קשור ל-DB אבל לא נראה כך (לא יכול להיות שזה הבעיה) אולי היה לי איזה משהו טכני אחר שלא שמתי אליו לב. לא עולה לי בראש

    מה שבטוח שזה לא פיתרון או קשור כנראה לבעיה המקורית של האשכול, אז סליחה @clickone ..

  • mongooss - מידלוור שיפעל רק פעם אחת

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

    @dovid אמר בmongooss - מידלוור שיפעל רק פעם אחת:

    זה לא הגיוני לדעתי לעשות את זה בmeddlewhere

    התכוונתי ל pre
    https://mongoosejs.com/docs/middleware.html#pre

  • דרוש מפתח תוכנה לעבודה עם בקרי חשמל

    1
    0 הצבעות
    1 פוסטים
    64 צפיות
    אין תגובות
  • רעיון לשייך משתמשים לפעולות?

    10
    2 הצבעות
    10 פוסטים
    139 צפיות

    @avi-rz אני אסביר ביחס ל-Sql-Server, אני לא יודע באיזה db אתה משתמש, ויתכן שהפתרון פשוט יותר ב-db אחר.
    ל"בקשה" אני בדר"כ מתייחס כ-Stored Procedure, ואכן אני יכול להעביר אליה כפרמטר את ה-id של המשתמש. הכל טוב ויפה כשניהול ההרשאות מבוצע ברמת הקוד.

    אבל כשאני כותב טריגר אני כותב אותו ברמת ה-DB, ומצמיד אותו לפעולה מסויימת על טבלה, שיכולה להתבצע מכל מיני SP-ים שונים, או אפילו כתוצאה מפעולה ישירה בטבלה (למרות שזה לא מצוי לשנות טבלאות ישירות מהקוד). כיצד אדע אז לשלוף את ה-ID משם? אני צריך קודם לדעת איזה משתמש הפעיל את הטריגר, וב-SQL Server זה עשוי להיות מורכב.

    למען האמת אני לא יודע על דרך ברורה לעשות את זה. אולי צריך להגדיר הרשאות משתמשים ברמת ה-DB על ידי Roles, אבל זה יתן מידע כללי, לאיזה Role שייך המשתמש. אפשר גם לדעת איזה משתמש Windows הפעיל את הטריגר, אבל זה לא מה שאתה צריך.

  • heroku - איך מתחילים

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

    התקנתי node.js על שרת apache ב-ubuntu.
    בפורט 8080 אני מקבל שגיאה ERR_EMPTY_RESPONSE , איך אני ניגש לקבצים?

  • עזרה | קבלת טקסט נבחר מtextarea בJS

    הועבר
    5
    1 הצבעות
    5 פוסטים
    194 צפיות

    @מוטי-אורן תודה רבה!!!

  • הראוטר VUE לא קולט טוב

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

    @chagold אמר בהראוטר VUE לא קולט טוב:

    @dovid אמר בהראוטר VUE לא קולט טוב:

    .htaccess

    כמופיע בסטאק שם, עשיתי את זה ואני מקבל שגיאה 500.

    כי הhtaccess לא מכובד בברירת מחדל, אז עליך להשים את זה בהגדרות האתר או להוסיף הגדרת AllowOverride All בהגדרות האתר.

  • עזרה | הכנסת שורות למערך

    הועבר
    8
    1 הצבעות
    8 פוסטים
    193 צפיות

    @yossiz ב"ה בסוף מצאתי את זה תודה רבה על ההיענות

  • ויזואל סטודיו | תבנית נעלמה

    הועבר
    10
    0 הצבעות
    10 פוסטים
    269 צפיות

    @dovid אמר

    תבנית לא דרושה בשביל לעבוד על פרוייקט כזה אלא נטו בשביל יצירה חדשה שלו.

    אכן, שכחתי לציין שאני יצרתי את הפרוייקט הנ"ל.

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

  • נוסחה באקסל

    הועבר
    10
    0 הצבעות
    10 פוסטים
    285 צפיות

    @avi-rz אמר בנוסחה באקסל:

    אולי תכניס את התא שממנו אתה רוצה לשלוף את הערך לתוך nz

    nz זה פונקציה של אקסס ושפת vba אבל אין נוסחת nz באקסל

  • הדגשת תוצאות חיפוש באקסס

    הועבר
    21
    1 הצבעות
    21 פוסטים
    478 צפיות

    @odeddvir 👍
    את האמת נתקלתי בבעיה הזו וכבר סידרתי את זה על פי זה..
    אבל לך מגיע הקרדיט משום תועלת הרבים... 👍

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

    מצאתי את ההגדרה
    TextFormat
    כדי לשנות לטקסט עשיר

    me.<שם תיבת טקסט>.TextFormat=acTextFormatHTMLRichText

    וכדי לשנות לטקסט רגיל

    me.<שם תיבת טקסט>.TextFormat=acTextFormatPlain
  • המחשב שלי חסום בגיטהאב

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

    @nigun תודה רבה.

  • 0 הצבעות
    7 פוסטים
    180 צפיות

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

    הקלטתי מאקרו זה מה שיצא וזה עובד

    var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.getRange('A1').activate(); spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});

    השאלה היא האם יש דרך יותר נכונה לעשות את זה או שזה בסדר ?

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