對範圍內的每個儲存格值呼叫應用程式程式碼,藉此填入傳統 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);
另請參閱