Документация на HotXLS

Метод 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;

Вижте също