דילוג לתוכן

תכנות

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

  • עיצוב שורת הקוד בפורום מבוסס NodeBB

    הועבר
    3
    0 הצבעות
    3 פוסטים
    176 צפיות
    שמואל4ש

    @אוריי יש ניהול מובנה על זה ב: https://xxx/admin/plugins/markdown תחת CODE FORMATTING

  • ג'אווה... התחביר נכון?

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

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

  • ימות המשיח הוסיפו כתובות אייפי?

    13
    0 הצבעות
    13 פוסטים
    390 צפיות
    OdedDvirO

    @dovid אמר בימות המשיח הוסיפו כתובות אייפי?:

    במקרה של 28 קשה לנתח את זה בראש, כלומר אנחנו מחלקים אייפי לנוחות ל4 מקטעים ו28 סיביות עובר באמצע המקטע האחרון

    כזה:
    d07214ce-f253-4c1e-a79e-e6c2e9d1d820-תמונה.png

  • מה ההסבר לשגיאה הזו בסליקת אשראי ב API

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

    @yossiz אמר במה ההסבר לשגיאה הזו בסליקת אשראי ב API:

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

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

    ומסוף האמת גם לא עובד -זה בבדיקה😕 😕

  • מישהו יודע איך עורכים כזה קובץ?

    הועבר
    23
    0 הצבעות
    23 פוסטים
    964 צפיות
    פישלפ

    @יאנג-בוי אמר במישהו יודע איך עורכים כזה קובץ?:

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

    הצלחת להכניס בי את הייאוש 😊 😊

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

    1
    0 הצבעות
    1 פוסטים
    78 צפיות
    אין תגובות
  • חזרה לוינדווס 7

    הועבר
    10
    0 הצבעות
    10 פוסטים
    326 צפיות
    ארגנטיניא

    @אלי המחשב שלי נהיה מאוד איטי

  • עזרה בהבנת תחביר לולאה בפייתון

    5
    0 הצבעות
    5 פוסטים
    131 צפיות
    yossizY

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

    אבל למרות זאת הסתקרנתי...

    s היא משתנה מסוג pandas.Series. זה טייפ שמחזיק מידע בצורה של רשימה של ערכים ואינדקס שמחזיק שם/מפתח לכל רשומה ברשימה.

    זה לא מערך אלא class. ל-class יש מאפיין index שמחזיר רשימה של... כל ה-index-ים...

    התחביר של הלולאה נקרא list comprehension (תגגל...)

  • איך בונים מנוע חיפוש

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

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

  • Logical assignment ב-V8

    17
    3 הצבעות
    17 פוסטים
    272 צפיות
    א

    @dovid
    התכוונתי ל
    if (newData) arr.push(newData)

    אבל זה לא יחסוך כלום

    לא מצליח לשחזר המקרים שהשאירו לי טראומה..

  • איך מתממשקים לסליקת אשראי בקשר

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

    @יוס אמר באיך מתממשקים לסליקת אשראי בקשר:

    -כיצד אני כותב את השירות המבוקש

    אתה משאיר את כל הקוד בדוגמא חוץ מהקטע הזה

    $obj=new stdClass(); $obj->creditNum = "55555551"; $obj->expiry = "1612"; $obj->token = ""; $obj->total = 34; $obj->currency = "1"; $obj->cvv2 = "123"; $obj->id = "311201305"; $obj->authCode = ""; $obj->uniqNum = "123hnbh"; $phpresponse = $client->DebitRegularType($obj);

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

  • 0 הצבעות
    17 פוסטים
    341 צפיות
    WWWW

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

    ncdu /

    פעם ראשונה תתקין אותו ככה:

    apt install ncdu

    תוכנה מאד נוחה.

  • JS קבלת מערך של סוגי התנאים הקיימים למשתנה מסויים

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

    סתם יותר נקי

    const actionsHandler = { new, user }; function new(){ } function user(){ }
  • setInterval

    9
    0 הצבעות
    9 פוסטים
    277 צפיות
    dovidD

    @shpro654 ראשית הקוד יפה, וניכר שאתה מכיר הרבה פיצ'רים בתכנות ובES6/TS בפרט.
    אתחיל מהשאלה האחרוה, הדרך צריכה להיות מקום אחד שמטפל בהכל בעזרת פונקציות משנה שכמה שיותר ממוקדות בתפקיד מסויים וכמה שפחות ממשיכים את התהליך.
    בא נראה את הקוד.
    א. השורה הזו:

    const getAds = () => {

    שקולה (כמעט) לגמרי לפונקציה רגילה:

    function getAds() {

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

    ב. השורה הזו:

    checkIfFolderChanghd(ads) && setAds(ads);

    היא טריקית, לא שזה נורא, אבל אם זה לא חוסך אין סיבה שלא לכתוב ברחל בתך הקטנה:

    if(checkIfFolderChanghd(ads)) setAds(ads);

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

    function checkIfFolderChanghd(ads) { const adminAdsLength = adminSettings.adsLength let adsLength = ads.length; let newUpdate = ''; if (!adsLength) return true; if (adsLength < adminAdsLength || adsLength > adminAdsLength) { return true; } for (let i = 0; i < adsLength; i++) { const { fileDateCreated } = ads[i]; if (fileDateCreated > newUpdate) { newUpdate = fileDateCreated; } } if (newUpdate <= adminSettings.update) { return false; } return true; }

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

    if (adsLength != adminAdsLength)

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

    for (let i = 0; i < adsLength; i++) { if (ads[i].fileDateCreated > adminSettings.update) return true; }

    גם על קוד שלי המשופץ יש לי שני שיפורים לומר.
    האחד תשכחו מלולאת for כמה שיותר, זה לולאה עם קריאות מסבכת ביחס לfor of. הכל נראה אלגנטי הרבה יותר בלולאת for of:

    for (const ad of ads) { if (ad.fileDateCreated > adminSettings.update) return true; }

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

    function checkIfFolderChanghd(ads) { return adminSettings.adsLength != ads.length || ads.some(ad => ad.fileDateCreated > adminSettings.update) }

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

  • google app script - cross

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

    קריאה ל-google app script (תוסף ל-google sheets, עבור api ל-google apps, במקרה דנן מביא נתונים מ-google drive).

    8.JPG

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

    1
    0 הצבעות
    1 פוסטים
    9 צפיות
    אין תגובות
  • אולי מוכשרי 'תחומים' יחלצו את ישראל ממשבר הקורונה?

    18
    1 הצבעות
    18 פוסטים
    365 צפיות
    nigunN

    @יהודי-טוב
    מה יעזור לדון על זה כאן?
    שים לב שאתה בפורום תכנות.

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

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

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

    @שואף אמר בשליפת CID של כרטיס זיכרון:

    אבל התכנה שאני בודק איתה, כן נותנת על הרגיל.

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

  • חישוב סכום ריצה עבור נקודת פתיחה בחשבונאות - SQL

    3
    0 הצבעות
    3 פוסטים
    103 צפיות
    chagoldC
    למה באותה שורה יש גם סכומים שיכולים להיות + ויכולים להיות -?
    לא יותר טוב לעשות את הסכום הנכון ואם הוא החסרה אז פשוט לכתוב את הסכום במינוס ואח"כ רק לעשות שאילתת sum בסינון השורות הרלוונטיות? (לא משנה איך אתה מציג את זה לקליינט(שתוכל להציג לו ב-2 עמודות, אחד להכנסות ואחד להוצאות), כאן מדובר רק על הDB.
    כמו"כ, בנוגע לסוג הפעולה, לא הבנתי. אם לדוגמא זה 'הלואה'. אז התכונת שיהיה 2 אופציות 1 + ואחד -? בנוגע לגוף השאלה אני סבור כ@OdedDvir. אבל יותר מזה, במערכות מסודרות (לדוגמא קבלות מוכרות ע"י רשות המסים) אין כזה דבר מחיקת שורה, אלא שורת ביטול. ותוכל שמה לשים ג"כ את היתרה העדכנית נכון לעת הביטול.
    עכ"ז אכן במקרה והביטול מחוייב שיתייחס לנקודת זמן מוקדמת יותר, תצטרך לעשות עדכון על הסיכום.
בא תתחבר לדף היומי!