تتيح معاودة الاتصال OnUserFunction لكود التطبيق تقييم دوال ورقة العمل المخصصة أو غير المدعومة أثناء Calculate. عيِّنها على TXLSWorkbook أو TXLSXWorkbook قبل استدعاء Calculate
استخدم OnUserFunctionEx عندما تحتاج معاودة الاتصال إلى سياق الصيغة الحالي. يُبلِّغ السياق عن فهرس الورقة القائم على 1 بالإضافة إلى صف وعمود خلية الصيغة القائمَين على 1؛ تُبلِّغ استدعاءات Calculate على مستوى المصنف التي لا تُقيِّم خلية بصف وعمود = 0
البنية
type
TXLSUserFunctionContext = record
SheetIndex: Integer;
Row: Integer;
Col: Integer;
end;
TXLSUserFunctionEvent = procedure(
Sender: TObject;
const FunctionName: WideString;
const Args: Variant;
var Value: Variant;
var Handled: Boolean) of object;
TXLSUserFunctionExEvent = procedure(
Sender: TObject;
const FunctionName: WideString;
const Args: Variant;
const Context: TXLSUserFunctionContext;
var Value: Variant;
var Handled: Boolean) of object;
property OnUserFunction: TXLSUserFunctionEvent;
property OnUserFunctionEx: TXLSUserFunctionExEvent;
المتغيرات
| FunctionName |
دالة اسم من صيغة نص |
| Args |
zero-مستند Variant array containing evaluated
argument قيم. لـ zero-argument دوال هذا قيمة هو
Null |
| Context |
لـ OnUserFunctionEx, reports SheetIndex, Row, و Col. ورقة, صف و عمود قيم هي 1-مستند لـ خلية صيغ; صف و عمود هي 0 عند no خلية هو being evaluated |
| Value |
ضبط هذا إلى دالة result |
| Handled |
ضبط إلى True عند callback supplies
result. Leave False إلى keep normal unsupported
دالة behavior |
مثال
procedure TForm1.WorkbookUserFunction(Sender: TObject;
const FunctionName: WideString; const Args: Variant;
var Value: Variant; var Handled: Boolean);
begin
if SameText(FunctionName, 'DOUBLEPLUS') then
begin
Value := Double(Args[0]) * 2 + Double(Args[1]);
Handled := True;
end;
end;
Workbook.OnUserFunction := WorkbookUserFunction;
Value := Workbook.Calculate('=DOUBLEPLUS(A1;5)');
مثال مُدرك للسياق
procedure TForm1.WorkbookUserFunctionEx(Sender: TObject;
const FunctionName: WideString; const Args: Variant;
const Context: TXLSUserFunctionContext;
var Value: Variant; var Handled: Boolean);
begin
if SameText(FunctionName, 'ROWBONUS') then
begin
Value := Double(Args[0]) + Context.Row + Context.Col;
Handled := True;
end;
end;
Workbook.OnUserFunctionEx := WorkbookUserFunctionEx;
Value := Worksheet.Calculate('=C2');
انظر أيضاً