תחומים
    • הרשמה
    • התחברות
    • חיפוש
    • קטגוריות
    • פוסטים אחרונים
    • משתמשים
    • חיפוש
    חוקי הפורום

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

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

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

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

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

      תודה רבה

      WWW אפר שריפה 2 תגובות תגובה אחרונה תגובה ציטוט 0
      • WWW
        WWW @davidnead נערך לאחרונה על ידי WWW

        @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
          davidnead @WWW נערך לאחרונה על ידי

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

          yossiz תגובה 1 תגובה אחרונה תגובה ציטוט 0
          • yossiz
            yossiz @davidnead נערך לאחרונה על ידי yossiz

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

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

            D תגובה 1 תגובה אחרונה תגובה ציטוט 2
            • D
              davidnead @yossiz נערך לאחרונה על ידי

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

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

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

              D תגובה 1 תגובה אחרונה תגובה ציטוט 1
              • D
                davidnead @davidnead נערך לאחרונה על ידי davidnead

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

                תגובה 1 תגובה אחרונה תגובה ציטוט 1
                • אפר שריפה
                  אפר שריפה @davidnead נערך לאחרונה על ידי

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

                  D תגובה 1 תגובה אחרונה תגובה ציטוט 1
                  • D
                    davidnead @אפר שריפה נערך לאחרונה על ידי

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

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

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

                    WWW תגובה 1 תגובה אחרונה תגובה ציטוט 0
                    • D
                      davidnead נערך לאחרונה על ידי

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

                      yossiz תגובה 1 תגובה אחרונה תגובה ציטוט 0
                      • WWW
                        WWW @davidnead נערך לאחרונה על ידי

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

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

                        מה הכוונה?

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

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

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

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

                        D תגובה 1 תגובה אחרונה תגובה ציטוט 0
                        • yossiz
                          yossiz @davidnead נערך לאחרונה על ידי

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

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

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

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

                          D תגובה 1 תגובה אחרונה תגובה ציטוט 0
                          • D
                            davidnead @yossiz נערך לאחרונה על ידי

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

                            yossiz תגובה 1 תגובה אחרונה תגובה ציטוט 0
                            • D
                              davidnead @WWW נערך לאחרונה על ידי

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

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

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

                              מה הכוונה?

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

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

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

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

                              תגובה 1 תגובה אחרונה תגובה ציטוט 1
                              • yossiz
                                yossiz @davidnead נערך לאחרונה על ידי

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

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

                                D תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                • D
                                  davidnead @yossiz נערך לאחרונה על ידי

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

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

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

                                  yossiz תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                  • yossiz
                                    yossiz @davidnead נערך לאחרונה על ידי yossiz

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

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

                                    D תגובה 1 תגובה אחרונה תגובה ציטוט 4
                                    • D
                                      davidnead @yossiz נערך לאחרונה על ידי

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

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

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

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

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

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

                                      D תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                      • D
                                        davidnead @davidnead נערך לאחרונה על ידי

                                        @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
                                          davidnead נערך לאחרונה על ידי davidnead

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

                                          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
                                          • הועבר מ תכנות ע"י  dovid dovid 
                                          • 1 / 1
                                          • פוסט ראשון
                                            פוסט אחרון
                                          בא תתחבר לדף היומי!