דילוג לתוכן

תכנות

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

  • תעלומה ב VB.NET - שגרת אירוע שרצה על דעת עצמה...

    8
    1 הצבעות
    8 פוסטים
    638 צפיות
    מנצפךמ

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

  • מחפש ספרייה ליצירת טבלת HTML מעוצבת

    הועבר
    31
    0 הצבעות
    31 פוסטים
    3k צפיות
    WWWW

    @dovid אמר במחפש ספרייה ליצירת טבלת HTML מעוצבת:

    @www אמר במחפש ספרייה ליצירת טבלת HTML מעוצבת:

    @dovid אמר במחפש ספרייה ליצירת טבלת HTML מעוצבת:

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

    עוד לא התחלתי...

    אז להתראות כשתגמור.

    תודה רבה!

  • בעיה ב WebSocket

    7
    0 הצבעות
    7 פוסטים
    514 צפיות
    מנצפךמ

    @dovid עשיתי npm install:

    npm ERR! code UNABLE_TO_VERIFY_LEAF_SIGNATURE npm ERR! errno UNABLE_TO_VERIFY_LEAF_SIGNATURE npm ERR! request to https://github.com/component/emitter/archive/1.0.1.tar.gz failed, reason: unable to verify the first certificate npm ERR! A complete log of this run can be found in: npm ERR! /home/avram/.npm/_logs/2018-07-12T06_37_14_556Z-debug.log
  • אנגולר- הצגת סיכום של פריטים שנבחרו

    6
    0 הצבעות
    6 פוסטים
    568 צפיות
    מנצפךמ

    @אהרן שזה יהיה שם המערך המפולטר.
    אחרת אין לך צורה לגשת למערך המפולטר.

  • התממשקות מתכנת עם מעצב/מאפיין אתרים

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

    @שמואל
    אני חושב שזה אפשרי לגמרי

  • שאלה באובייקטים ב JS

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

    @dovid אמר בשאלה באובייקטים ב JS:

    הדרך המקובלת היא כמו שכתבתי לך בעבר:
    http://tchumim.com/topic/2989/js-גישה-לילדים-של-אובייקט/3
    רק שכנראה אתה שואל איך משתמשים בזה להשמה, אז ככה:

    x.y = x.y || {}; x.y.z = {};

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

    (x.y = x.y || {}).z = {};

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

    בהמשך לשם, בLodash עושים את זה ככה:

    _.set( x, 'y.z', {} );
  • הענקת הרשאות לתיקיית רשת ב C#

    14
    0 הצבעות
    14 פוסטים
    957 צפיות
    מנצפךמ

    @dovid לגבי מה שכתבת, בעיות ירושה. חשבתי על זה.
    וממה שזכור לי עשיתי את הבדיקה שכתבת במתקדם, ולא היו הבדלים. אבדוק זאת שוב.

  • api - קריאות מרובות במקביל

    6
    0 הצבעות
    6 פוסטים
    389 צפיות
    dovidD

    @chagold אמר בapi - קריאות מרובות במקביל:

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

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

  • מעבר משתמש בווינדוס 10

    1
    0 הצבעות
    1 פוסטים
    242 צפיות
    אין תגובות
  • שגיאה ב DotNet

    4
    0 הצבעות
    4 פוסטים
    341 צפיות
    מנצפךמ

    עדכון:
    זה לא באמת עזר.
    מה שעזר זה לעשות דיבוג. לכבות כל מיני פונקציות עד שהגעתי לפונקציה הבעייתית.

  • קוד מוכן לאיפוס סיסמה - PHP

    הועבר
    1
    0 הצבעות
    1 פוסטים
    324 צפיות
    אין תגובות
  • קבצים ברשת

    19
    0 הצבעות
    19 פוסטים
    1k צפיות
    מנצפךמ

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

  • מחלקה המטפלת בשגיאות כתיב וכדומה

    הועבר
    13
    0 הצבעות
    13 פוסטים
    954 צפיות
    A

    @by6199
    אמנם אתה מדבר כנראה על php, אבל מצאתי מציאה טובה, ואני חייב לשתף. מה גם שכנראה זה יכול לבוא לידי שימוש עם קצת קומבינציה..
    https://github.com/eranroz/HspellPy

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

  • regex ב-php

    2
    0 הצבעות
    2 פוסטים
    267 צפיות
    dovidD

    @chagold אמר בregex ב-php:

    http://php.net/manual/en/function.pathinfo.php
    או כל נושא לחוד:
    http://php.net/manual/en/function.dirname.php
    http://php.net/manual/en/function.basename.php

    אם אתה רוצה לממש לבד, או ע"י מציאת האינדקס האחרון של הסלש:

    function SplitToNameAndPath($full){ $index = strrpos($full, '/'); return array(substr($full, 1, $index), substr($full, $index + 1)); }

    או כמובן רגקס:

    function SplitToNameAndPath($full){ preg_match('/(.+\/)([^\/]+)/', $full, $matches); return $matches; }
  • בעיה מוזרה ב PM2

    1
    0 הצבעות
    1 פוסטים
    281 צפיות
    אין תגובות
  • Socket.io Remote Desktop

    הועבר
    16
    0 הצבעות
    16 פוסטים
    1k צפיות
    clickoneC

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

  • לולאת for in מריץ לי פונקציה שנמצאת בפרוטוטייפ

    6
    0 הצבעות
    6 פוסטים
    530 צפיות
    dovidD

    @אהרן אמר בלולאת for in מריץ לי פונקציה שנמצאת בפרוטוטייפ:

    @dovid אמר בלולאת for in מריץ לי פונקציה שנמצאת בפרוטוטייפ:

    https://stackoverflow.com/questions/500504/why-is-using-for-in-with-array-iteration-a-bad-idea

    ראיתי א"ז
    ולא הצלחתי להבין האם הם רק מפרטים את הבעיה או גם מביאים פתרון.

    זה לא בעיה בכלל. זה מה שכתוב שם, שלא משתמשים עם for in לעבור על מערך, ויש כמה דוגמאות למה. אחת מהם זה הבעיה שלך. גם בMDN מומלץ לא להשתמש בלולאה זו למעבר על למערכים.
    אתה פשוט משתמש בכלי לא נכון. for in לא עשוי לעבור על מערכים. תשתמש בfor of או בfor each.

  • async ב - forEach

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

    ברור שאפשר.
    הנה: https://stackoverflow.com/q/29880715/1271037
    הפתרון שם מבוסס על רקורסיה שנגמרת כשמערך ריק.

  • איך לעשות מספור מ-0 לכמה לקוחות

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

    @מנצפך אני מבין שאתה רוצה מס' רץ פר לקוח (קראת לזה לקוח אבל זה יכול להיות כל ישות שיכולה להיות הרבה).
    כלומר שלא יהיה 1 לראובן 2 לשמעון אלא אחד של ראובן ואחד של שמעון.
    כעת הבעיה שלך זה איך לייצר את המספר הזה.
    אני מבין שROW_NUMBER או כל דרך תצוגתית לא טובה לך, כי זה לא מזה אמיתי: במקרה של מחיקת שורות, כל המזהים ישתנו. שים לב אבל שאם לעולם אין מחיקת שורות, אז יש פה דרך פשוטה ממש, אם כי לא הכי בעלת תוקף.

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

  • הרשאות ב ProgramData

    10
    0 הצבעות
    10 פוסטים
    613 צפיות
    dovidD

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

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