เอกสาร HotXLS

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 เปลี่ยนค่านั้น โดยใช้พิกัดแถวและคอลัมน์ของเวิร์กชีตที่เริ่มนับจาก 1 ในทั้งสองเอนจิน

บานหน้าต่างด้านบนใช้แถวของหน้าต่างทั้งหมดร่วมกัน บานหน้าต่างด้านล่างใช้แถวของบานหน้าต่างล่างร่วมกัน บานหน้าต่างด้านซ้ายใช้คอลัมน์ของหน้าต่างทั้งหมดร่วมกัน และบานหน้าต่างด้านขวาใช้คอลัมน์ของบานหน้าต่างขวาร่วมกัน

บานหน้าต่างที่หายไปจะคืนค่า 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 ก็ยังคงใช้ได้โดยไม่เปลี่ยนแปลงเช่นกัน

ฟาเซดที่ใช้ร่วมกันจะแปลงชื่อบานหน้าต่างเชิงตรรกะอย่างชัดเจน ผู้เรียกจึงไม่ขึ้นอยู่กับรหัสบานหน้าต่างตัวเลขที่รูปแบบไฟล์ใด ๆ ใช้