דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. להשתמש בקובץ אקסל עם נוסחאות כAPI

להשתמש בקובץ אקסל עם נוסחאות כAPI

מתוזמן נעוץ נעול הועבר תכנות
19 פוסטים 4 כותבים 448 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • D מנותק
    D מנותק
    davidnead
    כתב ב נערך לאחרונה על ידי
    #1

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

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

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

    תודה רבה

    WWWW אפר שריפהא 2 תגובות תגובה אחרונה
    0
    • WWWW מנותק
      WWWW מנותק
      WWW
      השיב לdavidnead ב נערך לאחרונה על ידי WWW
      #2

      @davidnead ראה כאן:
      https://github.com/SheetJS/sheetjs/issues/105
      https://github.com/SheetJS/sheetjs/issues/306
      כאן אולי יש פתרון, לא בטוח שזה עם הספרייה הזאת:
      https://stackoverflow.com/questions/66608510/how-to-set-calculation-mode-of-an-xlsx-file-via-javascript

      WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

      D תגובה 1 תגובה אחרונה
      3
      • D מנותק
        D מנותק
        davidnead
        השיב לWWW ב נערך לאחרונה על ידי
        #3

        @www תודה רבה!
        נראה שאכן יש ספריה ייעודית משלימה בדיוק לזה: XLSX_CALC. אלא שהקובץ שלי כנראה מורכב מידי, והספריה הנ"ל כנראה לא תומכת בחלק מהנוסחאות שם.
        אני מנס הכעת לבצע קומבינות מסוג של לשנות את הקובץ ואז להריץ אותו משורת הפקודה כדי שהוא יפתח ויחושב מחדש על ידי האקסל.
        אשמח לרעיונות נוספים.

        yossizY תגובה 1 תגובה אחרונה
        0
        • yossizY מנותק
          yossizY מנותק
          yossiz
          השיב לdavidnead ב נערך לאחרונה על ידי yossiz
          #4

          @davidnead אפשר להריץ אקסל ברקע ולשלוט עליו באמצעות כל שפה שתומכת באוטומציה דרך OLE Automation.
          אולי תוכל לעשות את זה מ-JS דרך ספרייה זו: https://www.npmjs.com/package/win32ole
          (הדוגמה ב-README הוא על אקסל)

          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

          D תגובה 1 תגובה אחרונה
          2
          • D מנותק
            D מנותק
            davidnead
            השיב לyossiz ב נערך לאחרונה על ידי
            #5

            @yossiz אמר בלהשתמש בקובץ אקסל עם נוסחאות כAPI:

            @davidnead אפשר להריץ אקסל ברקע ולשלוט עליו באמצעות כל שפה שתומכת באוטומציה דרך OLE Automation.
            אולי תוכל לעשות את זה מ-JS דרך ספרייה זו: https://www.npmjs.com/package/win32ole
            (הדוגמה ב-README הוא על אקסל)

            נשמע כיוון טוב, אבל נראה שזה מתאים רק לwin32

            D תגובה 1 תגובה אחרונה
            1
            • D מנותק
              D מנותק
              davidnead
              השיב לdavidnead ב נערך לאחרונה על ידי davidnead
              #6

              האם זה יכול לעזור לי?
              אם אני מבין נכון מדובר בסוג של תוסף שמאפשר לעבוד עם JS מתוך האקסל כמו סוג של תחליף לVBA ולא להתממשק מבחוץ.

              תגובה 1 תגובה אחרונה
              1
              • אפר שריפהא מנותק
                אפר שריפהא מנותק
                אפר שריפה
                השיב לdavidnead ב נערך לאחרונה על ידי
                #7

                @davidnead אולי תשתמש באקסל אונליין או שיטס בשביל זה

                D תגובה 1 תגובה אחרונה
                1
                • D מנותק
                  D מנותק
                  davidnead
                  השיב לאפר שריפה ב נערך לאחרונה על ידי
                  #8

                  @אפר-שריפה אמר בלהשתמש בקובץ אקסל עם נוסחאות כAPI:

                  @davidnead אולי תשתמש באקסל אונליין או שיטס בשביל זה

                  שיטס - זה גדול עליו. אקסל אונליין, לא מכיר. ואיך זה יכול לעזור? יש להם API?

                  WWWW תגובה 1 תגובה אחרונה
                  0
                  • D מנותק
                    D מנותק
                    davidnead
                    כתב ב נערך לאחרונה על ידי
                    #9

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

                    yossizY תגובה 1 תגובה אחרונה
                    0
                    • WWWW מנותק
                      WWWW מנותק
                      WWW
                      השיב לdavidnead ב נערך לאחרונה על ידי
                      #10

                      @davidnead אמר בלהשתמש בקובץ אקסל עם נוסחאות כAPI:

                      שיטס - זה גדול עליו.

                      מה הכוונה?

                      @davidnead אמר בלהשתמש בקובץ אקסל עם נוסחאות כAPI:

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

                      אם כבר, אז בשיטס עם סקריפט, ייתכן שזה יכול לרוץ בענן.

                      WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

                      D תגובה 1 תגובה אחרונה
                      0
                      • yossizY מנותק
                        yossizY מנותק
                        yossiz
                        השיב לdavidnead ב נערך לאחרונה על ידי
                        #11

                        @davidnead אמר בלהשתמש בקובץ אקסל עם נוסחאות כAPI:

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

                        כלומר ווינדוס? אם כן מה לא טוב ברעיון שלי?

                        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                        D תגובה 1 תגובה אחרונה
                        0
                        • D מנותק
                          D מנותק
                          davidnead
                          השיב לyossiz ב נערך לאחרונה על ידי
                          #12

                          @yossiz ככל שהבנתי הספריה ההיא לא תומכת ב64 סיביות.

                          yossizY תגובה 1 תגובה אחרונה
                          0
                          • D מנותק
                            D מנותק
                            davidnead
                            השיב לWWW ב נערך לאחרונה על ידי
                            #13

                            @www אמר בלהשתמש בקובץ אקסל עם נוסחאות כAPI:

                            @davidnead אמר בלהשתמש בקובץ אקסל עם נוסחאות כAPI:

                            שיטס - זה גדול עליו.

                            מה הכוונה?

                            @davidnead אמר בלהשתמש בקובץ אקסל עם נוסחאות כAPI:

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

                            אם כבר, אז בשיטס עם סקריפט, ייתכן שזה יכול לרוץ בענן.

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

                            תגובה 1 תגובה אחרונה
                            1
                            • yossizY מנותק
                              yossizY מנותק
                              yossiz
                              השיב לdavidnead ב נערך לאחרונה על ידי
                              #14

                              @davidnead לא!
                              השם win32 לא מסמל מספר הסיביות... זה שם היסטורית ל-API של ווינדוס.
                              גם 64 סיביות נתמך.

                              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                              D תגובה 1 תגובה אחרונה
                              0
                              • D מנותק
                                D מנותק
                                davidnead
                                השיב לyossiz ב נערך לאחרונה על ידי
                                #15

                                @yossiz אמר בלהשתמש בקובץ אקסל עם נוסחאות כAPI:

                                @davidnead לא!
                                השם win32 לא מסמל מספר הסיביות... זה שם היסטורית ל-API של ווינדוס.
                                גם 64 סיביות נתמך.

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

                                yossizY תגובה 1 תגובה אחרונה
                                0
                                • yossizY מנותק
                                  yossizY מנותק
                                  yossiz
                                  השיב לdavidnead ב נערך לאחרונה על ידי yossiz
                                  #16

                                  @davidnead טוב, אני לא מבטיח... חשבתי שהסתמכת רק על השם... בכל מקרה שוה לבדוק. אם לא תצליח בנוד, אפשר בפייתון, PHP, או כל שפה אחרת. אפשר למצוא מימושים לאוטומציה של OLE בהמון שפות. שלא לשכוח מ-#C ושפות של ווינדוס.

                                  📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                                  D תגובה 1 תגובה אחרונה
                                  4
                                  • D מנותק
                                    D מנותק
                                    davidnead
                                    השיב לyossiz ב נערך לאחרונה על ידי
                                    #17

                                    @yossiz אמר בלהשתמש בקובץ אקסל עם נוסחאות כAPI:

                                    @davidnead טוב, אני לא מבטיח... חשבתי שהסתמכת רק על השם... בכל מקרה שוה לבדוק. אם לא תצליח בנוד, אפשר בפייתון, PHP, או כל שפה אחרת. אפשר למצוא מימושים לאוטומציה של OLE בהמון שפות. שלא לשכוח מ-#C ושפות של ווינדוס.

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

                                    בקשר לספריה שהבאת - התיעוד שם לא מי יודע מה. ככל שאני מבין כעת - השגיאה בהתקנה היא כי אין תאימות לגרסאות החדשות של NODE:

                                    "engines": {
                                        "node": ">= 0.8.18 && < 0.9.0"
                                      },
                                    

                                    אם לא תהיה ברירה נלך על פייתון. (PHP זה קו אדום...)

                                    D תגובה 1 תגובה אחרונה
                                    0
                                    • D מנותק
                                      D מנותק
                                      davidnead
                                      השיב לdavidnead ב נערך לאחרונה על ידי
                                      #18

                                      @davidnead אמר בלהשתמש בקובץ אקסל עם נוסחאות כAPI:

                                      @yossiz אמר בלהשתמש בקובץ אקסל עם נוסחאות כAPI:

                                      @davidnead טוב, אני לא מבטיח... חשבתי שהסתמכת רק על השם... בכל מקרה שוה לבדוק. אם לא תצליח בנוד, אפשר בפייתון, PHP, או כל שפה אחרת. אפשר למצוא מימושים לאוטומציה של OLE בהמון שפות. שלא לשכוח מ-#C ושפות של ווינדוס.

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

                                      בקשר לספריה שהבאת - התיעוד שם לא מי יודע מה. ככל שאני מבין כעת - השגיאה בהתקנה היא כי אין תאימות לגרסאות החדשות של NODE:

                                      "engines": {
                                          "node": ">= 0.8.18 && < 0.9.0"
                                        },
                                      

                                      אם לא תהיה ברירה נלך על פייתון. (PHP זה קו אדום...)

                                      טוב, יישר כוח גדול. נמצא הפתרון:
                                      https://www.npmjs.com/package/winax
                                      ובבדיקה ראשונית הוא נותן תוצאה משביעת רצון, שכיוונים אחרים לא נתנו.
                                      אותו הפתרון, רק ספריה עדכנית יותר. כרגיל, יוסי צודק, רק לוקח זמן להבין את זה, ובמקרה הזה גם למצוא את המימוש הנכון.

                                      תגובה 1 תגובה אחרונה
                                      2
                                      • D מנותק
                                        D מנותק
                                        davidnead
                                        כתב ב נערך לאחרונה על ידי davidnead
                                        #19

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

                                        const winax = require("winax");
                                        
                                        const fileName = `...\\tst.xlsx`;
                                        
                                        const excel = new winax.Object("Excel.Application", { activate: true });
                                        const wbk = excel.Workbooks.Add(fileName);
                                        const input = wbk.Worksheets.Item(1).Range("A1");  
                                        const B1 = wbk.Worksheets.Item(1).Range("B1");  
                                        const output = wbk.Worksheets.Item(1).Range("C1"); 
                                        
                                        console.log(input.Value.valueOf()); //1
                                        console.log(B1.Value.valueOf()); //2
                                        console.log(output.Value.FormulaLocal); //=A1+B1
                                        console.log(output.Value.valueOf()); //3
                                        input.Value = 2;
                                        console.log(output.Value.valueOf()); //4
                                        

                                        נ.ב. הגליונות ממוספרים מ1, לא מ0.

                                        תגובה 1 תגובה אחרונה
                                        4
                                        • dovidD dovid העביר נושא זה מ-תכנות ב-

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

                                        • אין לך חשבון עדיין? הרשמה

                                        • התחברו או הירשמו כדי לחפש.
                                        • פוסט ראשון
                                          פוסט אחרון
                                        0
                                        • דף הבית
                                        • קטגוריות
                                        • פוסטים אחרונים
                                        • משתמשים
                                        • חיפוש
                                        • חוקי הפורום