fpspreadsheet/defined names: Some refactoring in formulas.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9400 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
parent
a7620227c6
commit
f6b3b7e9dd
@ -2422,41 +2422,15 @@ procedure TsSpreadsheetParser.AddDefinedNames;
|
|||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
book: TsWorkbook;
|
book: TsWorkbook;
|
||||||
sheet, sheet1, sheet2: TsWorksheet;
|
sheet: TsWorksheet;
|
||||||
r, c: Cardinal;
|
|
||||||
defName: TsDefinedName;
|
defName: TsDefinedName;
|
||||||
rng: TsCellRange3D;
|
|
||||||
begin
|
begin
|
||||||
sheet := TsWorksheet(FWorksheet);
|
sheet := TsWorksheet(FWorksheet);
|
||||||
book := TsWorkbook(sheet.Workbook);
|
book := TsWorkbook(sheet.Workbook);
|
||||||
for i := 0 to book.DefinedNames.Count-1 do
|
for i := 0 to book.DefinedNames.Count-1 do
|
||||||
begin
|
begin
|
||||||
defName := book.DefinedNames[i];
|
defName := book.DefinedNames[i];
|
||||||
sheet1 := book.GetWorksheetByIndex(defName.Range.Sheet1);
|
Identifiers.AddCellRangeVariable(defName.Name, defName.Range);
|
||||||
sheet2 := book.GetWorksheetByIndex(defName.Range.Sheet2);
|
|
||||||
if (sheet1 <> sheet2) then
|
|
||||||
begin
|
|
||||||
book.AddErrorMsg('3D ranges are not supported in defined names.');
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
if (defName.Range.Row1 = defName.Range.Row2) then
|
|
||||||
begin
|
|
||||||
r := defName.Range.Row1;
|
|
||||||
if (defName.Range.Col2 = defName.Range.Col1+1) then
|
|
||||||
c := defName.Range.Col2
|
|
||||||
else if (defName.Range.Col2 = defName.Range.Col1) then
|
|
||||||
c := defName.Range.Col1
|
|
||||||
else
|
|
||||||
c := Cardinal(-1);
|
|
||||||
end else
|
|
||||||
r := Cardinal(-1);
|
|
||||||
if (r = cardinal(-1)) or (c = cardinal(-1)) then
|
|
||||||
begin
|
|
||||||
book.AddErrorMsg('Defined name "' + defName.Name + '" too complex.');
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
rng := Range3D(defName.Range.Sheet1, defName.Range.Sheet2, r, c, r, c);
|
|
||||||
Identifiers.AddCellRangeVariable(defName.Name, rng);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -4017,11 +3991,11 @@ begin
|
|||||||
if PResult^.ResultType = rtCellRange then
|
if PResult^.ResultType = rtCellRange then
|
||||||
begin
|
begin
|
||||||
with PResult^.ResCellRange do
|
with PResult^.ResCellRange do
|
||||||
if (Row1 = Row2) and (Col1 = Col2) and (Sheet1 = Sheet2) then
|
if (Sheet1 = Sheet2) and (Row1 = Row2) and ((Col1 = Col2) or (Col2 = Col1+1)) then
|
||||||
begin
|
begin
|
||||||
book := TsWorkbook(TsWorksheet(Parser.Worksheet).Workbook);
|
book := TsWorkbook(TsWorksheet(Parser.Worksheet).Workbook);
|
||||||
sheet := book.GetWorksheetByIndex(Sheet1);
|
sheet := book.GetWorksheetByIndex(Sheet1);
|
||||||
cell := sheet.FindCell(Row1, Col1);
|
cell := sheet.FindCell(Row1, Col2);
|
||||||
if cell <> nil then
|
if cell <> nil then
|
||||||
case cell^.ContentType of
|
case cell^.ContentType of
|
||||||
cctNumber: AResult := FloatResult(cell^.NumberValue);
|
cctNumber: AResult := FloatResult(cell^.NumberValue);
|
||||||
|
Loading…
Reference in New Issue
Block a user