Dokumentacja HotXLS

WriteCells i typowane pisarze zbiorczy

Wypełnia zakres arkusza Classic XLS, wywołując kod aplikacji dla wartości każdej komórki

Składnia

type
  TXLSCellWriteEvent = procedure(
    Sender: TObject;
    SheetIndex, Row, Col: Integer;
    var Value: Variant;
    var Skip: Boolean;
    var Cancel: Boolean) of object;

function WriteCells(ARange: WideString; Callback: TXLSCellWriteEvent): Integer; overload;
function WriteCells(ARow1, ACol1, ARow2, ACol2: Integer; Callback: TXLSCellWriteEvent): Integer; overload;

Uwagi

Wariant tekstowy przyjmuje zakres w notacji A1, na przykład A1:C100. Wariant numeryczny użyje indeksów wiersza i kolumny numerowanych od 1. Zakresy są normalizowane, gdy wiersz lub kolumna początkowa jest większa od końcowej
Komórki są zgłaszane w kolejności wiersz-po-wierszu. Ustaw Value w callbacku, aby zapisać bieżącą komórkę. Ustaw Skip na True, aby pozostawić bieżącą komórkę bez zmian. Ustaw Cancel na True, aby przerwać po bieżącym wywołaniu callbacku. Wartością zwrotną jest liczba zapisanych komórek
Ta metoda zapisuje do wczytanego modelu arkusza. To zwięzły pomocnik zapisu oparty na callbackach, a nie tryb zapisu ze strumieniowaniem pliku

Przykład

procedure TForm1.WriteCell(Sender: TObject; SheetIndex, Row, Col: Integer;
  var Value: Variant; var Skip: Boolean; var Cancel: Boolean);
begin
  if Col = 3 then
  begin
    Skip := True;
    Exit;
  end;

  Value := Format('R%dC%d', [Row, Col]);
  if Row >= 1000 then
    Cancel := True;
end;

Written := Workbook.Sheets[1].WriteCells('A1:D2000', WriteCell);

Typowane pisarze wierszy i kolumn

TXLSWorksheet i TXLSXWorksheet przyjmują też otwarte tablice liczbowe, tekstowe i variant bez callbacku per komórka
function WriteFloatRowValues(ARow, ACol: Integer; const Values: array of Double): Integer;
function WriteStringRowValues(ARow, ACol: Integer; const Values: array of WideString): Integer;
function WriteRowValues(ARow, ACol: Integer; const Values: array of Variant): Integer;
function WriteFloatColumnValues(ARow, ACol: Integer; const Values: array of Double): Integer;
function WriteStringColumnValues(ARow, ACol: Integer; const Values: array of WideString): Integer;
function WriteColumnValues(ARow, ACol: Integer; const Values: array of Variant): Integer;
Współrzędne są numerowane od 1. Dla pisarzy wierszy wartości biegną w prawo, a dla pisarzy kolumn — w dół. Zapisy są przycinane do limitu wierszy lub kolumn aktywnego formatu pliku, nieprawidłowe współrzędne początkowe zwracają zero, a wynikiem jest liczba zapisanych wartości. Pisarze XLSX powiększają pojemność kolekcji geometrycznie przy kolejnych partiach
Revenue[0] := 1250.0;
Revenue[1] := 980.5;
Revenue[2] := 1425.25;
Written := Sheet.WriteFloatColumnValues(2, 4, Revenue);

Zobacz też