HotXLS 文件

WriteCells 與具型別批次寫入器

對範圍內的每個儲存格值呼叫應用程式程式碼,藉此填入傳統 XLS 工作表範圍

語法

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;

備註

字串多載接受 A1:C100 這類 A1 樣式範圍。數值多載使用 1 起始的列與欄索引。當起始列或欄大於結束列或欄時,範圍會自動正規化
儲存格以列優先的順序被要求。在回呼中設定 Value 可寫入目前儲存格;設 Skip 為 True 可讓目前儲存格保持原樣;設 Cancel 為 True 則會在本次回呼之後停止。傳回值是已寫入的儲存格數
這個方法寫入的是已載入的工作表模型。它是一個精簡的回呼式寫入輔助工具,不是檔案串流式的儲存模式

範例

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);

具型別的列與欄寫入器

TXLSWorksheet 與 TXLSXWorksheet 也接受開放式陣列(numeric、string、variant),不需要逐儲存格回呼
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;
座標都是 1 起始。列寫入器會向右繼續,欄寫入器會向下繼續。寫入會在目前檔案格式的列或欄上限處裁切;無效的起始座標傳回 0;傳回值是已寫入的值個數。XLSX 寫入器會在重複批次之間以幾何方式擴充集合容量
Revenue[0] := 1250.0;
Revenue[1] := 980.5;
Revenue[2] := 1425.25;
Written := Sheet.WriteFloatColumnValues(2, 4, Revenue);

另請參閱