Dokumentasi HotXLS

Evaluasi formula kontekstual

Worksheet Classic XLS dan XLSX mengekspos API baca-saja yang sama untuk mengevaluasi teks formula seolah-olah formula tersebut dimasukkan pada baris dan kolom berbasis-satu yang dipilih

Evaluasi sekali jalan

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;
Worksheet menyediakan konteks local-name, referensi tak-terkualifikasi, tabel, dan tautan eksternal tanpa mengubah sheet aktif, seleksi, model sel, cache formula, status dirty, atau grafik dependensi
xlfrsA1 mempertahankan referensi absolut dan campuran sambil menyelesaikan referensi relatif dari sel target; xlfrsR1C1 menyelesaikan offset relatif langsung dari target tersebut

Hasil bertipe

TXLSFormulaEvaluationResult mengembalikan Status, Valuebertipe asli, IsVolatile, dan record Issue yang stabil berisi status, kode native, dan pesan
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
  xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
  xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
  xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);

TXLSFormulaEvaluationIssue = record
  Status: TXLSFormulaEvaluationStatus;
  NativeCode: Integer;
  Message: WideString;
end;
    
Nilai formula seperti #DIV/0!, #REF!, string kosong, array, nilai Boolean, dan tanggal tetap merupakan nilai yang dapat dibedakan; kegagalan parse, fungsi yang tidak didukung, referensi melingkar, referensi eksternal yang ditolak, callback tidak aman yang ditolak, pembatalan, argumen tidak valid, worksheet yang tidak tersedia, dan kehabisan resource menggunakan status API eksplisit Issue.NativeCode membawa kode kesalahan mesin yang mendasarinya dan Issue.Message the human-readable description when Status is not xlfeOk

Template immutable yang dapat dipakai ulang

function CreateFormulaEvaluationTemplate(Row, Col: Integer;
  const Formula: WideString;
  ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
Template mengompilasi formula sekali di jangkarannya dan mengekspos EvaluateAt serta EvaluateAtWithOptions untuk evaluasi berulang pada sel target yang berbeda
Formula A1 dan R1C1 biasa memakai ulang pohon terkompilasi secara langsung; referensi terstruktur A1 yang maknanya bergantung pada baris tabel target diselesaikan dan dikompilasi untuk konteks target tersebut
Template tidak menyimpan status worksheet yang dapat ditulis, melaporkan xlfeWorksheetUnavailable dengan aman setelah workbook dihancurkan, dan beralih ke kompilasi ulang sadar-konteks ketika perubahan workbook membuat konteks terkompilasi asli kedaluwarsa

Opsi resource, referensi eksternal, dan callback

AllowExternalReferencesDefault true tetapi hanya mengizinkan target workspace yang didaftarkan secara eksplisit atau cache lokal file dan tidak pernah melakukan akses file atau jaringan implisit
AllowUnsafeFormulaCallbacksDefault false dan memblokir nama fungsi berbahaya agar tidak mencapai registry fungsi pengguna atau callback sebelum ada argumen yang dievaluasi; penolakan mengembalikan xlfeUnsafeFunctionDenied
CancelFlagPointer Boolean opsional yang diperiksa sebelum dan sesudah evaluasi
MaxFormulaLengthDefault 8192 unit kode UTF-16
MaxEvaluationStepsDefault 1,000,000 evaluasi item sintaks
MaxRecursionDepthDefault 256 evaluasi formula bersarang
MaxArrayBytesDefault 64 MiB untuk payload array yang dihasilkan
Maksimum nol atau negatif menonaktifkan batas per-panggilan tersebut; kebijakan memori array seluruh workbook tetap berlaku, dan tercapainya batas yang aktif mengembalikan xlfeResourceLimit setelah melepaskan status evaluasi sementara
Overload yang menerima opsi eksplisit memperlakukan AllowUnsafeFormulaCallbacks sebagai otoritatif untuk panggilan tersebut; evaluasi sekali jalan default dan evaluasi template mewarisi properti workbook dengan nama yang sama

Contoh 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);

Contoh C++Builder

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

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

Lihat juga

Metode TXLSWorksheet.Calculate
Metode IXLSWorkbook.Calculate
Mesin perhitungan Excel