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 ก็ยังคงใช้ได้โดยไม่เปลี่ยนแปลงเช่นกัน
ฟาเซดที่ใช้ร่วมกันจะแปลงชื่อบานหน้าต่างเชิงตรรกะอย่างชัดเจน ผู้เรียกจึงไม่ขึ้นอยู่กับรหัสบานหน้าต่างตัวเลขที่รูปแบบไฟล์ใด ๆ ใช้