Метод CreateReadOnlyView
Създава лек изглед само за четене върху модел на заредена Classic или XLSX работна книга
Синтаксис
function CreateReadOnlyView: IXLSReadOnlyWorkbookView;
CreateReadOnlyView се декларира от класическия IXLSWorkbook в lxHandle и от XLSX IXLSXWorkbookOwner в lxHandleX; споделеният интерфейс на изгледа, опциите и типовете моментни снимки се декларират в lxStandard
Състояние и жизнен цикъл на изгледа
Създаването на изглед е с константно време и не обхожда листове, клетки, стилове, имена или рисунки
Всеки изглед има собствен ActiveSheetIndex, започващ от единица, така че няколко изгледа могат да избират различни листове, без да променят класическия ActiveSheetIndex или XLSX ActiveIndex, IsSelected и ActiveTab
Изгледът държи разрешение за четене, докато съществува, и мутациите на работната книга се провалят незабавно с EXLSWorkbookWriteGuardUnavailable, преди моделът да бъде променен
Държете класическите работни книги чрез IXLSWorkbook, а XLSX работните книги чрез IXLSXWorkbookOwner, когато използвате изгледи; интерфейсът-притежател и всеки изглед тогава задържат една и съща работна книга с броене на препратки и могат да бъдат освобождавани в произволен ред
Не извиквайте Free върху конкретна TXLSWorkbook или TXLSXWorkbook, докато някой интерфейс-притежател или изглед все още сочи към нея
Моментни снимки на клетки
TryReadCell използва координати на ред и колона, започващи от единица, върху активния лист на изгледа и връща False само когато не съществува съхранена клетка на тази координата
Четенето на липсваща клетка не създава съхранение и не отмества генерацията на работната книга
TXLSReadOnlyCellSnapshot притежава името на листа си, стойността, текста на формулата, информацията от кеша и изчислението, координатите, вида и индекса на стил и никога не разкрива писаем обект на работна книга
| Поле | Значение |
|---|---|
SheetIndex / SheetName | Идентичност на листа в контекста на изгледа |
Row / Col | Координати на клетката, започващи от единица |
StyleIndex | Съхранен класически XF индекс или XLSX индекс на клетъчен формат |
Kind | Класификация текст, число, дата-време, булева стойност, формула, грешка или празна клетка |
Value | Съхранена скаларна стойност или стойност от кеша на формулата без преизчисляване |
HasFormulaCache / FormulaCache | Наличие на кеш на формулата, произход, вид на стойността и притежавана кеширана стойност |
FormulaEvaluation | Дали изчисляването не е било приложимо, не е било искано, е изчислило или е прекъснало, плюс кодът на резултата от изчислителя и притежаваната стойност на резултата |
Formula | Празно по подразбиране и попълвано само когато текстът на формулата е изрично включен |
Правила за формулите
По подразбиране клетките с формули използват съществуващия съхранен кеш и никога не изчисляват, не извикват потребителска функция, не обновяват състоянието на неактуалност и не записват кеш обратно в работната книга
Добавете xlsvIncludeFormulaText към Options, когато е необходим текстът на формулата; Classic създава декодер, частен за изгледа, при нужда, а XLSX копира съхранения си низ на формулата, като нито единият път не инициализира или променя калкулатора на работната книга
Формула без зареден или изчислен кеш докладва HasFormulaCache=False и оставя Value като Unassigned
Добавете xlsvEvaluateFormulas, за да се изчисляват формулите чрез калкулатор, състояние на рекурсия, скаларен кеш, кеш за матрици и кеш за компилирани формули на XLSX, частни за изгледа; полученият Value и FormulaEvaluation.Value никога не заменят съхранения кеш на работната книга или полетата на изпълнимата среда за компилирани формули
Стандартните таблични грешки се връщат като Variant стойности от тип грешка с xlfesCalculated, докато неподдържани или вътрешни прекъсвания на изчисляването докладват xlfesFailed и запазват оригиналния съхранен кеш в FormulaCache
Повторните четения през един изглед преизползват неговия частен изчислителен кеш през генерацията на разрешението за четене, докато различните изгледи остават независими и могат да изчисляват една и съща споделена формула едновременно
Изчисляването на XLSX външни формули чете само кеша на externalLink от локалния файл и никога не дереференцира слаба регистрация на жива работна книга и не извършва външен вход/изход
Нишки и производителност
Използвайте по един изглед на работна нишка; отделни изгледи могат да сканират различни листове или да изчисляват една и съща формула едновременно, докато извикващият код не бива да променя активния лист или опциите на един изглед от друга нишка
След създаването обикновените четения на клетки не влизат в монитор или критична секция, защото разрешението за четене предотвратява едновременна мутация на работната книга
Валидацията на освобождаването държи всеки престоял изглед под 64 KiB фиксирано състояние, сто престояли изгледа под 8 MiB, а създаването на изглед независимо от размера на работната книга с праг от една милисекунда p95 върху модел с един милион клетки
Тестовият набор за производителност също ограничава ефектът на престоял изглед върху съществуващи еднонишкови курсорни сканирования до пет процента и изисква осем изгледа, сканиращи независими листове, да достигнат път поне петкратно увеличение на производителността спрямо един изглед на валидиращата машина
Пример
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;