גליונות עבודה של 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);ראו גם