פונקציות python ב - excel - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

פונקציות python ב - excel


גינגית
 Share

Recommended Posts

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

קישור לתוכן
שתף באתרים אחרים

xlwings זו ספרייה מצויינת לנושא. תתקין אותה:

pip install xlwings

עכשיו, צריך להתקין את התוסף שלו: תוריד מhttps://github.com/xlwings/xlwings/releases את קובץ הxlam האחרון, תיכנס לכרטיסייה Developer (מפתחים). אם אין לך אותה, תפתח File (קובץ) -> Options (אפשרויות) -> Customize Ribbon (התאמה אישית של רצועת הכלים) -> ותסמן בצג השמאלי (או הימני, בעברית) את Developer (מפתחים). אתה יכול לבטל את זה אח"כ אם אתה רוצה.

אז תיגש לDeveloper (מפתחים) -> Excel Add-ins (תוספות Excel?) -> ותלחץ Browse (עיון). תבחר את הקובץ xlam ותאשר. עכשיו אמורה להופיע לך ברצועת הכלים כרטיסייה xlwings.

 

עכשיו צריך לשנות את הגדרות האבטחה: לך לFile (קובץ) -> Options (אפשרויות) -> Trust Center (מרכז האישורים? הטאב האחרון) -> Trust Center Settings (הגדרות מרכז האישורים) -> Macro Settings (הגדרות מאקרו) ותסמן את Trust access to the VBA object module (אפשר גישה למודל האובייקטים של VBA? האפשרות האחרונה). תאשר.

 

פתח שורת פקודה ותקליד:

xlwings quickstart first

בתיקייה שנוצרה, בקובץ הפייתון, תקליד לדוגמה (אתה יכול למחוק את הפונקצייה hello אבל לא משהו אחר!):

@xw.func
@xw.arg('x', numbers=int)
def square_me(x):
    return x ** 2

הסינטקס מתועד במלואו בתיעוד: https://docs.xlwings.org/en/stable/udfs.html (ר"ת של UDF זה User-Defined Function, זה המונח באקסל).

תפתח את הקובץ xlsm, תעבור לכרטיסייה xlwings ותלחץ על Import Functions. עכשיו אתה יכול להשתמש בפונקציה SQUARE_ME 😀 בהצלחה!

קישור לתוכן
שתף באתרים אחרים

קודם כל תודה! תשובה מפורטת ומושקעת....

אבל כמה שזה מביך להודות בזה, אני אפילו עוד לא ממש יודעת איך להשתמש בשורת הפקודה,  וכשאתה כותב לי להקליד 

pip install xlwings

אני לא ממש יודעת איפה להקליד את זה

ניסיתי להקליד ככה:
C:\Users\User\AppData\Local\Programs\Python\Python38-32\Scripts>pip install xlwings

וקיבלתי הודעה כזאת:


WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)'))': /simple/xlwings/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)'))': /simple/xlwings/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)'))': /simple/xlwings/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)'))': /simple/xlwings/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)'))': /simple/xlwings/
Could not fetch URL https://pypi.org/simple/xlwings/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/xlwings/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)'))) - skipping
ERROR: Could not find a version that satisfies the requirement xlwings (from versions: none)
ERROR: No matching distribution found for xlwings
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)'))) - skipping

C:\Users\User\AppData\Local\Programs\Python\Python38-32\Scripts>

מה זה אומר?

ומה אני צריכה לעשות עם זה?

תודה ושוב סליחה על הבורות....

קישור לתוכן
שתף באתרים אחרים

האמת היא שחשדתי שזה קשור לזה...

אני משתמשת בנט פרי

יש לך מושג כלשהו איך מתמודדים איתם בעניין הזה?

למרות שעכשיו זה סתם בשביל הסקרנות - כי המטרה שלי שהייתה להוסיף לאקסל פונקציה של כתיבת מספרים במילים עבריות - הושגה😜😜

בסוף מצאתי באיזה מקום פונקציה שעושה את זה באנגלית, שיניתי אותה כך שתתאים לעברית (הבעייה העיקרית שלי הייתה שמעולם לא התעסקתי עם visual basic, ככה שעבדתי בדרך של ניסוי ותעייה) וזה עבד!!!!!!!!!!!!!😍😍

אני לא בטוחה שאני עובדת נכון ויעיל עם כל הסיפור של MOUDELS באקסל, אבל העיקר הוא שזה עובד!!!!

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

תודה על כל העזרה!!

קישור לתוכן
שתף באתרים אחרים

כל הכבוד!

 

את יכולה להעלות, אם אמצא את הזמן אעבור על זה אי"ה 😀

 

לגבי פיתרון: הדרך הכי פשוטה היא לכבות את בדיקת הSSL (לעולם אל תעשי את זה בסביבות פרודקשן):

pip install xlwings config --global http.sslVerify false

אם את רוצה להעמיק, תחפשי בגוגל "Windows export SSL certificates to PIP".

קישור לתוכן
שתף באתרים אחרים

ecxelFunc.zip

היי

צרפתי לכאן קודם כל את הקוד שכתבתי בפייתון, וגם את הקובץ שהכנתי בסוף ב VBA 

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

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

 

קוד לכתיבת מספר במילים בעברית ב excel - הוראות.docx

🤔

נערך על-ידי גינגית
עדכון קובץ שהועלה
קישור לתוכן
שתף באתרים אחרים

תרגישי בנוח - פרודקשן זה הדבר שסטודנטים לא מתעסקים איתו 😀 - קוד שרץ "על אמת", לא אצל המפתח.

 

אחת היכולות החשובות לפתח כמתכנת היא היכולת למצוא ולהשתמש בספריות שאחרים כתבו. לפייתון יש כמות אדירה של ספריות (שנייה רק לjs), וכיוון שהתעסקתי בנושא פעם אני יכול להגיד שיש ספרייה מצויינת https://pypi.org/project/num2words/. כן, היא תומכת גם בעברית. וגם בדנית, אם תרצי (או מיליון ואחת שפות אחרות). כך שאת הקוד שלך הייתי מקצר ל:

from num2words import num2words

while True:
    number = input("הכנס מספר, לסיום הקש סולמית.\n")
    
    if number == "#": break
      
    print(num2words(int(number), lang="he"))

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

שיניתי את x לnumber. שמות משמעותיים, מישהו אמר?

החלפתי את התנאי הכפול בbreak (מה שנקרא loop-with-exit). יש מתכנתים שלא מרגישים עם זה בנוח, וזה בסדר. אם המרצה שלך יתלונן (הוא כן), תשאלי אותו כמה תוכנות real-world הוא פיתח/השתתף בפיתוחן.

הפונקציה input מקבלת מחרוזת להצגה לפני הקלט. ההבדל בינה לבין print הוא שinput לא מדפיסה ירידת שורה, אז הוספתי \n.

inline-תי את ההמרה של number למספר. יש מתכנתים שלא יאהבו את זה ושוב, זה בסדר.

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

בסה"כ, חמש שורות קוד במקום 74. לא רע 😀

נערך על-ידי af db creid
קישור לתוכן
שתף באתרים אחרים

באמת לא רע....😀

אבל זה לא שלא צריך את השורות האלו, פשוט מישהו אחר כתב לך אותן😉

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

אני חושבת שזה מה שאמורים ללמד אותנו עכשיו

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

ואגב, ראית את מה שכתבתי בסופו של דבר לאקסל? (קובץ הוורד)

כי יש לי על זה שאלה

למי שמבין ב VBA:

יש לי פונקציה שמקבלת מספר, ואני רוצה שהיא תוכל לקבל ולפעול גם על מספר עשרוני

אין לי מושג אפילו איפה מגדירים את זה - בחתימת הפונקציה? בהצהרה על משתנים?

כמו שכבר כתבתי אני ממש לא מכירה (גם) את השפה הזאת, אז....

קישור לתוכן
שתף באתרים אחרים

תודה

מושלם!!
עכשיו הקוד שלי יודע להתמודד גם עם אגורות...

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

קישור לתוכן
שתף באתרים אחרים

את יודעת שיש כפתור "תודה", לא רק "אהבתי"? נראה לי קצת לא קשור...

 

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

נערך על-ידי af db creid
קישור לתוכן
שתף באתרים אחרים

🤔🤔

שיניתי הכל לתודה...

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

בינתיים זה שקלים - וזאת השאלה שלי: האם יש דרך לכתוב במקום שקלים את הסימון של הש"ח

example for num2word function.zip

זה מיועד להדפסת צקים אוטומטית, והניסוחים בהתאם....

קישור לתוכן
שתף באתרים אחרים

הצטרפ/י לדיון

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

אורח
הוסף תגובה

×   התוכן שהודבק הוא עם עיצוב.   הסר עיצוב

  Only 75 emoji are allowed.

×   הקישור שלך הוטמע אוטומטית.   הצג כקישור רגיל

×   התוכן הקודם שלך שוחזר אוטומטית.   נקה הכל

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
  • צור חדש...