תיעוד HotXLS

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

גליונות עבודה של Classic XLS ושל XLSX חושפים את אותו ממשק API לקריאה בלבד להערכת טקסט נוסחה כאילו הוזן בשורה ובעמודה נבחרות המבוססות על 1

הערכה חד-פעמית

function EvaluateFormulaAt(Row, Col: Integer;
  const Formula: WideString): TXLSFormulaEvaluationResult; overload;

function EvaluateFormulaAt(Row, Col: Integer;
  const Formula: WideString;
  ReferenceStyle: TXLSFormulaReferenceStyle;
  const Options: TXLSFormulaEvaluationOptions): TXLSFormulaEvaluationResult; overload;
גיליון העבודה מספק את הקשר השמות המקומיים, ההפניות הבלתי-מוסמכות, הטבלה והקישורים החיצוניים מבלי לשנות את גיליון העבודה הפעיל, הבחירה, מודל התאים, מטמון הנוסחאות, מצב הזיהום או גרף התלויות
xlfrsA1 משמר הפניות מוחלטות ומעורבות תוך פתירת הפניות יחסיות מתא היעד; xlfrsR1C1 פותר היסטים יחסיים ישירות מאותו יעד

תוצאות מטופוסות

TXLSFormulaEvaluationResult מחזיר את Status, את Valueהמטופוס המקורי, את IsVolatileורשומת Issue יציבה המכילה מצב, קוד מקורי והודעה
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
  xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
  xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
  xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);

TXLSFormulaEvaluationIssue = record
  Status: TXLSFormulaEvaluationStatus;
  NativeCode: Integer;
  Message: WideString;
end;
    
ערכי נוסחה כמו #DIV/0!, #REF!, מחרוזות ריקות, מערכים, ערכים בוליאניים ותאריכים נשארים ערכים ניתנים להבחנה; כישלון ניתוח, פונקציות שאינן נתמכות, הפניות מעגליות, הפניות חיצוניות שנדחו, callback-ים לא בטוחים שנדחו, ביטול, ארגומנטים פסולים, גליונות עבודה לא זמינים ואזילת משאבים משתמשים במצבי API מפורשים Issue.NativeCode נושא את קוד השגיאה של המנוע שבבסיס ו- Issue.Message the human-readable description when Status is not xlfeOk

תבניות בלתי ניתנות לשינוי לשימוש חוזר

function CreateFormulaEvaluationTemplate(Row, Col: Integer;
  const Formula: WideString;
  ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
תבנית מהדרת את הנוסחה פעם אחת בעוגן שלה וחושפת את EvaluateAt ואת EvaluateAtWithOptions להערכה חוזרת בתאי יעד שונים
נוסחאות A1 ו-R1C1 רגילות עושות שימוש חוזר ישיר בעץ המהודר; הפניות מובנות A1 שמשמעותן תלויה בשורת טבלת היעד נפתרות ומהודרות עבור אותו הקשר יעד
תבניות אינן מחזיקות שום מצב גיליון עבודה לכתיבה, מדווחות בבטחה xlfeWorksheetUnavailable לאחר הריסת חוברת העבודה, וחוזרות להידור מחדש מודע-הקשר כאשר שינויי חוברת העבודה מיישנים את הקשר ההידור המקורי

אפשרויות משאבים, הפניות חיצוניות ו-callback-ים

AllowExternalReferencesברירת המחדל true אך היא מתירה רק יעדי סביבת עבודה שנרשמו במפורש או מטמונים מקומיים לקובץ, ולעולם אינה מבצעת גישה מרומזת לקובץ או לרשת
AllowUnsafeFormulaCallbacksברירת המחדל false והיא חוסמת שמות פונקציות מסוכנים מלהגיע לרישום פונקציות משתמש אל callback לפני הערכת כל ארגומנט; שלילה מחזירה xlfeUnsafeFunctionDenied
CancelFlagמצביע בוליאני אופציונלי שנבדק לפני ההערכה ואחריה
MaxFormulaLengthברירת המחדל 8192 יחידות קוד UTF-16
MaxEvaluationStepsברירת המחדל 1,000,000 הערכות פריטי תחביר
MaxRecursionDepthברירת המחדל 256 הערכות נוסחה מקוננות
MaxArrayBytesברירת המחדל 64 מגה-בייט עבור מטעני מערך שנוצרו
מקסימום אפס או שלילי מנטרל את המגבלה ההיקפית לקריאה; מדיניות זיכרון המערכים ברמת חוברת העבודה עדיין חלה, והגעה למגבלה מופעלת מחזירה xlfeResourceLimit לאחר שחרור מצב ההערכה הזמני
העומס היתר שמקבל אפשרויות מפורשות מתייחס ל- AllowUnsafeFormulaCallbacks כסמכות עבור אותה קריאה; הערכת חד-פעמית והערכת תבנית ברירת מחדל יורשות את מאפיין חוברת העבודה בעל השם הזהה

דוגמת Delphi

Template := Sheet.CreateFormulaEvaluationTemplate(2, 2,
  '=R[-1]C[-1]+1', xlfrsR1C1);

Result := Template.EvaluateAt(2, 2);
if Result.Status = xlfeOk then
  UseValue(Result.Value);

Options := XLSDefaultFormulaEvaluationOptions;
Options.MaxEvaluationSteps := 10000;
Result := Template.EvaluateAtWithOptions(20, 4, Options);

דוגמת C++Builder

Lxcalc::_di_IXLSFormulaEvaluationTemplate evalTemplate =
  sheet->CreateFormulaEvaluationTemplate(1, 1,
    WideString(L"=ROW()+COLUMN()"), Lxcalc::xlfrsA1);

Lxcalc::TXLSFormulaEvaluationResult result =
  evalTemplate->EvaluateAt(7, 8);

ראו גם

מתודת TXLSWorksheet.Calculate
מתודת IXLSWorkbook.Calculate
מנוע חישוב Excel