You've already forked lazarus-ccr
fpspreadsheet: Support column and row formats as well as column widths and row heights in Excel2003-xml reader.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7032 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -658,6 +658,10 @@ begin
|
|||||||
// "Default").
|
// "Default").
|
||||||
fmt.Name := GetAttrValue(ANode, 'ss:ID');
|
fmt.Name := GetAttrValue(ANode, 'ss:ID');
|
||||||
|
|
||||||
|
if fmt.Name = 's125' then
|
||||||
|
idx := 0;
|
||||||
|
|
||||||
|
// Style elements
|
||||||
childNode := ANode.FirstChild;
|
childNode := ANode.FirstChild;
|
||||||
while childNode <> nil do begin
|
while childNode <> nil do begin
|
||||||
nodeName := childNode.NodeName;
|
nodeName := childNode.NodeName;
|
||||||
@ -704,29 +708,77 @@ end;
|
|||||||
procedure TsSpreadExcelXMLReader.ReadTable(ANode: TDOMNode;
|
procedure TsSpreadExcelXMLReader.ReadTable(ANode: TDOMNode;
|
||||||
AWorksheet: TsBasicWorksheet);
|
AWorksheet: TsBasicWorksheet);
|
||||||
var
|
var
|
||||||
|
sheet: TsWorksheet absolute AWorksheet;
|
||||||
nodeName: String;
|
nodeName: String;
|
||||||
s: String;
|
s: String;
|
||||||
r: Integer;
|
r, c: Integer;
|
||||||
x: Double;
|
x: Double;
|
||||||
|
idx: Integer;
|
||||||
|
fmt: TsCellFormat;
|
||||||
begin
|
begin
|
||||||
r := 0;
|
r := 0;
|
||||||
|
c := 0;
|
||||||
while ANode <> nil do begin
|
while ANode <> nil do begin
|
||||||
nodeName := ANode.NodeName;
|
nodeName := ANode.NodeName;
|
||||||
|
if nodeName = 'Column' then begin
|
||||||
|
// Column index
|
||||||
|
s := GetAttrValue(ANode, 'ss:Index');
|
||||||
|
if (s <> '') and TryStrToInt(s, c) then
|
||||||
|
dec(c);
|
||||||
|
|
||||||
|
// Column width, in Points
|
||||||
|
s := GetAttrValue(ANode, 'ss:Width');
|
||||||
|
if (s <> '') and TryStrToFloat(s, x, FPointSeparatorSettings) then
|
||||||
|
sheet.WriteColWidth(c, x, suPoints);
|
||||||
|
|
||||||
|
// Column format
|
||||||
|
s := GetAttrValue(ANode, 'ss:StyleID');
|
||||||
|
if s <> '' then begin
|
||||||
|
idx := FCellFormatList.FindIndexOfName(s);
|
||||||
|
if idx <> -1 then begin
|
||||||
|
fmt := FCellFormatList.Items[idx]^;
|
||||||
|
idx := TsWorkbook(FWorkbook).AddCellFormat(fmt);
|
||||||
|
sheet.WriteColFormatIndex(c, idx);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
inc(c);
|
||||||
|
end
|
||||||
|
else
|
||||||
if nodeName = 'Row' then begin
|
if nodeName = 'Row' then begin
|
||||||
// Default column width
|
// Default column width
|
||||||
s := GetAttrValue(ANode, 'ss:DefaultColumnWidth');
|
s := GetAttrValue(ANode, 'ss:DefaultColumnWidth');
|
||||||
if (s <> '') and TryStrToFloat(s, x, FPointSeparatorSettings) then
|
if (s <> '') and TryStrToFloat(s, x, FPointSeparatorSettings) then
|
||||||
TsWorksheet(AWorksheet).WriteDefaultColWidth(x, suPoints);
|
sheet.WriteDefaultColWidth(x, suPoints);
|
||||||
|
|
||||||
// Default row height
|
// Default row height
|
||||||
s := GetAttrValue(ANode, 'ss:DefaultRowHeight');
|
s := GetAttrValue(ANode, 'ss:DefaultRowHeight');
|
||||||
if (s <> '') and TryStrToFloat(s, x, FPointSeparatorSettings) then
|
if (s <> '') and TryStrToFloat(s, x, FPointSeparatorSettings) then
|
||||||
TsWorksheet(AWorksheet).WriteDefaultRowHeight(x, suPoints);
|
sheet.WriteDefaultRowHeight(x, suPoints);
|
||||||
|
|
||||||
// Row
|
// Index
|
||||||
s := GetAttrValue(ANode, 'ss:Index');
|
s := GetAttrValue(ANode, 'ss:Index');
|
||||||
if s <> '' then r := StrToInt(s) - 1;
|
if s <> '' then r := StrToInt(s) - 1;
|
||||||
|
|
||||||
|
// Height
|
||||||
|
s := GetAttrValue(ANode, 'ss:Height');
|
||||||
|
if (s <> '') and TryStrToFloat(s, x, FPointSeparatorSettings) then
|
||||||
|
sheet.WriteRowHeight(r, x, suPoints);
|
||||||
|
|
||||||
|
// Row format
|
||||||
|
s := GetAttrValue(ANode, 'ss:StyleID');
|
||||||
|
if s <> '' then begin
|
||||||
|
idx := FCellFormatList.FindIndexOfName(s);
|
||||||
|
if idx <> -1 then begin
|
||||||
|
fmt := FCellFormatList.Items[idx]^;
|
||||||
|
idx := TsWorkbook(FWorkbook).AddCellFormat(fmt);
|
||||||
|
sheet.WriteRowFormatIndex(r, idx);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Cells in row
|
||||||
ReadRow(ANode.FirstChild, AWorksheet, r);
|
ReadRow(ANode.FirstChild, AWorksheet, r);
|
||||||
|
|
||||||
inc(r);
|
inc(r);
|
||||||
end;
|
end;
|
||||||
ANode := ANode.NextSibling;
|
ANode := ANode.NextSibling;
|
||||||
|
Reference in New Issue
Block a user