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는 반환되거나 제공된 영역 시퀀스에 대한 0부터 시작하는 인덱스입니다

영역 시퀀스는 원본 순서를 유지하며 겹치는 범위를 포함할 수 있습니다. 선택 순서와 겹침은 워크시트 뷰 상태의 일부이기 때문입니다

스냅숏 소유권

GetSelectedAreas는 문자열과 길이가 호출자에게 속하는 새 동적 배열을 반환하므로, 결과를 변경하거나 해제해도 워크시트를 변경할 수 없습니다

요청한 창에 표현된 선택 그룹이 없으면 결과가 비어 있고 ActiveAreaIndex는 -1입니다

없는 창을 읽는다고 해서 통합 문서에 창, 선택 개체, 셀 또는 범위가 생성되는 일은 없습니다

클래식 XLS 레코드 집계

클래식 XLS는 창마다 독립적인 논리 선택 그룹을 유지하고, 동일한 창 코드를 가진 연속적인 BIFF Selection 레코드를 원본 순서대로 집계합니다

활성 행, 활성 열, ActiveAreaIndex는 한 그룹의 모든 레코드가 공유하며, 인덱스는 단일 물리적 레코드가 아니라 집계된 전체 영역 시퀀스를 주소 지정합니다

손대지 않은 그룹을 저장하면 원본 레코드 본문이 보존되고, 편집된 그룹은 최대 1369개 영역의 연속 청크로 기록되며 모든 청크에 동일한 집계 활성 인덱스가 담깁니다

한 창을 편집해도 다른 창의 그룹은 변경되지 않으며, 통합 문서 복사본은 전체 창 선택 상태를 유지합니다

구조적 편집

전체 행과 전체 열의 삽입 또는 삭제는 두 통합 문서 엔진 모두에서 표현된 모든 창의 정렬된 선택 그룹을 다시 매핑합니다

살아남은 영역은 순서와 활성 영역의 동일성을 유지합니다. 활성 영역이 제거되면 첫 번째로 살아남은 후속 영역이 선택되고, 후속 영역이 남아 있지 않으면 마지막으로 살아남은 선행 영역이 선택됩니다

모든 영역이 제거되면 그룹은 삭제 경계에 있는 한 셀이 되고, 선택된 살아남은 영역 바깥에 있던 활성 셀은 해당 영역의 왼쪽 위 셀로 대체됩니다

잘못된 클래식 레코드

형식이 잘못되었거나, 연속적이지 않거나, 상충하는 클래식 Selection 레코드는 불투명한 상태로 유지되며 형식화된 영역 쿼리를 통해 노출되지 않습니다

레코드 유효성 검사 중에 거부된 물리적 레코드는 진단 코드 1304로 xlsDiagnosticSelectionRecordInvalid를 보고하고, 집계에만 관련된 상충은 워크시트 EOF에서 하나의 그룹 진단을 보고합니다. 저장 시에는 모든 원본 레코드 본문이 바이트 단위로 재생됩니다

대규모 선택

영역 구문 분석, 정규화, 구조적 다시 매핑, 스냅숏 작성은 단일 패스 빌더 또는 기하학적 용량 증가를 사용하므로, 대규모 선택 그룹도 상각 선형을 유지합니다

창 스크롤 좌표

TryGetWindowScroll은 하나의 논리 창에 대해 첫 번째 보이는 셀을 반환하고 ScrollWindow는 이를 변경합니다. 두 엔진 모두 1부터 시작하는 워크시트 행 및 열 좌표를 사용합니다

위쪽 창은 전체 창 행을 공유하고, 아래쪽 창은 아래쪽 창 행을 공유하며, 왼쪽 창은 전체 창 열을 공유하고, 오른쪽 창은 오른쪽 창 열을 공유합니다

없는 창은 뷰 상태를 만들지 않고 False를 반환하며 쿼리 출력은 0으로 설정됩니다. 잘못된 좌표도 축이 변경되기 전에 False를 반환합니다

클래식 XLS는 위쪽 및 왼쪽 축을 Window2에, 아래쪽 및 오른쪽 축을 Pane에 저장하고, XLSX는 sheetView와 pane의 해당 topLeftCell 값을 독립적으로 유지합니다

원자적 업데이트

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 0부터 시작하는 SetPaneScroll, GetPaneScroll, ScrollRow, ScrollCol 멤버 역시 변경 없이 계속 사용할 수 있습니다

공유 파사드는 논리 창 이름을 명시적으로 변환하므로, 호출자는 어느 파일 형식이 사용하는 숫자 창 코드에 의존하지 않습니다