You've already forked lazarus-ccr
fpspreadsheet: Read shared formulas from OOXML files.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3494 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -615,6 +615,9 @@ var
|
|||||||
formulaStr: String;
|
formulaStr: String;
|
||||||
sstIndex: Integer;
|
sstIndex: Integer;
|
||||||
number: Double;
|
number: Double;
|
||||||
|
ref: String;
|
||||||
|
r1,r2, c1,c2: Cardinal;
|
||||||
|
sharedFormulaBase: PCell;
|
||||||
begin
|
begin
|
||||||
if ANode = nil then
|
if ANode = nil then
|
||||||
exit;
|
exit;
|
||||||
@ -624,7 +627,8 @@ begin
|
|||||||
ParseCellString(s, rowIndex, colIndex);
|
ParseCellString(s, rowIndex, colIndex);
|
||||||
|
|
||||||
// create cell
|
// create cell
|
||||||
if FIsVirtualMode then begin
|
if FIsVirtualMode then
|
||||||
|
begin
|
||||||
InitCell(rowIndex, colIndex, FVirtualCell);
|
InitCell(rowIndex, colIndex, FVirtualCell);
|
||||||
cell := @FVirtualCell;
|
cell := @FVirtualCell;
|
||||||
end else
|
end else
|
||||||
@ -639,18 +643,38 @@ begin
|
|||||||
datanode := ANode.FirstChild;
|
datanode := ANode.FirstChild;
|
||||||
dataStr := '';
|
dataStr := '';
|
||||||
formulaStr := '';
|
formulaStr := '';
|
||||||
while Assigned(datanode) do begin
|
while Assigned(datanode) do
|
||||||
|
begin
|
||||||
if datanode.NodeName = 'v' then
|
if datanode.NodeName = 'v' then
|
||||||
dataStr := GetNodeValue(datanode)
|
dataStr := GetNodeValue(datanode)
|
||||||
else
|
else
|
||||||
if datanode.NodeName = 'f' then
|
if datanode.NodeName = 'f' then
|
||||||
|
begin
|
||||||
|
// Formula to cell
|
||||||
formulaStr := GetNodeValue(datanode);
|
formulaStr := GetNodeValue(datanode);
|
||||||
|
if formulaStr <> '' then
|
||||||
|
begin
|
||||||
|
s := GetAttrValue(datanode, 't');
|
||||||
|
if s = 'shared' then
|
||||||
|
begin
|
||||||
|
s := GetAttrValue(datanode, 'ref');
|
||||||
|
if (s <>'') then
|
||||||
|
begin
|
||||||
|
cell^.FormulaValue.FormulaStr := '=' + formulaStr;
|
||||||
|
FWorksheet.UseSharedFormula(s, cell);
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
cell^.FormulaValue.FormulaStr := '=' + formulaStr;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
datanode := datanode.NextSibling;
|
datanode := datanode.NextSibling;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// formula to cell
|
{ // formula to cell
|
||||||
if formulaStr <> '' then
|
if formulaStr <> '' then
|
||||||
cell^.FormulaValue.FormulaStr := '=' + formulaStr;
|
cell^.FormulaValue.FormulaStr := '=' + formulaStr;
|
||||||
|
}
|
||||||
|
|
||||||
// get data type
|
// get data type
|
||||||
s := GetAttrValue(ANode, 't'); // "t" = data type
|
s := GetAttrValue(ANode, 't'); // "t" = data type
|
||||||
|
Reference in New Issue
Block a user