HotXLS Docs

מנוע החישוב של Excel

סקירה

HotXLS כולל מנוע מובנה לניתוח וחישוב נוסחאות; מנוע זה מעריך נוסחאות תא באופן תכנותי בתוך התהליך שלך, ובכך מבטל את הצורך לקרוא ל־Excel או לבקרי OLE חיצוניים כדי לפתור ערכי חוברת עבודה מחושבים

ביצוע חישוב

לפני שמירה או ייצוא, הפעל חישוב מחדש מלא של חוברת העבודה באמצעות ממשק חוברת העבודה הראשי

procedure Calculate;

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

הערכה הקשרית של נוסחאות

TXLSWorksheet ו-TXLSXWorksheet חושפות את EvaluateFormulaAt לחישוב טקסט נוסחה בשורה ובעמודה נבחרות באינדוקס החל מ-1, בלי לכתוב תא זמני ובלי לשנות את מצב החישוב של חוברת העבודה

סגנונות ההפניה A1 ו-R1C1, שמות מקומיים, הפניות מובנות (structured references), תלויות של נוסחה, שורשי מערך, ערכי שגיאה מטיפוס של Excel, מצב volatile, אישור מפורש של הפניות חוץ, ביטול וקטגוריות כישלון יציבות — כל אלה חולקים את המעריך הרגיל של חוברת העבודה

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

ראו הערכת נוסחאות הקשרית לפרטים על סוגי התוצאות, תקציבי ברירת המחדל, כללי משך החיים ודוגמאות ל-Delphi ול-C++Builder

אופרטורים של מערכים

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

סקלר משודר (broadcast) לכל רכיבי המערך, ומערך בן שורה אחת או עמודה אחת משודר לאורך ממד תואם; צורות שאינן תואמות מחזירות #VALUE!

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

COMBINA ו-PERMUTATIONA חולקות סמנטיקה של סקלר ושל מערך משודר, עם ארגומנטים שלמים לא-שליליים שנחתכים וטיפול בגלישה (overflow), ואילו MUNIT מחזירה מטריצת יחידה דו-ממדית קומפקטית מטיפוס Double

FormulaArrayMemoryLimit הוא 64 MiB כברירת מחדל ותוחם את המטענים של המטריצות שנוצרות; MUNIT גם מאמתת את שטח ה-spill הפנוי שנותר בגיליון העבודה במקום להטיל תקרת ממדים קבועה

בדיקת נוכחות של נוסחה

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

טווח מלבני מחזיר מערך בוליאני באותה צורה; חברים של נוסחה משותפת (shared formula) ושל נוסחת מערך קלאסית או של XLSX מחזירים true, ואילו ב-dynamic spill רק תא העוגן הוא תא נוסחה

ערכים ישירים ושמות מוגדרים סקלריים מחזירים #VALUE!, הפניות לא תקפות משמרות #REF!, והמערכים הבוליאניים שנוצרים תחומים על ידי FormulaArrayMemoryLimit

XLSX כותב _xlfn.ISFORMULA ומשחזר את השם החשוף בעת הפתיחה, ODS משתמש בתחביר הסטנדרטי of:=ISFORMULA, ופלט Classic XLS דוחה את הפונקציה העתידית שאינה נתמכת לפני שמירת הנתונים

פונקציות טקסט מודרניות

UNICHAR חותכת קלטים מספריים לכיוון אפס וממירה ערכי Unicode סקלריים תקפים ל-UTF-16, כולל פלט של זוגות surrogates עבור המישורים המשלימים וכל טווחי השימוש הפרטי

קלט של אפס או של ערך מחוץ לטווח מחזיר #VALUE!, ואילו נקודות קוד surrogate מבודדות ו-noncharacters של Unicode מחזירים #N/A; קלט של טווח או של מערך שנוצר דינמית שומר על השגיאות האלה ברמת הרכיב

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

XLSX שומר את UNICHAR בתור _xlfn.UNICHAR ומשחזר את השם החשוף בפתיחה חוזרת; BAHTTEXT משתמשת בזהות הפונקציה הסטנדרטית שלה ונשארת חשופה בנוסחאות XLS ו-XLSX

רגרסיה וחיזוי

LINEST ו-LOGEST מקבלות עמודת או שורת מנבא אחת או יותר ומחזירות מקדמים בסדר של Excel ואחריהם החיתוך האופציונלי

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

TREND ו-GROWTH משתמשות באותו מודל רב-משתני ומשמרות את צורת השורה או העמודה של ערכי המנבא החדשים שסופקו

חישוב מחדש של תלויות ב-Classic XLS

TXLSWorkbook.Recalculate בונה גרף תלויות של נוסחאות בקריאה הראשונה ומעריך את הנוסחאות כך שהתאים הקודמים (precedents) מחושבים ראשונים, במקום לפי הסדר הפיזי של התאים

קריאות נוספות עושות שימוש חוזר בגרף ומחשבות מחדש רק את התלויות הטרנזיטיביות של הערכים שהשתנו, בתוספת נוסחאות volatile; עריכת נוסחאות, שמות, מבנה של גיליון עבודה ושכתוב הפניות מבטלים את תקפות הגרף ובונים אותו מחדש בבטחה

הפניות מעגליות משתמשות בהגדרות EnableIteration, MaxIterations ו-MaxIterationChange של חוברת העבודה הקלאסית, ואילו UseFullPrecision=False מחיל את דיוק התצוגה של המספרים על תוצאות המטמון ועל החישובים במורד השרשרת

תלויות בשמות מוגדרים

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

נוסחאות שמות ללא מחזוריות תורמות את תלויות התא המדויקות שלהן, ואילו מחזורים רקורסיביים של שמות חוזרים בבטחה לחישוב מחדש כ-volatile

טבלאות נתונים What-If

גם גיליונות עבודה קלאסיים של XLS וגם מודרניים של XLSX יכולים ליצור, לחשב, לקרוא, לכתוב, להעתיק ולשנות מבנית טבלאות נתונים What-If עם משתנה אחד או עם שני משתנים

function AddDataTable(
  const AResultRange, ARowInputCell, AColumnInputCell: WideString
): TXLSDataTable;

טווח התוצאה מכיל רק תאי פלט מחושבים, ואילו הנוסחאות וערכי הניסיון משתמשים בתאים שסביבו, באותו סידור כמו ב-Excel

  • טבלה עם קלט עמודה — משאירים את ARowInputCell ריק, מציבים נוסחת מקור מעל כל עמודת תוצאה, ומציבים את ערכי הניסיון משמאל לשורות התוצאה
  • טבלה עם קלט שורה — משאירים את AColumnInputCell ריק, מציבים נוסחת מקור משמאל לכל שורת תוצאה, ומציבים את ערכי הניסיון מעל עמודות התוצאה
  • טבלה עם שני משתנים — מספקים את שני תאי הקלט, מציבים את נוסחת המקור מעל טווח התוצאה ומשמאל לו, את ערכי הניסיון של קלט השורה מעל התוצאות, ואת ערכי הניסיון של קלט העמודה משמאל
Sheet.Range['B1', 'B1'].Value := 0;
Sheet.Range['D1', 'D1'].Formula := '=B1*2+1';
Sheet.Range['C2', 'C2'].Value := 1;
Sheet.Range['C3', 'C3'].Value := 2;
Sheet.Range['C4', 'C4'].Value := 3;

Table := Sheet.AddDataTable('D2:D4', '', 'B1');
Workbook.Recalculate;

הדוגמה הזו של קלט עמודה מחשבת 3, 5 ו-7 בתאים D2:D4; כל ערך ניסיון מוחל דרך הקשר חישוב מבודד, כך שנוסחאות שמגיעות אל B1 בעקיפין דרך תאי נוסחה אחרים מחושבות מחדש נכון

AddDataTable מחזיר nil עבור טווח לא תקף, הפניית קלט לא תקפה, או כששתי הפניות הקלט ריקות; אוסף ה-DataTables של גיליון העבודה חושף את ההגדרה שנוצרה ואת דגלי הקלט שנמחקו שלה

מחיקה של תא קלט שמופנה אליו משמרת את הגדרת הטבלה ומחזירה #REF! עבור הפלטים שלה, בהתאמה לסמנטיקה של חוברת העבודה השמורה

פונקציות מוגדרות משתמש

הרחב את מנוע הנוסחאות בלוגיקה עסקית מותאמת אישית; רשום את הפונקציות שלך באמצעות האירועים להלן

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