למדתי אנגולר, בניתי פרוייקט תוך כדי למידה, למה שלא תרוויחו מזה גם.
יתרונות: כניסה פשוטה דרך גוגל ללא צורך בהרשמה, הפקת דוח באקסל או מודפס של השעות.
הנה הקישור:
https://timess.co.il/
למדתי אנגולר, בניתי פרוייקט תוך כדי למידה, למה שלא תרוויחו מזה גם.
יתרונות: כניסה פשוטה דרך גוגל ללא צורך בהרשמה, הפקת דוח באקסל או מודפס של השעות.
הנה הקישור:
https://timess.co.il/
אתמול קרתה תקלה מוזרה, שגרמה לכך ששרתי ה-Exchange של מייקרוסופט לא היו יכולים היו להוציא מיילים!
מה אפשר ללמוד מזה?
מדובר בתקלה שהשפיעה על מערכות של מייל ארגוני, ה-Exchange, הנמצא בשימוש של חברות לניהול והפצה של דואר בהתקנה מקומית ופועלות על שרתים וכמובן מערכות ההפעלה של מיקרוסופט (Microsoft). הבאג אותר על גרסת Exchange Server 2013, בתוך מנגנון הבודק את כל הודעות הדואר היוצא מהשרת, כדי לוודא שהן נקיות מרושעות ומספאם. עם כניסת השנה החדשה, השרתים הפסיקו להוציא הודעות דואר, כאמור, או שהן התעכבו למשך זמן רב מאוד.
מסתבר כי הסיבה לבאג הייתה בחוסר חשיבה של המפתחים לטווח הרחוק. היא נובעת משמירת התאריך כמשתנה int32, יכול לקבל ערך מרבי של 2,147,483,647, אבל הערך של השנה החדשה עומד על מספר גדול יותר – 2,201,010,001 לפחות. התוצאה הייתה שהסריקה של הדואר היוצא הייתה לא תקינה – וההודעות נחסמו.
היוצא מזה, לא לסמוך שעכשיו הכל עובד תקין, תשקיע טיפה יותר זמן, שגם מחר הכל יעבוד טוב...
מקור
שלום לכולם
התבקשתי רבות מחברים פיתרון לבעיה הידועה לבצע מיזוג דואר, אך לשמור קובץ PDF נפרד לכל רשומה, עם שם מותאם אישית.
אפרט כאן במדריך שלב אחר שלב איך לבצע זאת, תהיו איתי עד הסוף מקווה שתהנו...
נתחיל...
שלב א:
ראשית בקובץ ה- Excel של רשימת הנמענים, הוסיפו לטבלת הנתונים ארבעה עמודות בשמות כדלהלן (חשוב שהשמות יהיו מדויקים ללא רווחים מיותרים - לתשומת ליבכם):
DocFolderPath
DocFileName
PdfFolderPath
PdfFileName
שלב ב:
צרו שתי תיקיות נפרדות, אחד לקבצי הפלט בפורמט docx, ואחד לקבצי הקלט בפורמט pdf, העתיקו את נתיב התיקייה של קבצי ה- docx והדביקו אותם עבור כל רשומה בשדה שיצרתם בשם DocFolderPath, לאחמ"כ חזרו על הפעולה והפעם העתיקו את נתיב התיקייה של קובצי ה- PDF והדביקו בשדה PdfFolderPath.
בשדה DocFileName כתבו את השם של הקובץ עבור הרשומה - ניתן להשתמש בנוסחאות, כמו"כ בשדה PdfFileName כתבו את שם הקובץ כנ"ל.
שלב ג:
פתחו את קובץ ה- word והשלימו את פעולת המיזוג כרגיל, עצבו את המסמך כרצונכם.
שלב ד:
פתחו את לשונית מפתחים בקובץ ה- word פתחו את עורך הקוד הוסיפו מודל חדש מצו"ב צילום מסך:
הדביקו את הקוד הבא:
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 ולחצו הפעל מצו"ב צילום מסך
כעת שבו בנחת והמתינו עד ליצירת כל הקבצים, להנאתכם תפתחו את תיקיות הפלט שיצרתם וגלו שהיא מלאה קבצים קובץ לכל רשומה בשם המתאים שהגדרתם לה.
בהמלצת חברי הפורום היקרים, ובעזרת חבר הפורום @מעלה-ומוריד !
שודרג ממשק העיצובי של האתר לנוחיות המשתמשים.
כמו"כ לבקשת רבים נוספה אפשרות להכניס שעות לפי פרוייקט, בהגדרת רשימת פרוייקטים אישית.
אשמח להערות והארות.
אם תמיד לא הבנתם איך יש מתכנתים אשר הגופנים ב- VS CODE שלהם נראה הרבה יותר טוב, הנה לדוגמא:
אז זהו, הם משתמשים בגופן מיוחד, (שימו לב גם שפונקציות חץ מקבל מראה ממש כמו חץ...).
איך עושים את זה? המשיכו לקרוא:
הורדת הגופנים והתקנתם.
הורידו את חבילת הגופנים מכאן
חלצו את הגופנים, והתקינו במחשב.
עדכון הגדרות ב- VS CODE.
כנסו להגדרות:
תחת Text Editor בחרו Font.
ערכו את ההגדרות ב- setting.json כדלהלן:
"editor.fontFamily": "Fira Code",
"editor.fontLigatures": true,
כעת צאו מתוך ה- VS CODE והפעילו אותה מחדש. (אין צורך בהפעלה מחדש של המחשב).
@dovid
תודה על ההסבר הנפלא, כמו תמיד...
@ארי התשובה שקיבלתי מחברת קשר, אם רלוונטי למישהו:
הפסקנו לעבוד בשיטת GET עקב בעיות אבטחה, מעתה בקשות יתבצעו רק דרך POST, פרמטרים מועברים כ-BODY, במקום params עד עתה.
בהצלחה.
@מלא אפשר לעשות בגוגל שיטס קובץ>פרסום באינטרנט
ואז להעתיק את הקישור, לייבא את נתונים לאקסל באמצעות ייבוא נתונים מהרשת, ואז אתה יכול לקשר את האקסס לאקסל.
קצת סרבול, אבל נותן את מה שחיפשת
דרך אגב: הקישור מתעדכן אחת לחמש דקות
@צדיק-תמים אתה יכול להגדיר לבד היכן יהיה ה- output של ה- build,תיקיית ה- dist היא רק תיקיית ברירת מחדל, באפשרותך לשנות בקובץ vתצורה של Vue.
ראה כאן
תגדיר בdata משתנה עם ערך ריק
ואחרי זה תכניס את הפונקציה לתוך mounted
לדוגמא:
mounted() {
fetch(config.apiEndpoint + 'book/' + this.$route.params.name).then(res => res.json())
}
ואחרי זה אתה מוסיף שורה שמכניסה את ה Json לתוך המשתנה שהגדרת
מקווה שהסברתי מספיק טוב!
@ivrtikshoret
תעשה ככה
obj[app]
@chocolate אז תעשה שאילתה עם קריטריון כזה:
between[שדה מתאריך] and [עד תאריך]
בהרצה תקבל את כל השורות שבין התאריכים האלה
אכן, אין לי אופציה לשנות, @david אם תוכל להעביר לדרושים...
@yyy אולי להשתמש ב- splice כדי להסיר אותו ידני מהמערך עד שהנתונים יתעדכנו
תוסיף אינדקס בלולאה ככה, ואז תשלח למחוק את האינדקס הזה מהמערך
<div *ngFor="let item of itemArr; let i = index" ">{{item.value}}</div>
@מוטי-אורן אמר בהוספת 0 בפורמט שעה ב- TS:
שים לב מה הבעיה בקוד שלך. גם parseInt וגם Number כשאתה נותן להם ארגומנט שהוא שני אפסים, הם יחזירו לך אפס בודד. מהסיבה שלא קיים מספר שמכיל שני אפסים בלבד.
אכן זה היה הפספוס שלי, תודה עכשיו עובד!
Ctrl+/ הופך את השורה להערה וכן הופך הערה לשורה רגילה, כמו"כ בבחירה מרובה...
@חוקר אתה יכול לציין לימיט כמה שאתה רוצה, או להשאיר ריק ואז מחזיר לך הכל
@katz אמר בVue | async data():
תגדיר בdata משתנה עם ערך ריק
ואחרי זה תכניס את הפונקציה לתוך mounted
לדוגמא:mounted() { fetch(config.apiEndpoint + 'book/' + this.$route.params.name).then(res => res.json()) }
ואחרי זה אתה מוסיף שורה שמכניסה את ה Json לתוך המשתנה שהגדרת
מקווה שהסברתי מספיק טוב!
אחרי זה ראיתי שכבר הסתדרת עם הרעיון הזה, סליחה על התגובה המאוחרת
@שרה-רחל
נראה לי
type"number"