เอกสาร HotXLS

เมธอด CreateLoadedCellCursor

สร้างเคอร์เซอร์แบบดึงข้อมูลเหนือเซลล์ที่จัดเก็บไว้ในสมุดงาน XLSX ที่โหลดแล้ว พร้อมตัวเลือกให้รวมเซลล์ว่างที่มีสไตล์เป็นของตัวเอง

ไวยากรณ์

function CreateLoadedCellCursor: IXLSLoadedCellCursor; overload;
function CreateLoadedCellCursor(
  AIncludeStoredBlanks: Boolean): IXLSLoadedCellCursor; overload;

ลำดับการเดินทางและต้นทุน

เคอร์เซอร์จะไปยังเวิร์กชีตตามลำดับในคอลเลกชัน แล้วไปยังเซลล์ตามแถวและคอลัมน์จากน้อยไปมาก

SheetIndex, Row และ Col เป็นพิกัดสาธารณะที่เริ่มนับจาก 1

เวิร์กชีตที่ปรากฏเป็นรูปธรรมถูกอ่านโดยตรงจากบล็อกกระจายขนาด 256 แถวที่จัดสรรไว้ โดยไม่ต้องสร้างรายการเซลล์ที่เรียงลำดับ

เวิร์กชีตแบบแพ็กถูกอ่านโดยตรงผ่านตัววนซ้ำของพื้นที่จัดเก็บแบบแพ็ก และยังคงอยู่ในสถานะแพ็กหลังการเดินทาง

สถานะเคอร์เซอร์คงที่ไม่ขึ้นกับขนาดสมุดงาน และไม่จัดสรรอาร์เรย์ขนาดเท่าขอบเขตแถวหรือคอลัมน์ของ XLSX

โอเวอร์โหลดที่ไม่มีพารามิเตอร์จะข้ามเซลล์ว่างที่มีแต่สไตล์ ตัวยึดตำแหน่ง Empty ที่จัดเก็บไว้ และตัวยึดตำแหน่ง Null ที่จัดเก็บไว้

ส่ง True เพื่อรวมพิกัดว่างที่มีสไตล์เป็นของตัวเองจากพื้นที่จัดเก็บแบบรูปธรรมหรือแบบแพ็ก โดยไม่ทำให้เซลล์แบบแพ็กปรากฏเป็นรูปธรรม

ตัวยึดตำแหน่ง Empty และ Null ที่ไม่มีสไตล์ยังคงถูกแยกออกในทั้งสองโหมด

ฟิลด์สแนปชอต

ฟิลด์ความหมาย
SheetIndex / SheetNameข้อมูลประจำตัวเวิร์กชีตเจ้าของ ณ ขณะจับภาพ
Row / Colพิกัดเซลล์ที่เริ่มนับจาก 1
StyleIndexดัชนีรูปแบบเซลล์ XLSX ที่จับจากพื้นที่จัดเก็บแบบรูปธรรมหรือแบบแพ็ก
KindxlckText, xlckNumber, xlckDateTime, xlckBoolean, xlckFormula, xlckError หรือ xlckBlank
Valueค่า Variant ที่เป็นของตนซึ่งจับไว้สำหรับเซลล์ปัจจุบัน
Formulaข้อความสูตรสำหรับเซลล์สูตร มิฉะนั้นเป็นสตริงว่าง

สตริงและค่า Variant ใน TXLSLoadedCellSnapshot เป็นค่าที่เป็นของตนและไม่เปิดเผยพอยเตอร์เซลล์ภายในหรือพอยเตอร์พื้นที่จัดเก็บแบบแพ็ก

สำหรับเซลล์สูตร XLSX Value คือค่าแคชที่จัดเก็บอยู่ในปัจจุบัน และการเดินทางจะไม่คำนวณสูตรใหม่

สำหรับ xlckBlank ค่า Value จะเป็น Unassigned, Formula ว่างเปล่า และ StyleIndex ระบุรูปแบบเซลล์ที่จัดเก็บไว้

สถานะ การทำให้ล้าสมัย และอายุการใช้งาน

State เป็น xlccBeforeFirst จนกว่า MoveNext แรกสำเร็จ เป็น xlccActive ขณะที่ Current พร้อมใช้งาน และเป็น xlccEof หลังการเดินทางเสร็จสิ้น

การอ่าน Current ก่อนเซลล์แรกหรือหลังสิ้นสุดไฟล์จะทำให้เกิด EXLSLoadedCellCursorState

การสร้างหรือลบเซลล์ที่จัดเก็บไว้ การทำให้พื้นที่จัดเก็บแบบแพ็กปรากฏเป็นรูปธรรม การสร้างดัชนีใหม่อย่างชัดเจน หรือการเพิ่ม ลบ ย้าย หรือล้างเวิร์กชีต จะทำให้เคอร์เซอร์ล้าสมัย

จากนั้นการเรียก MoveNext หรือ Current ครั้งถัดไปจะทำให้เกิด EXLSLoadedCellCursorInvalidated

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

การปล่อยสมุดงานก่อนเคอร์เซอร์ก็ทำให้เกิด EXLSLoadedCellCursorInvalidated เช่นกัน แทนที่จะทิ้งเคอร์เซอร์ไว้กับพอยเตอร์สมุดงานที่ห้อยลอย

การตรวจสอบรุ่นเป็นการตรวจจับแบบรู้ล้มเหลวทันที และไม่ทำให้การเปลี่ยนแปลงพร้อมกับการเดินทางปลอดภัยต่อเธรด

ตัวอย่าง

Cursor := Workbook.CreateLoadedCellCursor;
while Cursor.MoveNext do
begin
  Cell := Cursor.Current;
  Memo1.Lines.Add(Format('%s!R%dC%d = %s',
    [Cell.SheetName, Cell.Row, Cell.Col, VarToStr(Cell.Value)]));
end;

ดูเพิ่มเติม