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

형식화된 행 및 열 writer

TXLSWorksheet와 TXLSXWorksheet는 셀별 콜백 없이도 open 배열 형태의 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 기반입니다. 행 writer는 값이 오른쪽으로, 열 writer는 아래로 이어집니다. 쓰기는 활성 파일 형식의 행 또는 열 한도에서 잘리고, 잘못된 시작 좌표는 0을 반환하며, 결과는 기록된 값의 수입니다. XLSX writer는 반복 배치에 걸쳐 컬렉션 용량을 기하급수적으로 늘립니다
Revenue[0] := 1250.0;
Revenue[1] := 980.5;
Revenue[2] := 1425.25;
Written := Sheet.WriteFloatColumnValues(2, 4, Revenue);

참조