דילוג לתוכן

תכנות

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

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


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

  • C# קבלת Token של ימות המשיח

    הועבר
    12
    0 הצבעות
    12 פוסטים
    414 צפיות
    ח

    @dovid אמר בC# קבלת Token של ימות המשיח:

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

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

  • 2 הצבעות
    4 פוסטים
    374 צפיות
    י

    @nigun אכן אסביר מה עשיתי
    א. מדובר בשרת לינוקס
    ב. התקנתי את זה על השרת https://www.cyberciti.biz/open-source/html-to-pdf-freeware-linux-osx-windows-software/
    ג. את ההמרה ביצעתי על ידי הפעלת התוכנה ב php בקוד הבא

    $exec = shell_exec("html2pdf http://path/to/.html /path/to/new.pdf");

    ד. כדי שידפיס לי את הגופן שאני רוצה הוספתי ל html את הגופן הרצוי בתגית <FONT> (לוודא שזה מותקן)
    ד. וככה קיבלתי את התוצאה המושלמת בדיוק כפי שזה מוצג בדפדפן

    חן חן ל@nigun שנתן לי את ההדרכה

  • פתיחת קישור בחלון חדש. פתרון לcorvid

    3
    0 הצבעות
    3 פוסטים
    86 צפיות
    אבי 203א

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

  • אני רוצה ללמוד לעצב פורום NODEBB

    4
    1 הצבעות
    4 פוסטים
    101 צפיות
    WWWW

    @mgm-ivr
    🙂

  • שאלה במבנה טבלה

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

    @מנצפך הדרך הנכונה זה הNULL.

  • 0 הצבעות
    1 פוסטים
    30 צפיות
    אין תגובות
  • תוסף בכרום.

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

    @dovid זה כבר קיים אצלי, (כמשתנה לפני סמל התוסף) בכ"ז ניסיתי למחוק את הקיים ולהביא א"ז וכלום.

  • איך לפרק אקספרשן

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

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

    var exp = x => x.Name.Contains(""); Console.WriteLine(exp.ToString()); // x => (x.Name.Contains("")) var func = exp.Body; Console.WriteLine(func.ToString()); // ( x.Name.Contains("")) Console.WriteLine(func.Type == typeof(bool)); //true - returned type //body node type. true for x.Contains("xx"). //other: https://docs.microsoft.com/en-us/dotnet/api/system.linq.expressions.expressiontype?view=netcore-3.1 Console.WriteLine(func.NodeType == ExpressionType.Call); //check if the Node is a MethodCallExpression. if(func is MethodCallExpression funcAsMethod) Console.WriteLine( funcAsMethod.Method.Name); // Contains for x.Contains("y")
  • ניהול קאש קל ומקצועי

    3
    1 הצבעות
    3 פוסטים
    87 צפיות
    א

    מי אני שאתווכח עם הפרופסור

  • הבנת הערכים של dstat

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

    @yossiz
    קצת הסתבכתי עם הסברים המלומדים
    הבנתי זה אומר שיש עומס בתור למעבד
    אבל אם ככה המעבד לא אמור להיות על 100%?

  • הבנה בJS

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

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

  • אלבום דיגטלי

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

    @שואף תוכנה מעולה. זה התוכנות בדרך כלל מאד דומה ברוב החברות

  • תוכנה שנועלת קבצי EXE עם סיסמה

    הועבר
    6
    0 הצבעות
    6 פוסטים
    219 צפיות
    ז

    @mgm-ivr אמר בתוכנה שנועלת קבצי EXE עם סיסמה:

    נראה לי שהוא התכוון לחסום את הדפדפן עם סיסמה
    (הוא שאל אותי את זה בעבר)
    @זליג-פוקס נכון?

    נכון
    תודה

  • 0 הצבעות
    22 פוסטים
    171 צפיות
    י

    @אבי-203 אמר בפונקציית includes מחזירה לי שגיאה, פעם כן פעם לא.:

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

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

  • ניהול צד קליינט עם הרבה דפים

    2
    0 הצבעות
    2 פוסטים
    43 צפיות
    אין תגובות
  • 0 הצבעות
    4 פוסטים
    78 צפיות
    מנצפךמ

    יש לך שרת עם GUI? (בלינוקס??)
    או רק טרמינל?
    אתה מתחבר דרך SSH?

  • מעצב CSS מקצועי

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

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

  • השמעת קבצים מהמחשב לWEBRTC

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

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

  • JS: איך עובד this binding?

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

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

    ובהקדם,
    צריך להבחין בין ערך, מצביע, ו-identifier.

    ערך הוא הערך הגולמי. לדוגמה המספר 5, או התו 'a'. זה אובייקט שקיים בזכרון בזמן ריצה. מצביע (pointer) ג"כ הוא אובייקט פיזי שקיים בזמן ריצה. כלומר, מדובר על ערך שקיים בזכרון שערכו הוא כתובת זכרון של אובייקט אחר. בשונה מזה, identifier הוא מושג שקיים רק ברמת השפה/מפרסר. מדובר על "ידית" לכתובת זכרון, כלומר, דרך להזכיר את הכתובת של ערך בלי לייצר "מצביע" רגיל.
    (למי שמכיר, ההבדל בין pointer ל-identifier הוא ההבדל ב-++C בין pointer ל-reference variable, נוסח אחר לאותו מושג זה lvalue ו-rvalue)

    ברמת השפה/מפרסר הפעולה של ++ חלה רק על identifier ולא על ערך.
    אמנם ברמת ההרצה, תמיד הפעולה יתבצע על ערך גולמי ולא דרך identifier. המושג identifier לא קיים עבור סביבת הריצה. הכל מתבצע ישירות על ערכים.

    אם כן, אפשר לתרגם מה ש@dovid אמר בצורה כזאת:
    התוצאה של ביטוי לוגי עם אופרטור || היא "ערך" ולא identifier. והמפרסר חייב identifier עבור פעולת ++.

    אותו דבר, ב-this binding.
    המפרסר עושה את איגוד ה-this בכפוף לצורה שבה הזכרת את הפונקציה. אם הזכרת אותו על ידי identifier שהוא חלק מביטוי שהוא בתבנית MemberExpression אז יתבצע איגוד לאובייקט הבסיס של ה-MemberExpression. אחרת זה לא יתבצע.
    הביטוי logger.log || console.log הוא לא MemberExpression
    ויותר מזה הוא לא identifier בכלל אלא ערך גולמי של פונקציה. וזה מה שדוד מוסיף.

    הכל ברור? 🙂

    עריכה: ושכחתי להגיד תודה ל @dovid על העזרה שלו בליבון הנושא. תודה רבה.

  • הקמת אתר ויקי - איך מתחילים?

    הועבר
    2
    0 הצבעות
    2 פוסטים
    228 צפיות
    chagoldC

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

    https://www.whoishostingthis.com/compare/applications/wiki/
    https://blog.capterra.com/popular-wiki-software-products/
    https://www.siteground.com/compare_best_wiki.htm

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

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