مستندات HotXLS

هندسه طرح‌واره خلوت

واحد lxOutline هندسه و برنامه‌ریزی تغییرِ بی‌طرف نسبت به موتور را برای طرح‌واره‌های سطری و ستونی فراهم می‌کند
فقط بازه‌های عینیت‌یافته را ذخیره می‌کند، گره‌های خلاصه را از گذرهای سطح طرح‌واره مجاور بازمی‌شناسد و برای چیدمان‌های خلاصه-بعد و خلاصه-قبل، تغییرهای حالت فشرده می‌سازد بدون آنکه برای هر مختصات کاربرگ مدخلی تخصیص دهد

نوع‌های اصلی

TXLSOutlineAxis = (xoaRows, xoaColumns);

TXLSOutlineChildMode = (xocPreserve, xocCollapse, xocExpand);

TXLSOutlineMutationPlan = class
  constructor Create(AAxis: TXLSOutlineAxis);
  procedure Clear;
  property Axis: TXLSOutlineAxis;
  property Count: Integer;
  property Changes[Index: Integer]: TXLSOutlineStateChange;
end;

TXLSOutlineGeometry = class
  constructor Create(AAxis: TXLSOutlineAxis;
    ASummaryAfter: Boolean);
  procedure Clear;
  property Axis: TXLSOutlineAxis;
  property SpanCount: Integer;
  procedure AddSpan(AFirstIndex, ALastIndex, ALevel: Integer;
    AHidden, ACollapsed: Boolean);
  function TryGetNode(ANodeIndex: Integer;
    out ANode: TXLSOutlineNode): Boolean;
  function TryBuildNodeCollapsePlan(ANodeIndex: Integer;
    ACollapsed: Boolean; AChildMode: TXLSOutlineChildMode;
    APlan: TXLSOutlineMutationPlan): Boolean;
  procedure BuildDisplayLevelPlan(ADisplayLevel: Integer;
    AChildMode: TXLSOutlineChildMode;
    APlan: TXLSOutlineMutationPlan);
end;
اندیس سطر و ستون مبتنی بر یک است، سطح‌های طرح‌واره نامنفی‌اند و بازه‌ها باید با ترتیب اکیداً صعودی و بدون هم‌پوشانی افزوده شوند
بازه‌های مجاور با سطح، حالت مخفی و حالت جمع‌شده یکسان به‌طور خودکار ادغام می‌شوند؛ اندیس‌های نیامده سطح صفر ضمنی، حالت پیدا و بدون نشانگر جمع‌شده دارند
هر دو کلاس Axis خود را از لحظه ساخت به خاطر می‌سپارند، Clear طرح یا هندسه را برای استفاده مجدد خالی می‌کند بدون تخصیص دوباره بافرهای داخلی، و SpanCount تعداد بازه‌های ادغام‌شده‌ای را که هندسه در حال حاضر نگه می‌دارد گزارش می‌کند

دلالت‌های گره

NodeIndexسطر یا ستون خلاصه فیزیکی که فراخوان درباره آن پرس‌وجو کرده است
FirstDetailIndex / LastDetailIndexبازه پیوسته جزئیات که سطح آن از آیتم خلاصه عمیق‌تر است
SummaryLevelسطح طرح‌واره ذخیره‌شده روی آیتم خلاصه، یا صفر وقتی آن آیتم عینیت نیافته باشد
Levelسطح گروهی که گره نمایندگی می‌کند و برابر SummaryLevel + 1 است
SummaryHiddenحالت مخفی ذخیره‌شده روی آیتم خلاصه
Collapsedنشانگر جمع‌شده صریح ذخیره‌شده روی آیتم خلاصه
SummaryAfterTrue وقتی جزئیات پیش از آیتم خلاصه بیایند و false وقتی پس از آن بیایند
گروه‌های تودرتو مستقل می‌مانند، زیرا هر پرس‌وجو در نخستین بازه مجاوری که سطحش از آیتم خلاصه منتخب عمیق‌تر نباشد متوقف می‌شود
شکاف نیز بازه جزئیات را پایان می‌دهد؛ پس فراداده خلوت نمی‌تواند تصادفاً مختصات بلااستفاده را در یک گروه پل بزند

طرح‌های تغییر

طرح تغییر شامل بازه‌های مرتب مبتنی بر یک و ماسک فیلدی است که نشان می‌دهد هر بازه حالت مخفی، حالت جمع‌شده یا هر دو را تغییر می‌دهد؛ تغییرهای مجاور معادل به‌طور خودکار ادغام می‌شوند
xocPreserveگره منتخب را با حفظ نشانگرهای جمع‌شده فرزندان تغییر می‌دهد؛ این رفتار پیش‌فرض گروه‌های تودرتوست
xocCollapseگره‌های فرزند را وقتی داخل گره منتخب یا زیر سطح نمایش درخواستی مخفی باشند، جمع‌شده علامت می‌زند
xocExpandنشانگرهای جمع‌شده گره‌های فرزند را وقتی داخل گره منتخب یا زیر سطح نمایش درخواستی مخفی باشند، پاک می‌کند
باز کردن والد با xocPreserve جزئیات بی‌واسطه را آشکار می‌کند در حالی که جزئیات متعلق به فرزندان جمع‌شده مخفی می‌مانند؛ باز کردن فرزندی درون والد جمع‌شده، محتوا را از طریق آن والد آشکار نمی‌کند
سطح‌های نمایش مبتنی بر یک هستند: سطح 1 هر گروه سطح بالا را جمع می‌کند و هر مقدار بالاتر، یک سطح طرح‌واره دیگر را آشکار و نشانگرهای گره مرزی متناظر را تنظیم می‌کند
ساخت همان وضعیت درخواستی از هندسه‌ای که از قبل دربرگیرنده آن است، طرحی خالی می‌دهد و پرس‌وجوی غیرگره، false با طرحی خالی برمی‌گرداند
عملیات گره حالت مخفی مستقل آیتم خلاصه منتخب را دست‌نخورده می‌گذارد و طرح‌های سطح نمایش، آیتم‌های سطح صفر مخفی‌شده بیرون از گروه طرح‌واره را آشکار نمی‌کنند

مبدل‌های کاربرگ

function TryGetOutlineNode(AAxis: TXLSOutlineAxis;
  ANodeIndex: Integer; out ANode: TXLSOutlineNode): Boolean;
function SetOutlineNodeCollapsed(AAxis: TXLSOutlineAxis;
  ANodeIndex: Integer; ACollapsed: Boolean;
  AChildMode: TXLSOutlineChildMode = xocPreserve): Boolean;
procedure SetOutlineDisplayLevel(AAxis: TXLSOutlineAxis;
  ADisplayLevel: Integer;
  AChildMode: TXLSOutlineChildMode = xocPreserve);
TXLSWorksheet و TXLSXWorksheet همان سه متد را در معرض می‌گذارند، به‌طوری که فراخوان می‌تواند بدون ساخت دستی هندسه، درباره گره خلاصه سطر یا ستون مبتنی بر یک پرس‌وجو کند یا آن را تغییر دهد
مبدل کلاسیک فقط بلوک‌های سطر تخصیص‌یافته و فراداده ستون‌های مقداردهی‌شده را می‌خواند، در حالی که مبدل XLSX فهرست‌های خلوت سطح طرح‌واره، مخفی و جمع‌شده خود را پیش از اعمال یک طرح تغییر فشرده در یک تراکنش نوشتن ادغام می‌کند
گروه‌های سطر و ستون OpenDocument حالت تودرتوی بومی table:display خود را حفظ می‌کنند؛ ویرایش مستقیم فراداده و تغییرهای ساختاری سطر یا ستون آن حالت را به‌ایمنی به گره خلاصه منطقی فرود می‌آورند و تبدیل به XLSX نشانگر جمع‌شده را روی آیتم خلاصه XLSX می‌نویسد نه روی هر عضو گروه
متدهای موجود TXLSXWorksheet.ToggleRowGrouped و ToggleColGrouped به‌عنوان پوشش‌های سازگاری در دسترس می‌مانند؛ آرگومان آن‌ها نخستین سطر یا ستون جزئیات است و پوشش، پیش از تغییر، گره خلاصه وابسته به جهت را حل می‌کند

نمونه Delphi

Geometry := TXLSOutlineGeometry.Create(xoaRows, True);
Plan := TXLSOutlineMutationPlan.Create(xoaRows);
try
  Geometry.AddSpan(2, 4, 1, False, False);
  Geometry.AddSpan(5, 5, 0, False, False);

  if Geometry.TryGetNode(5, Node) then
    UseOutlineNode(Node.FirstDetailIndex,
      Node.LastDetailIndex, Node.Collapsed);

  if Geometry.TryBuildNodeCollapsePlan(5, True,
    xocPreserve, Plan) then
    ApplyOutlineChanges(Plan);
finally
  Plan.Free;
  Geometry.Free;
end;

نمونه C++Builder

Lxoutline::TXLSOutlineGeometry *geometry =
  new Lxoutline::TXLSOutlineGeometry(Lxoutline::xoaColumns, false);
try {
  geometry->AddSpan(3, 3, 0, false, true);
  geometry->AddSpan(4, 7, 1, true, false);

  Lxoutline::TXLSOutlineNode node;
  if (geometry->TryGetNode(3, node))
    UseOutlineNode(node.FirstDetailIndex, node.LastDetailIndex,
      node.Collapsed);
}
__finally {
  delete geometry;
}

عملکرد و دامنه

یافتن گره از جست‌وجوی دودویی استفاده می‌کند که فقط بازه‌های مجاور عینیت‌یافته‌ای را که گروه منتخب از آن‌ها می‌گذرد دنبال می‌کند؛ در نتیجه کاری برابر O(log n + k) برای n بازه و k بازه بازدیدشده انجام می‌شود
برنامه‌ریزی تغییر انبوه با یک گذر خطی روی پشته یکنوا، هر گره عینیت‌یافته را کشف می‌کند، بازه‌های دید جمع‌شده را ادغام می‌کند و تغییرهای بازه فشرده صادر می‌کند بدون بازدید از مختصات بلااستفاده
سازنده، آخرین سطر کاربرگ XLSX را می‌پذیرد در حالی که فقط بازه‌های ارائه‌شده را نگه می‌دارد؛ پس مختصات بالا به معنای تخصیص یا پویش یک‌میلیون‌مدخلی نیست
گیت رگرسیون مبدل کاربرگ، همان 32,768 پرس‌وجوی گره و 2,048 تغییر جمع‌کردن یا باز کردن را روی شش مدخل سطر عینیت‌یافته نزدیک سطر 8 و سطر 1,048,576 اجرا می‌کند، عینیت‌بخشی صفر سلولی می‌خواهد و هزینه مختصات بالا را نسبت به مبنا با مختصات پایین محدود می‌کند
TXLSOutlineGeometry هرگز مستقیماً در داده کتاب کار می‌نویسد؛ مبدل‌های موتور طرح بازگردانده‌شده را اعتبارسنجی و اعمال می‌کنند تا تحلیل هندسه و تغییر حالت جدا بمانند

همچنین ببینید

اعضای تکمیلی API برای Classic XLS
اعضای پیشرفته API برای XLSX
اعضای تکمیلی API کتابخانه