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 / Col | 1부터 시작하는 셀 좌표 |
StyleIndex | 저장된 클래식 XF 인덱스 또는 XLSX 셀 서식 인덱스 |
Kind | 텍스트, 숫자, 날짜-시간, 부울, 수식, 오류 또는 빈 셀 분류 |
Value | 재계산 없이 저장된 스칼라 값 또는 수식 캐시 값 |
HasFormulaCache / FormulaCache | 수식 캐시 존재 여부, 근원, 값 종류 및 소유된 캐시 값TXLSFormulaCacheState), value kind (TXLSFormulaCacheValueKind), and owned cached value |
FormulaEvaluation | A 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;