דילוג לתוכן

תכנות

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

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


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

  • שדרוג שרת לינוקס אבונטו 18.04 ל 20.04

    9
    1 הצבעות
    9 פוסטים
    91 צפיות
    ח

    משום מה לא קיבלתי התראות של הודעות חדשות בנושא זה, אז בכל מקרה התקדמתי לבד בבדיקת עניין המעבר, בציעתי התקנה של מה שאני צריך בשרת חדש נקי
    lemp node pm2 וכו'.
    מחיפוש ברשת לגבי העברת ד"ב היה נראה שהפתרון הוא לבצע יצוא וגיבוי על ידי mysqldump.
    בהתחלה ניסיתי לבצע יצוא מלא ושחזור מלא של כל הטבלאות אבל אז נתקע לי טבלת היוזרים, ולא ניתן היה לשנות ולהוסיף יוזרים, אז לבסוף עבדתי לפי ההנחיות כאן https://dev.mysql.com/doc/refman/8.0/en/mysqldump-upgrade-testing.html אך ציינתי במפורש רק את הטבלאות שלי ולא כל הטבלאות, ואז ב"ה עבר ללא בעיה.
    את העברת הקבצים (קובץ היצוא של הד"ב כמעט 3G) ואת כל קבצי הPHP וNODEJS העברתי בין השרתים על ידי scp וזה עבר ממש מהר ובקלות.
    ובתכלית נראה שהכל תקין וכמעט מוכן לבצע את העברה.
    נותר רק להתקין את תעודת האבטחה לדומיינים (קצת בעיה, היות וכעת הדומיינים מפנים לIP של השרת הקודם, וברגע שיהיה מוכן אני סך הכל מעביר את הIP לשרת החדש, ולכן בינתיים זה בעיה ליצור אימות..)
    ובנוסף להעביר מחדש את הד"ב ברגע שהכל מוכן.
    הייצוא + העברה + פריסה מחדש, אמור לקחת לכאורה 45 דקות בערך.
    שבינתיים הכל מחובר לשרת הישן, אך אצטרך לחסום את אפשרות הכתיבה לד"ב כדי שמשעת הייצוא ועד סיום היבוא והחיבור לחדש ובדיקה שהכל תקין לא יהיה אפשרות לבצע שום פעולה.
    (אשמח להמלצה איך לבצע את הנעילה)
    מקוה מאוד שלא פיספסתי משהו

  • ממשק WEB לניהול שרת VPS, האם קיים?

    הועבר
    18
    0 הצבעות
    18 פוסטים
    390 צפיות
    איש נחמדא

    @שואף אמר בממשק WEB לניהול שרת VPS, האם קיים?:

    @איש-נחמד אמר בממשק WEB לניהול שרת VPS, האם קיים?:

    יש מי שהתנסה ב-http://web-console.org ?

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

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

  • הכנסת קופוננטים בראוטר VUE

    2
    0 הצבעות
    2 פוסטים
    33 צפיות
    A

    @chagold
    מאמין שהדרך הנכונה לעשות את זה היא עם layouts שונים, וnested router.
    כלומר layout אחד לadmin, שני לuser, בתוכו כל layout יש את התפריט היחודי, ובנוסף אתה מגדיר איפה בתצוגה לרנדר את הקומפוננטה "האמיתית", שבעצם מוגדרת לפי הnested router.
    https://router.vuejs.org/guide/essentials/nested-routes.html

    ההיכרות שלי עם vue מינמלית, אז לצערי לא יכול לכוון אותך יותר מזה

  • פרוקסי ל WebSocket ב NodeJS

    3
    0 הצבעות
    3 פוסטים
    51 צפיות
    dovidD

    תשתמש בnginx ותרויח גם פתרון קל וגם ביצועים טובים יותר.

  • דימוי לcron בוינדוס

    3
    0 הצבעות
    3 פוסטים
    53 צפיות
    dovidD

    מתזמן המשימות. התוכנית היא php.exe מאיפה שהיא נמצאת והארגומנט הוא הקובץ.

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

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

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

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

    1
    0 הצבעות
    1 פוסטים
    1 צפיות
    אין תגובות
  • עזרה בAPI של ימות המשיח

    הועבר
    3
    0 הצבעות
    3 פוסטים
    176 צפיות
    איש נחמדא

    רלוונטי עדיין?

  • הפצת לינוקס כשרה

    הועבר
    8
    5 הצבעות
    8 פוסטים
    485 צפיות
    ח

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

  • אקסס | יצירת רשימה לפקד משולב

    16
    0 הצבעות
    16 פוסטים
    345 צפיות
    ליבלל

    @אביי פשוט מאוד תבנה במקור שורה שאילתא טור א' ID טור ב' ערים
    וברוחב עמודות תגדיר 0ס"מ;3ס"מ התחביר פשוט 0ס"מ לטור א' 3ס"מ לטור ב'
    שים לב: טור א' מחזיר למקור הפקד

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

    27
    1 הצבעות
    27 פוסטים
    238 צפיות
    nigunN

    @dovid
    אני לא יודע למה אבל כשהרצי מאות בקשות בלי לזרוק סגירה בכל מקום נתקעתי עם Too Many Connection
    ועכשיו זה כבר לא קורה

  • האם יש הגבלות בהגדלת שרתים בOVH?

    15
    0 הצבעות
    15 פוסטים
    141 צפיות
    nigunN

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

  • mysql סינון בטבלה מרובת שורות

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

    תכתוב שאילתה כזו בphpmyadmin, ובדוק את הexplain שלה.

  • דרוש מפתח WordPress

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

    הסתדרת?

  • mysql לכידת השאילתות שמעמיסות על השרת

    2
    0 הצבעות
    2 פוסטים
    41 צפיות
    nigunN

    @חוקר
    יש כאן פקודה להגבלת הזמן לבקשות סלקט
    https://stackoverflow.com/a/23319195

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

    10
    0 הצבעות
    10 פוסטים
    211 צפיות
    שואףש

    אז זהו הפיתרון שלי
    נראה שעובד תקין, קצר ולענין ב"ה

    function validateTokef($tokef) { $monthInputed = substr($tokef, 0, 2); $yearInputed = substr($tokef, 2, 2); if ( !$monthInputed or $monthInputed > 12 or $yearInputed < date('y') or $yearInputed > (date('y') + 15) or ($yearInputed == date('y') and $monthInputed < date('m')) ) return false; else return true; } function validateCreditCard($card) { $pattern = '#4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|(?:2131|1800|35\d{3})\d{11}#'; if (!preg_match($pattern, $card)) return false; if (!luhnTest($card)) return false; return true; } function luhnTest($num) { $str = ''; foreach (array_reverse(str_split($num)) as $i => $c) $str .= ($i % 2 ? $c * 2 : $c); return array_sum(str_split($str)) % 10 == 0; }
  • משתנה מסוג מערך ב sqlite

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

    אני מבין שמדובר בSQLalchemy, דוקא יש שמה טיפוס ARRAY אבל הוא נתמך רק בPostgreSQL.
    אני רואה באינטרנט (חיפוש sqlalchemy sqlite list field) פתרונות שונים - פה שימוש בטבלה ייעודית עם שדה מקושר https://stackoverflow.com/a/7300417/1271037.
    אבל זה נראה שאין דרך קלה - תוכלו לנהל את זה בעצמכם עם טקסט מופרד בתו כל שהוא כמו פסיק, וכמו ש@chagold הציע.

  • שיפור מהירות אתר, גישה נכונה לכל הפריטים/מוצרים.

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

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

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

    let queryResults; let queryResults3; let queryResults4; $w.onReady(async function () { queryResults = await wixData.query("muzarim") .descending("seder") .limit(10) .find(); $w('#repeater1').data = queryResults.items; // await repeater1_itemReady() console.log("1"); loadRemaining(); }); // var dataa = []; async function loadRemaining() { queryResults3 = await wixData.query("muzarim") .descending("seder") .skip(10) .find(); let data = $w('#repeater1').data; let data3 = await data.concat(queryResults3.items); console.log(data3); return data3.items.map((item) => { return { "_id": item._id, "sem": item.sem, "mkt": item.mkt, "imeg": item.imeg, "mehir": item.mehir, "link1": item["link-muzarim-sem"], "link2":item["link-muzarim-editor-_id"] }; } ); var myJSON = JSON.stringify(data3) memory.setItem("data3", myJSON) } export function repeater1_itemReady($item, itemData, index) { $item('#mehir').text = itemData.mehir; $item('#sem').text = itemData.sem; $item('#mkt').text = itemData.mkt; $item('#image9').src = itemData.imeg; $item('#button114').link = itemData["link-muzarim-sem"]; $item('#button102').link = itemData["link-muzarim-editor-_id"]; }

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

    let key = event.key; if (key === "Enter") { let muzarim = memory.getItem("data3") var muzarim2 = JSON.parse(muzarim); const data = muzarim2.filter(d => d.mkt.includes($w('#mktinput').value)); $w('#repeater1').data = data; {

    תודה בכל אופן.

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