מנוע החישוב של 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
- האירוע OnUserFunction — טיפול בפונקציות בסיסיות מוגדרות משתמש
- האירוע OnUserFunctionEx — פתרון פונקציות מורכבות עם פרמטרי טווח תאים
- קריאה חוזרת של פונקציית משתמש — דרישות חתימה למטפלים חיצוניים