65 lines
1.6 KiB
Plaintext
65 lines
1.6 KiB
Plaintext
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;
|