الأسلوب CreateReadOnlyView
ينشئ عرضًا خفيفًا للقراءة فقط فوق نموذج مصنف Classic أو XLSX محمّل
البنية
function CreateReadOnlyView: IXLSReadOnlyWorkbookView;
CreateReadOnlyView في IXLSWorkbook الكلاسيكي ضمن lxHandle وفي IXLSXWorkbookOwner الخاص بـ XLSX ضمن lxHandleX؛ بينما تُصرَّح واجهة العرض المشتركة وخياراته وأنواع لقطاته في lxStandard
حالة العرض وعمره
إنشاء عرض يأخذ زمنًا ثابتًا ولا يجتاز أوراق العمل أو الخلايا أو الأنماط أو الأسماء أو الرسومات
لكل عرض ActiveSheetIndexخاص يبدأ من الواحد، بحيث يمكن لعدة عروض اختيار أوراق عمل مختلفة دون تغيير ActiveSheetIndex الكلاسيكي أو ActiveIndexو IsSelectedو ActiveTab
يحتفظ العرض بعقد قراءة طوال وجوده، وتفشل تعديلات المصنف سريعًا بالاستثناء EXLSWorkbookWriteGuardUnavailable قبل تغيير النموذج
احتفظ بمصنفات Classic عبر IXLSWorkbook وبمصنفات XLSX عبر IXLSXWorkbookOwner عند استخدام العروض؛ يحتفظ عندها كل من واجهة المالك وكل عرض بالمصنف المُدار بالعدد المرجعي نفسه ويمكن تحريرهما بأي ترتيب
لا تستدعِ Free على TXLSWorkbook أو TXLSXWorkbook الملموسين ما دامت واجهة مالك أو عرضًا يشير إليهما بعد
لقطات الخلايا
TryReadCell إحداثيات صف وعمود تبدأ من الواحد على ورقة العمل النشطة للعرض، وتعيد False فقط عند عدم وجود خلية مخزنة عند تلك الإحداثية
لا تنشئ قراءة خلية مفقودة تخزينًا ولا ترفع توليد المصنف
TXLSReadOnlyCellSnapshot اسم ورقتها وقيمتها ونص صيغتها ومعلومات ذاكرتها المؤقتة وتقييمها وإحداثياتها ونوعها وفهرس نمطها، ولا تكشف أبدًا عن كائن مصنف قابل للكتابة
| الحقل | المعنى |
|---|---|
SheetIndex / SheetName | هوية ورقة العمل محلية العرض |
Row / Col | إحداثيات الخلية بدءًا من الواحد |
StyleIndex | فهرس XF الكلاسيكي المخزن أو فهرس تنسيق الخلية في XLSX |
Kind | تصنيف نص أو رقم أو تاريخ-وقت أو قيمة منطقية أو صيغة أو خطأ أو خلية فارغة |
Value | القيمة العددية المخزنة أو قيمة ذاكرة الصيغة المؤقتة دون إعادة حساب |
HasFormulaCache / FormulaCache | وجود ذاكرة الصيغة المؤقتة ومصدرها ونوع قيمتها والقيمة المخزنة المملوكةTXLSFormulaCacheState), value kind (TXLSFormulaCacheValueKind), and owned cached value |
FormulaEvaluation | A TXLSFormulaEvaluationInfo record whose TXLSFormulaEvaluationState هل كان التقييم غير قابل للتطبيق أم غير مطلوب أم محسوبًا أم فاشلًا، مع رمز نتيجة المقيّم وقيمة النتيجة المملوكة |
Formula | فارغ افتراضيًا ولا يمتلئ إلا عند تمكين نص الصيغة صراحة |
سياسة الصيغ
افتراضيًا تستخدم خلايا الصيغ الذاكرة المؤقتة المخزنة القائمة ولا تحسب أبدًا ولا تستدعي دالة مستخدم ولا تحدّث حالة الاتساخ ولا تعيد كتابة ذاكرة مؤقتة إلى المصنف
Add xlsvIncludeFormulaText أضف Options إلى TXLSReadOnlyViewOptions = set of TXLSReadOnlyViewOptionعند الحاجة إلى نص الصيغة؛ ينشئ Classic مفكك شيفرة خاصًا بالعرض عند الطلب، بينما ينسخ XLSX سلسلة صيغته المخزنة، ولا يهيئ أي من المسارين آلة حاسبة المصنف ولا يعدّلها
تبلّغ الصيغة التي لا تملك ذاكرة مؤقتة محملة أو محسوبة عن HasFormulaCache=False وتترك Value تساوي Unassigned
أضف xlsvEvaluateFormulas لتقييم الصيغ عبر آلة حاسبة خاصة بالعرض وحالة استدعاء ذاتي وذاكرة عددية مؤقتة وذاكرة مصفوفات مؤقتة وذاكرة صيغ XLSX المترجمة؛ لا تستبدل Value الناتجة و FormulaEvaluation.Value أبدًا الذاكرة المؤقتة المخزنة للمصنف أو حقول بيئة تشغيل الصيغ المترجمة
تعاد أخطاء جداول البيانات القياسية كقيم أخطاء Variant مع xlfesCalculated، بينما تبلّغ حالات الفشل غير المدعومة أو الداخلية في التقييم عن xlfesFailed وتحتفظ بالذاكرة المؤقتة المخزنة الأصلية في FormulaCache
تعيد القراءات المتكررة عبر العرض نفسه استخدام ذاكرته المؤقتة الخاصة بالتقييم لتوليد عقد القراءة، بينما تبقى العروض المختلفة مستقلة ويمكنها تقييم الصيغة المشتركة نفسها على التوازي
يقرأ تقييم صيغ XLSX الخارجية ذاكرة externalLink المؤقتة المحلية للملف فقط، ولا يفك أبدًا تسجيلًا ضعيفًا لمصنف حي ولا يجري إدخال/إخراج خارجيًا
التزامن والأداء
استخدم عرضًا واحدًا لكل مؤشر ترابط عامل؛ يمكن للعروض المنفصلة مسح أوراق عمل مختلفة أو تقييم الصيغة نفسها على التوازي، بينما يجب على المستدعِين ألا يعدّلوا ورقة العرض النشطة أو خياراته من مؤشر ترابط آخر
بعد الإنشاء لا تدخل قراءات الخلايا العادية شاشة عرض حرجة أو مقطعًا حرجًا لأن عقد القراءة يمنع تعديل المصنف على التوازي
يحافظ تحقق الأداء على كل عرض خامل دون 64 كيلوبايت من الحالة الثابتة، وعلى مئة عرض خامل دون 8 ميجابايت، وعلى استقلال إنشاء العرض عن حجم المصنف مع بوابة ميلي ثانية واحدة عند المئين 95 على نموذج بمليون خلية
يقيّد جناح الأداء أيضًا أثر العرض الخامل على عمليات مسح المؤشرات أحادية الترابط القائمة بنسبة خمسة بالمائة، ويتطلب ثمانية عروض تمسح أوراق عمل مستقلة للوصول إلى خمسة أضعاف إنتاجية العرض الواحد على الأقل على مضيف التحقق
مثال
var
Workbook: IXLSWorkbook;
View: IXLSReadOnlyWorkbookView;
Cell: TXLSReadOnlyCellSnapshot;
begin
Workbook := TXLSWorkbook.Create;
Workbook.Sheets.Add;
Workbook.Sheets[1].Cells[1, 1].Value := 'ready';
View := Workbook.CreateReadOnlyView;
View.Options := [xlsvEvaluateFormulas];
if View.TryReadCell(1, 1, Cell) then
Memo1.Lines.Add(VarToStr(Cell.Value));
end;في حالة XLSX، احتفظ بالمصنف الملموس عبر واجهة مالكه قبل إنشاء العروض
var
Owner: IXLSXWorkbookOwner;
Workbook: TXLSXWorkbook;
View: IXLSReadOnlyWorkbookView;
begin
Workbook := TXLSXWorkbook.Create;
Owner := Workbook;
Workbook.Sheets.Add('Data').Cells[1, 1].Value := 42;
View := Owner.CreateReadOnlyView;
end;