API گزینش پنجرههای کاربرگ
TXLSWorksheet و TXLSXWorksheet متدهای آگاه از پنجرهٔ یکسانی برای خواندن یا جایگزینی ناحیههای سلول و بازهٔ انتخابشده در معرض دید قرار میدهند
نوعها و متدهای مشترک
TXLSPanePosition = (xlspTopLeft, xlspTopRight, xlspBottomLeft, xlspBottomRight); TXLSSelectedAreas = array of WideString; function GetSelectedAreas(APane: TXLSPanePosition; out ActiveAreaIndex: Integer): TXLSSelectedAreas; function SelectAreas(APane: TXLSPanePosition; const Areas: array of WideString; ActiveAreaIndex: Integer = 0): Boolean; function TryGetWindowScroll(APane: TXLSPanePosition; out ARow, ACol: Integer): Boolean; function ScrollWindow(APane: TXLSPanePosition; ARow, ACol: Integer): Boolean;
متن ناحیه از ارجاعهای A1 سلول یا بازه استفاده میکند و ActiveAreaIndex اندیسی مبتنی بر صفر در دنبالهٔ ناحیههای بازگرداندهشده یا ارائهشده است
دنبالهٔ ناحیهها ترتیب مبدأ را حفظ میکند و میتواند شامل بازههای همپوشان باشد، زیرا ترتیب انتخاب و همپوشانی بخشی از وضعیت نمای کاربرگ است
مالکیت تصویر لحظهای
GetSelectedAreas آرایه پویای جدیدی را برمیگرداند که رشتهها و طول آن متعلق به فراخواننده است، بنابراین تغییر یا آزادسازی نتیجه نمیتواند کاربرگ را دگرگون کند
وقتی پنجرهٔ درخواستی هیچ گروه انتخاب بازنماییشدهای نداشته باشد، نتیجه خالی است و ActiveAreaIndex برابر -1 است
خواندن پنجرهای که وجود ندارد هرگز پنجره، شیء انتخاب، سلول یا بازهای در کتاب کار نمیسازد
تجمیع رکوردهای Classic XLS
Classic XLS برای هر پنجره گروه انتخاب منطقی مستقلی نگه میدارد و رکوردهای متوالی Selection از BIFF با کد پنجرهٔ یکسان را به ترتیب مبدأ تجمیع میکند
سطر فعال، ستون فعال و ActiveAreaIndex میان همهٔ رکوردهای یک گروه مشترکاند و اندیس به دنبالهٔ کامل ناحیههای تجمیعشده اشاره میکند نه به یک رکورد فیزیکی
ذخیرهٔ گروه دستنخورده بدنههای رکورد اصلی آن را حفظ میکند، در حالی که گروه ویرایششده در قطعههای متوالی حداکثر 1369 ناحیهای با اندیس فعال تجمیعی یکسان در هر قطعه نوشته میشود
ویرایش یک پنجره، گروههای پنجرههای دیگر را دستنخورده میگذارد و نسخههای کاربرگ وضعیت کامل انتخاب پنجرهها را نگه میدارند
ویرایشهای ساختاری
درج یا حذف سطرها و ستونهای کامل، گروههای انتخاب مرتبشده را برای هر پنجرهٔ بازنماییشده در هر دو موتور کتاب کار نگاشت مجدد میکند
ناحیههای بازمانده ترتیب و هویت ناحیهٔ فعال خود را حفظ میکنند؛ اگر ناحیهٔ فعال حذف شود، نخستین جانشین بازمانده انتخاب میشود و در نبود جانشین، واپسین پیشین بازمانده در پی میآید
اگر همهٔ ناحیهها حذف شوند، گروه به یک سلول در مرز حذف تبدیل میشود، در حالی که سلول فعال بیرون از ناحیهٔ بازماندهٔ برگزیده به سلول بالا-چپ آن ناحیه بازمیگردد
رکوردهای کلاسیک نامعتبر
رکوردهای Selection کلاسیک مخدوش، غیرمجاور یا متناقض مبهم باقی میمانند و از طریق پرسوجوی نوعدار ناحیهها در معرض دید قرار نمیگیرند
رکورد فیزیکی که در اعتبارسنجی رکوردها رد شود xlsDiagnosticSelectionRecordInvalid را با کد تشخیصی 1304 گزارش میکند، در حالی که تناقض صرفاً در سطح تجمیع یک تشخیص گروهی در EOF کاربرگ گزارش میکند؛ ذخیرهسازی هر بدنهٔ رکورد اصلی را بایتبهبایت بازپخش میکند
انتخابهای بزرگ
تجزیه و نرمالسازی ناحیهها، نگاشت مجدد ساختاری و ساخت تصویر لحظهای از سازندههای یکگذره یا رشد هندسی ظرفیت استفاده میکنند تا گروههای انتخاب بزرگ بهصورت خطی با هزینهٔ سرشکن باقی بمانند
مختصات پیمایش پنجره
TryGetWindowScroll نخستین سلول نمایان برای یک پنجرهٔ منطقی را برمیگرداند و ScrollWindow آن را تغییر میدهد، با استفاده از مختصات مبتنی بر یک سطر و ستون کاربرگ در هر دو موتور
پنجرههای بالا سطر کل پنجره را به اشتراک میگذارند، پنجرههای پایین سطر پنجرهٔ پایینی را، پنجرههای چپ ستون کل پنجره را و پنجرههای راست ستون پنجرهٔ راستی را
پنجرهای که وجود نداشته باشد بدون ساختن وضعیت نما مقدار False را برمیگرداند، با خروجیهای پرسوجوی صفر؛ مختصات نامعتبر نیز پیش از تغییر هر محوری مقدار False را برمیگردانند
Classic XLS محورهای بالا و چپ را در Window2 و محورهای پایین و راست را در Pane ماندگار میکند، در حالی که XLSX مقادیر topLeftCell متناظر در sheetView و pane را بهطور مستقل نگه میدارد
بهروزرسانیهای اتمی
SelectAreas هر ارجاع A1 و اندیس فعال را پیش از بهدستآوردن تراکنش نوشتن کاربرگ اعتبارسنجی میکند
متد برای ورودی مخدوش یا خالی، اندیس فعال نامعتبر یا پنجرهای که در هندسهٔ تقسیم یا تثبیتشدهٔ جاری وجود ندارد مقدار False را برمیگرداند و انتخاب پیشین دستنخورده میماند
فراخوانی موفق مقدار True را برمیگرداند و اشیای انتخاب ویژهٔ موتور موجود و APIهای قدیمی را حفظ میکند
نمونه Delphi
if Sheet.SelectAreas(xlspBottomRight,
['C4:E5', 'D5:F6', 'G7'], 1) then
begin
Areas := Sheet.GetSelectedAreas(xlspBottomRight,
ActiveAreaIndex);
UseSelection(Areas, ActiveAreaIndex);
end;
if Sheet.ScrollWindow(xlspBottomRight, 20, 8) and
Sheet.TryGetWindowScroll(xlspBottomRight, Row, Col) then
ShowVisibleCell(Row, Col);
سازگاری
نسخهٔ سربارگذاریشدهٔ کلاسیک SelectAreas(const Areas; ActiveAreaIndex) و نسخهٔ سربارگذاریشدهٔ XLSX یعنی SelectAreas(const Areas; ActiveAreaIndex; APane) بدون تغییر در دسترس میمانند
ویژگیهای کلاسیک ScrollRow و ScrollColumn و اعضای مبتنی بر صفر XLSX یعنی SetPaneScroll، GetPaneScroll، ScrollRow و ScrollCol نیز بدون تغییر در دسترس میمانند
واسط مشترک نامهای منطقی پنجرهها را صریحاً تبدیل میکند، بهگونهای که فراخوانندهها به کدهای عددی پنجرهای که هر یک از دو قالب فایل استفاده میکند وابسته نیستند