תכנות

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

  • בעיה ב API של youtube

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

    @yossiz אמר בבעיה ב API של youtube:

    @ass הגעת לפורום של הזקנים העצבניים... 🙂 לכן במקום התשובה שציפית לקבל תקבל שיחת מוסר ארוכה מטובלת בכמה שיעורי חיים...
    (טוב, לא כולם זקנים, אני מציג רק את עצמי)
    השאלה לא מספיק ממוקדת. אי אפשר לצפות שמישהו יעבור על כל המדריך שציינת ויבדוק למה לא עובד הקוד אצלך. (ובנוסף יש את האפשרות המאוד סבירה שהבעיה קשורה למשהו שבכלל לא כתבת בשאלה)
    התהליך הנורמלי של מתכנתים הוא לנסות למקד את הבעיה.
    כלומר לנסות למצוא איזה שורה של הקוד לא מתנהגת בצורה הצפוייה.
    איך?
    א) PHP פולטת שגיאות ואזהרות שונות, האם אתה מקבל אותם בפלט? (אם לא, תדאג שכן תקבל אותם). האם אתה רואה בפלט הזה שום שגיאות או אזהרות שיכולות להיות קשורות לנושא?
    ב) אם לא קיבלת שום שגיאה, תעבור על הקוד שלב שלב ותוסיף פקודות print שידפיסו את המצב הנוכחי, כלומר, ערכים של משתנים קשורים, או סתם לוג שהגעת לשלב הזה בהצלחה. תנסה לזהות אם המצב הנוכחי לא מתאים למה שציפית. (זו דרך לא מקצועית של דיבוג אבל נהוג מאוד בקהילת מפתחי PHP... נקרא בעגה המקצועית - כלומר אצלי... - בנימה של זלזול: console log debugging)
    ג) או תשתמש בדיבאגר אמיתי ותצעד צעד צעד דרך הקוד לבדוק איפה הוא נכשל. יש את xdebug עבור PHP.

    אני לא מומחה PHP. אולי יש למומחי ה-PHP פה טיפים יותר יעילים לדיבוג בעיות

    אתה פשוט אלוף

  • VS code web Extensions

    2
    0 הצבעות
    2 פוסטים
    59 צפיות
    אין תגובות
  • 0 הצבעות
    4 פוסטים
    103 צפיות

    @yossiz אמר בעזרה בשליחת נתונים בPOST לימות המשיח|PHP:

    @mgm-ivr
    ענו לך פה...
    שים לב לחוקי הפורום. יש להם הגיון...

    צודק

  • מעוניין לסייע (ללא תשלום) למפתח WEB

    הועבר
    16
    10 הצבעות
    16 פוסטים
    891 צפיות

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

  • 1 הצבעות
    5 פוסטים
    209 צפיות

    לכל המעוניין, להלן הפתרון שעבד לי:

    את הקובץ applicationhost.config שבתיקיה vs. פשוט מחקתי ו-VS יצר חדש.
    אני יודע שאפשר גם לערוך אותו כפי שמובא במקור שציין @רפאל, אבל זה היה יותר פשוט מלערוך אותו.

    בקובץ launchSettings הוספתי עוד פרופיל:

    "profiles": { ... "Watch": { "commandName": "Executable", "executablePath": "dotnet.exe", "workingDirectory": "$(ProjectDir)", "commandLineArgs": "watch run" }

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

  • חיבור בין paypal לריוחית באתר prestashop

    1
    0 הצבעות
    1 פוסטים
    76 צפיות
    אין תגובות
  • פתיחת URL מ-VBA עם שדות POST

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

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

  • קוד PHP שחוזר על עצמו

    הועבר
    22
    0 הצבעות
    22 פוסטים
    364 צפיות

    @ass אמר בקוד PHP שחוזר על עצמו:

    שלום לכולם..

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

    <?php $x = date("Y-m-d"); $y = date("Y-m-d"); while ($x == $y){ echo "Tomorrow's date is: " , $x; $x ++; } ?>

    ראיתי תשובות פה וגם פה אבל לא כל כך הבנתי, אני די חדש ב PHP.
    אשמח לעזרה או הסבר...
    תודה רבה.

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

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

    בסוף מה שעשינו היה כך(אני מקווה שיעזור גם לך)
    עשינו קובץ שבו היה כתוב'

    sleep(59); shell_exec("wget -O /dev/null https://קישור ישיר לקובץ שאותו רצינו להפעיל");

    שזה גרם בעצם שיחכה דקה ויפעיל את הקובץ

    בקובץ הראשי שמנו

    shell_exec("wget -O /dev/null https://קישור ישיר לקובץ שסופר דקה");

    וככה היה לנו מתזמן משימות מדוייק ולא סמוך על אף גורם חיצוני

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

  • 0 הצבעות
    2 פוסטים
    49 צפיות
  • צביעת תא ע"פ ערך

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

    @odeddvir אמר בצביעת תא ע"פ ערך:

    האם הצבע של התא הנוכחי משתנה?

    כן.

    @odeddvir אמר בצביעת תא ע"פ ערך:

    תבטל את שורה מספר 2 (תהפוך להערה):

    זה עדיין מחזיר #VALUE.

  • ניקוי אובייקט js

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

    @chagold אמר בניקוי אובייקט js:

    בשביל ההפניה המעגלית, צריך בפוקנציה שבקומפוננט שקורא (למוטציה), לשכפל את האובייקט

    selectaccount:function (payload) { const { account } = payload; this.$store.commit("selectaccount",account); }

    @chagold, הערה בדרך אגב (לא חושב שזה מצדיק נושא חדש):
    אפשר לעשות destructuring על הארגומנט עצמו, ובכך לחסוך שורה מיותרת:

    selectaccount:function ({ account }) { this.$store.commit("selectaccount",account); }
  • בית חכם...

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

    @nigun
    אל תדאג, לקחתי רק את החלק הרלוונטי מדבריו... 🙂
    אני גם לא חושב שהוא התכוון שלא להוציא שקל על זה, זה רק רוח הדברים...
    @yossiz אני צודק?

  • תמיכת css בגימייל

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

    @chagold
    https://www.caniemail.com/search/?s=margin
    עיין שם הערה 1.
    כתוב שערכים שליליים לא נתמכים.

    ככלל, מומלץ לעיין באתר הנ"ל כדי לגעת איזה תכונות נתמכות בקליינטים פופולאריים.

  • הפניות לאובייקטים ממחלקות יורשות

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

    @yossiz אמר בהפניות לאובייקטים ממחלקות יורשות:

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

    אני רוצה עוד יותר להפשיט ברשותך:

    class Animal { public string Sound {get; set;} = 'Unknown'; public void MakeSound() { Console.WriteLine(Sound); } } class Cow : Animal { public void GiveMilk() { Console.WriteLine('Milk!'); } } Animal a; a.Sound = 'Grrrrr!!!!'; Cow cow; cow.Sound = 'Mooo!!!' a.MakeSound(); // prints "Grrrr!!!" cow.MakeSound(); // prints "Mooo!!!" cow.GiveMilk(); // prints "Milk!" ((Cow) a).GiveMilk(); // casting error a = cow; a.MakeSound(); //prints "Mooo!!" a.GiveMilk(); //Error ((Cow) a).GiveMilk(); //Ok //אבל a= new Animal(); a.MakeSound(); //prints Unknown
  • הטמעת אלמנטים של svg בbackground

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

    @dovid אמר בהטמעת אלמנטים של svg בbackground:

    @chagold תשמור את זה כJPG באיכות תצוגה, ותקודד לbase64. זה עלול להיות קטן בהרבה.

    @dovid ג'ימייל גם לא תומך בbase64?

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

    @חגי אמר בחיבור מדפסת מדבקות ברקוד לתוכנה / תכנות מדפסת ברקוד:

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

    השאלה אם לא צריך להכיר את המערכת של המדפסת בשביל לפתח

  • רעיון לתוכנה לקטלוג נושאים תורניים

    13
    10 הצבעות
    13 פוסטים
    210 צפיות

    @מנצפך אמר ברעיון לתוכנה לקטלוג נושאים תורניים:

    אבל תוכנה בינונית שרוצים לאפשר בה UI מורכב ומודרני, זה או WPF (כואב מאוד), או וובי.

    או פלאטר, אבל זה כבר שפה אחרת ולא מוכרת.

  • 5 הצבעות
    8 פוסטים
    214 צפיות

    @dovid קודם כל אני נורא מתנצל, וכמובן אזכור להבא.
    אבל כדי להבין, האם זה קרה סתם כי העלתי קובץ EXE, או כי הם זיהוי את זה כנגוע?
    אם זה רק כי זה EXE, אולי אתה יכול להגביל העלאת EXE לאתר?
    שוב סליחה

  • mysql - תנאי לשדה סיכום

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

    @shpro654 חילקתי את הבעיה ל-3 בעיות יותר קלות, וכתבתי לכל אחת שאילתא נפרדת.

    רשימת הרכישות הרצויות מעל 50 ש"ח: SELECT customers.group_id, shopping.customer_id, Sum(IIf([purchase_amount]>50,1,0)) AS valid_puchase_count FROM customers INNER JOIN shopping ON customers.id = shopping.customer_id GROUP BY customers.group_id, shopping.customer_id HAVING (((Sum(IIf([purchase_amount]>50,1,0)))>0)); ואז על ידיה אפשר לקבל את מספר הרכישות הרצויות בכל קבוצה: SELECT valid_puchases.group_id, Count(valid_puchases.customer_id) AS customers_with_valid_purchases FROM ( SELECT customers.group_id, shopping.customer_id, Sum(IIf([purchase_amount]>50,1,0)) AS valid_puchase_count FROM customers INNER JOIN shopping ON customers.id = shopping.customer_id GROUP BY customers.group_id, shopping.customer_id HAVING (((Sum(IIf([purchase_amount]>50,1,0)))>0))) AS valid_puchases GROUP BY valid_puchases.group_id; מספר הלקוחות הכולל בכל קבוצה: SELECT groups.group_name, groups.id, Count(customers.id) AS customers_in_group FROM groups LEFT JOIN customers ON groups.id = customers.group_id GROUP BY groups.group_name, groups.id;

    ולבסוף איגדתי את כולן לשאילתא אחת:

    SELECT AllCustomers.group_name, AllCustomers.id, AllCustomers.customers_in_group, CustomersWithPurchase.customers_with_valid_purchases, IFNULL(CustomersWithPurchase.customers_with_valid_purchases,0)/(AllCustomers.customers_in_group) AS Per FROM ( SELECT groups.group_name, groups.id, Count(customers.id) AS customers_in_group FROM groups LEFT JOIN customers ON groups.id = customers.group_id GROUP BY groups.group_name, groups.id) AS AllCustomers LEFT JOIN ( SELECT valid_puchases.group_id, Count(valid_puchases.customer_id) AS customers_with_valid_purchases FROM ( SELECT customers.group_id, shopping.customer_id, Sum(IIf([purchase_amount]>50,1,0)) AS valid_puchase_count FROM customers INNER JOIN shopping ON customers.id = shopping.customer_id GROUP BY customers.group_id, shopping.customer_id HAVING (((Sum(IIf([purchase_amount]>50,1,0)))>0))) AS valid_puchases GROUP BY valid_puchases.group_id) AS CustomersWithPurchase ON AllCustomers.id = CustomersWithPurchase.group_id;
  • נושא זה נמחק!

    הועבר
    1
    0 הצבעות
    1 פוסטים
    47 צפיות
    אין תגובות
בא תתחבר לדף היומי!