OfficeXml/utils/vba/XlsxSheetData.tsf

65 lines
1.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

type XlsxSheetData = class
public
function Create(sheet_data: SheetData);
function Operator[](index: integer): XlsxSheetDataRow;
function Cell(r: integer; c: integer): C;
function Rows(index: integer): XlsxSheetDataRow;
function Serialize();
private
rows_: array of XlsxSheetDataRow;
sheet_data_: SheetData;
end;
function XlsxSheetData.Create(sheet_data: SheetData);
begin
rows_ := array();
sheet_data_ := sheet_data;
rows := sheet_data.Rows();
for i:=0 to length(rows)-1 do
begin
r := strToInt(rows[i].R);
rows_[r] := new XlsxSheetDataRow(rows[i]);
end
// println("rows = {}", rows_);
end;
function Operator XlsxSheetData.[](index: integer): XlsxSheetDataRow;
begin
if ifnil(rows_[index]) and tslassigning then
begin
row := new Row(sheet_data_, "", "row");
rows_[index] := new XlsxSheetDataRow(row);
pos := -1;
for k,_ in rows_ do // TODO此处弊端是要遍历所有k可考虑维护一个新array用二分
if pos < k and k < index then pos := k;
pos = -1 ? sheet_data_.AppendChild(row) : sheet_data_.InsertAfter(row, rows_[pos].Data());
end
return rows_[index];
end;
function XlsxSheetData.Rows(index: integer): XlsxSheetDataRow;
begin
return self[index];
end;
function XlsxSheetData.Cell(r: integer; c: integer): C;
begin
bk := tslassigning;
tslassigning := 1;
c := self[r][c];
tslassigning := bk;
return c;
end;
function XlsxSheetData.Serialize();
begin
for k,row in rows_ do
begin
r := row.Data();
r.R := k;
row.Serialize();
end
// sheet_data_.Serialize();
end;