HotXLS 문서

CreateReadOnlyView 메서드

로드된 클래식 또는 XLSX 통합 문서 모델 위에 경량 읽기 전용 뷰를 만듭니다

구문

function CreateReadOnlyView: IXLSReadOnlyWorkbookView;

CreateReadOnlyView 는 IXLSWorkbook 의 클래식 lxHandle 과 IXLSXWorkbookOwner 의 XLSX lxHandleX에 의해 선언됩니다. 공유 뷰 인터페이스, 옵션 및 스냅샷 형식은 lxStandard

뷰 상태 및 수명

뷰 생성은 상수 시간이며 워크시트, 셀, 스타일, 이름 또는 그리기를 순회하지 않습니다

각 뷰는 고유한 1부터 시작하는 ActiveSheetIndex를 가지므로, 여러 뷰가 클래식 ActiveSheetIndex 나 XLSX ActiveIndex, IsSelected, ActiveTab

뷰는 존재하는 동안 읽기 리스를 유지하며, 통합 문서 변경은 모델을 변경하기 전에 EXLSWorkbookWriteGuardUnavailable 로 fail-fast합니다

뷰를 사용할 때는 클래식 통합 문서를 IXLSWorkbook 으로, XLSX 통합 문서를 IXLSXWorkbookOwner 로 유지하십시오. 그러면 소유자 인터페이스와 모든 뷰가 동일한 참조 카운트 방식의 통합 문서를 유지하며 어느 순서로든 해제할 수 있습니다

소유자 인터페이스나 뷰가 아직 참조하는 동안 구체적인 Free 또는 TXLSWorkbook 에 대해 TXLSXWorkbook 를 호출하지 마십시오

셀 스냅샷

TryReadCell 은 뷰의 활성 시트에서 1부터 시작하는 행과 열 좌표를 사용하며, 해당 좌표에 저장된 셀이 없을 때만 False 를 반환합니다

누락된 셀 읽기는 저장소를 만들지 않고 통합 문서 세대도 진행하지 않습니다

TXLSReadOnlyCellSnapshot 은 시트 이름, 값, 수식 텍스트, 캐시 및 평가 정보, 좌표, 종류, 스타일 인덱스를 소유하며 쓰기 가능한 통합 문서 개체를 노출하지 않습니다

필드의미
SheetIndex / SheetName뷰 로컬 워크시트 식별 정보
Row / Col1부터 시작하는 셀 좌표
StyleIndex저장된 클래식 XF 인덱스 또는 XLSX 셀 서식 인덱스
Kind텍스트, 숫자, 날짜-시간, 부울, 수식, 오류 또는 빈 셀 분류
Value재계산 없이 저장된 스칼라 값 또는 수식 캐시 값
HasFormulaCache / FormulaCache수식 캐시 존재 여부, 근원, 값 종류 및 소유된 캐시 값TXLSFormulaCacheState), value kind (TXLSFormulaCacheValueKind), and owned cached value
FormulaEvaluationA TXLSFormulaEvaluationInfo record whose TXLSFormulaEvaluationState 평가가 적용되지 않았는지, 요청되지 않았는지, 계산되었는지, 실패했는지 여부와 평가기 결과 코드 및 소유된 결과 값
Formula기본적으로 비어 있으며 수식 텍스트가 명시적으로 활성화된 경우에만 채워집니다

수식 정책

기본적으로 수식 셀은 기존 저장 캐시를 사용하며 계산, 사용자 함수 호출, 더티 상태 업데이트 또는 통합 문서로의 캐시 쓰기를 절대 수행하지 않습니다

수식 텍스트가 필요하면 xlsvIncludeFormulaText 에 Options 를 추가합니다. 클래식은 필요할 때 뷰 전용 디코더를 만들고 XLSX는 저장된 수식 문자열을 복사하며, 어느 경로도 통합 문서 계산기를 초기화하거나 수정하지 않습니다 TXLSReadOnlyViewOptions = set of TXLSReadOnlyViewOption. 클래식은 필요할 때 뷰 전용 디코더를 만들고, XLSX는 저장된 수식 문자열을 복사합니다. 어느 쪽 경로도 통합 문서 계산기를 초기화하거나 수정하지 않습니다

로드되거나 계산된 캐시가 없는 수식은 HasFormulaCache=False 를 보고하고 Value 는 Unassigned

수식을 평가하려면 xlsvEvaluateFormulas 를 추가합니다. 평가는 뷰 전용 계산기, 재귀 상태, 스칼라 캐시, 배열-행렬 캐시 및 XLSX 컴파일 수식 캐시를 통해 이루어지며, 결과 Value 와 FormulaEvaluation.Value 는 통합 문서의 저장 캐시나 컴파일 수식 런타임 필드를 절대 대체하지 않습니다

표준 스프레드시트 오류는 Variant 와 함께 xlfesCalculated오류 값으로 반환되며, 지원되지 않거나 내부적인 평가 실패는 xlfesFailed 를 보고하고 원래 저장 캐시를 FormulaCache

하나의 뷰를 통한 반복 읽기는 리스 세대에 대해 해당 뷰의 전용 평가 캐시를 재사용하며, 서로 다른 뷰는 독립적이므로 동일한 공유 수식을 동시에 평가할 수 있습니다

XLSX 외부 수식 평가는 파일 로컬 externalLink 캐시만 읽고 약한 참조의 활성 통합 문서 등록을 역참조하거나 외부 I/O를 수행하지 않습니다

스레딩 및 성능

작업자 스레드당 하나의 뷰를 사용하십시오. 별도의 뷰는 서로 다른 워크시트를 검사하거나 동일한 수식을 동시에 평가할 수 있지만, 한 뷰의 활성 시트나 옵션을 다른 스레드에서 변경해서는 안 됩니다

생성 후 일반적인 셀 읽기는 리스가 동시 통합 문서 변경을 방지하므로 모니터나 임계 영역에 들어가지 않습니다

해제 검증은 각 유휴 뷰의 고정 상태를 64 KiB 미만, 100개의 유휴 뷰를 8 MiB 미만으로 유지하고, 뷰 생성은 통합 문서 크기와 무관하며 100만 셀 모델에서 1밀리초 p95 게이트를 요구합니다

성능 스위트는 또한 유휴 뷰가 기존 단일 스레드 커서 검사에 미치는 영향을 5퍼센트로 제한하고, 검증 호스트에서 8개의 뷰가 독립적인 워크시트를 검사할 때 단일 뷰 처리량의 최소 5배에 도달하도록 요구합니다

예제

var
  Workbook: IXLSWorkbook;
  View: IXLSReadOnlyWorkbookView;
  Cell: TXLSReadOnlyCellSnapshot;
begin
  Workbook := TXLSWorkbook.Create;
  Workbook.Sheets.Add;
  Workbook.Sheets[1].Cells[1, 1].Value := 'ready';

  View := Workbook.CreateReadOnlyView;
  View.Options := [xlsvEvaluateFormulas];
  if View.TryReadCell(1, 1, Cell) then
    Memo1.Lines.Add(VarToStr(Cell.Value));
end;

XLSX의 경우 뷰를 만들기 전에 소유자 인터페이스를 통해 구체적인 통합 문서를 유지하십시오

var
  Owner: IXLSXWorkbookOwner;
  Workbook: TXLSXWorkbook;
  View: IXLSReadOnlyWorkbookView;
begin
  Workbook := TXLSXWorkbook.Create;
  Owner := Workbook;
  Workbook.Sheets.Add('Data').Cells[1, 1].Value := 42;
  View := Owner.CreateReadOnlyView;
end;

참고 항목