From d2351b5559d2aff039804564a0c02c8c45fbef5d Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sun, 13 May 2018 10:15:13 +0000 Subject: [PATCH] fpspreadsheet: Fix 3d cell references with a single other sheet (Sheet1!A1:C3), except for ODS. 3d references with several sheets prepared (not tested yet). Some more unit tests. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6408 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../source/common/fpsexprparser.pas | 224 ++- .../source/common/fpspreadsheet.pas | 21 +- .../fpspreadsheet/source/common/fpsutils.pas | 88 +- .../fpspreadsheet/source/common/xlsbiff5.pas | 10 +- .../fpspreadsheet/source/common/xlsbiff8.pas | 3 + .../fpspreadsheet/source/common/xlscommon.pas | 6 +- .../fpspreadsheet/tests/formulatests.pas | 5 + .../tests/singleformulatests.pas | 258 +++ .../fpspreadsheet/tests/spreadtestgui.lpi | 13 +- .../fpspreadsheet/tests/spreadtestgui.lpr | 13 +- .../tests/testcases_calc3dformula.inc | 11 +- .../tests/testcases_calcrpnformula.inc | 1448 ++++++++++++----- 12 files changed, 1624 insertions(+), 476 deletions(-) create mode 100644 components/fpspreadsheet/tests/singleformulatests.pas diff --git a/components/fpspreadsheet/source/common/fpsexprparser.pas b/components/fpspreadsheet/source/common/fpsexprparser.pas index 32d60b481..ea6cbe45d 100644 --- a/components/fpspreadsheet/source/common/fpsexprparser.pas +++ b/components/fpspreadsheet/source/common/fpsexprparser.pas @@ -86,8 +86,7 @@ type TsResultTypes = set of TsResultType; TsExpressionResult = record - Worksheet : TsWorksheet; - Worksheet2 : TsWorksheet; + Worksheet : TsWorksheet; // Worksheet containing the calculated cell ResString : String; case ResultType : TsResultType of rtEmpty : (); @@ -96,8 +95,9 @@ type rtInteger : (ResInteger : Int64); rtFloat : (ResFloat : TsExprFloat); rtDateTime : (ResDateTime : TDatetime); - rtCell : (ResRow, ResCol : Cardinal); - rtCellRange : (ResCellRange : TsCellRange); + rtCell : (ResRow, ResCol : Cardinal; + ResSheetIndex : Integer); + rtCellRange : (ResCellRange : TsCellRange3D); rtHyperlink : (); rtString : (); end; @@ -564,7 +564,7 @@ type private FCallBack: TsExprFunctionCallBack; protected - procedure GetNodeValue(out Result: TsExpressionResult); override; + procedure GetNodeValue(out AResult: TsExpressionResult); override; public constructor CreateFunction(AParser: TsExpressionParser; AID: TsExprIdentifierDef; const Args: TsExprArgumentArray); override; @@ -616,30 +616,29 @@ type TsCellRangeExprNode = class(TsExprNode) private FWorksheet: TsWorksheet; - FWorksheet2: TsWorksheet; +// FWorksheet2: TsWorksheet; FRow: array[TsCellRangeIndex] of Cardinal; FCol: array[TsCellRangeIndex] of Cardinal; + FSheet: array[TsCellRangeIndex] of Integer; FFlags: TsRelFlags; - FonOtherSheet: Boolean; + F3dRange: Boolean; protected function GetCol(AIndex: TsCellRangeIndex): Cardinal; function GetRow(AIndex: TsCellRangeIndex): Cardinal; procedure GetNodeValue(out Result: TsExpressionResult); override; - function GetSheetIndex(AIndex: TscellRangeIndex): Integer; + function GetWorkbook: TsWorkbook; public constructor Create(AParser: TsExpressionParser; AWorksheet: TsWorksheet; - ACellRangeString: String; OnOtherSheet: Boolean); overload; + ARangeString: String); overload; constructor Create(AParser: TsExpressionParser; AWorksheet: TsWorksheet; - ARow1,ACol1, ARow2,ACol2: Cardinal; AFlags: TsRelFlags; OnOtherSheet: Boolean); overload; - constructor Create(AParser: TsExpressionParser; AWorksheet1, AWorksheet2: TsWorksheet; - ACellRangeString: String); overload; - constructor Create(AParser: TsExpressionParser; AWorksheet1, AWorksheet2: TsWorksheet; - ARow1,ACol1, ARow2,ACol2: Cardinal; AFlags: TsRelFlags); overload; + ASheet1, ASheet2: String; ARow1,ACol1, ARow2, ACol2: Cardinal; + AFlags: TsRelFlags; Is3DRange: Boolean); overload; function AsRPNItem(ANext: PRPNItem): PRPNItem; override; function AsString: String; override; procedure Check; override; function Has3DLink: Boolean; override; function NodeType: TsResultType; override; + property Workbook: TsWorkbook read GetWorkbook; property Worksheet: TsWorksheet read FWorksheet; end; @@ -751,7 +750,7 @@ type procedure Clear; function CopyMode: Boolean; function Evaluate: TsExpressionResult; - procedure EvaluateExpression(out Result: TsExpressionResult); + procedure EvaluateExpression(out AResult: TsExpressionResult); function Has3DLinks: Boolean; procedure PrepareCopyMode(ASourceCell, ADestCell: PCell); function ResultType: TsResultType; @@ -1361,13 +1360,13 @@ begin EvaluateExpression(Result); end; -procedure TsExpressionParser.EvaluateExpression(out Result: TsExpressionResult); +procedure TsExpressionParser.EvaluateExpression(out AResult: TsExpressionResult); begin if (FExpression = '') then ParserError(rsExpressionEmpty); if not Assigned(FExprNode) then ParserError(rsErrorInExpression); - FExprNode.GetNodeValue(Result); + FExprNode.GetNodeValue(AResult); end; function TsExpressionParser.GetAsBoolean: Boolean; @@ -1672,7 +1671,7 @@ begin else if (TokenType = ttCell) then Result := TsCellExprNode.Create(self, FWorksheet, CurrentToken, false) else if (TokenType = ttCellRange) then - Result := TsCellRangeExprNode.Create(self, FWorksheet, CurrentToken, false) + Result := TsCellRangeExprNode.Create(self, FWorksheet, CurrentToken) else if (TokenType = ttSheetName) then begin sheetName := CurrentToken; GetToken; @@ -1683,10 +1682,10 @@ begin Result := TsCellExprNode.Create(self, sheet, CurrentToken, true) end else if TokenType = ttCellRange then begin - sheet := FWorksheet.WorkBook.GetWorksheetByName(sheetName); - if sheet = nil then - sheet := FWorksheet.Workbook.AddWorksheet(sheetName, true); - Result := TsCellRangeExprNode.Create(self, sheet, sheet, CurrentToken); + if FDialect = fdOpenDocument then + Result := TsCellRangeExprNode.Create(self, FWorksheet, CurrentToken) + else + Result := TsCellrangeExprNode.Create(self, FWorksheet, sheetName+'!'+CurrentToken); end; end else if (TokenType = ttError) then @@ -1877,12 +1876,13 @@ procedure TsExpressionParser.SetRPNFormula(const AFormula: TsRPNFormula); operand: TsExprNode = nil; fek: TFEKind; r,c, r2,c2: Cardinal; - idx: Integer; + idx, idx2: Integer; flags: TsRelFlags; ID: TsExprIdentifierDef; i, n: Integer; args: TsExprArgumentArray; - sheet, sheet2: TsWorksheet; + sheet: TsWorksheet; + sn, sn2: string; begin if AIndex < 0 then exit; @@ -1918,22 +1918,23 @@ procedure TsExpressionParser.SetRPNFormula(const AFormula: TsRPNFormula); end; dec(AIndex); end; - fekCellRange: + fekCellRange, fekCellRange3D: begin r := AFormula[AIndex].Row; c := AFormula[AIndex].Col; r2 := AFormula[AIndex].Row2; c2 := AFormula[AIndex].Col2; flags := AFormula[AIndex].RelFlags; - idx := AFormula[AIndex].Sheet; - if idx = -1 then - ANode := TsCellRangeExprNode.Create(self, FWorksheet, r, c, r2, c2, flags, false) + if fek = fekCellRange then + ANode := TsCellRangeExprNode.Create(self, FWorksheet, + FWorksheet.Name, FWorksheet.Name, r, c, r2, c2, flags, false) else begin - sheet := FWorksheet.Workbook.GetWorksheetByIndex(idx); - idx := AFormula[AIndex].Sheet2; - if idx = -1 then sheet2 := sheet - else sheet2 := FWorksheet.Workbook.GetWorksheetByIndex(idx); - ANode := TsCellRangeExprNode.Create(self, sheet, sheet2, r,c, r2,c2, flags); + sn := FWorksheet.Workbook.GetWorksheetByIndex(AFormula[AIndex].Sheet).Name; + if AFormula[AIndex].Sheet2 = -1 then + sn2 := sn + else + sn2 := FWorksheet.Workbook.GetWorksheetByIndex(AFormula[AIndex].Sheet2).Name; + ANode := TsCellRangeExprNode.Create(self, FWorksheet, sn,sn2, r,c, r2,c2, flags, true); end; dec(AIndex); end; @@ -3608,12 +3609,12 @@ begin FCallBack := AID.OnGetFunctionValueCallBack; end; -procedure TsFunctionCallBackExprNode.GetNodeValue(out Result: TsExpressionResult); +procedure TsFunctionCallBackExprNode.GetNodeValue(out AResult: TsExpressionResult); begin - Result.ResultType := NodeType; // was at end! + AResult.ResultType := NodeType; // was at end! if Length(FArgumentParams) > 0 then CalcParams; - FCallBack(Result, FArgumentParams); + FCallBack(AResult, FArgumentParams); end; @@ -3863,6 +3864,42 @@ end; { TsCellRangeExprNode } +constructor TsCellRangeExprNode.Create(AParser: TsExpressionParser; + AWorksheet: TsWorksheet; ARangeString: String); +var + r1, c1, r2, c2: Cardinal; + sheet1, sheet2: String; + flags: TsRelFlags; +begin + ParseCellRangeString(ARangeString, sheet1, sheet2, r1, c1, r2, c2, flags); + if (sheet1 = '') then begin + sheet1 := AWorksheet.Name; + sheet2 := sheet1; + end; + Create(AParser, AWorksheet, sheet1, sheet2, r1, c1, r2, c2, + flags, (AWorksheet.Name <> sheet1) ); +end; + +constructor TsCellRangeExprNode.Create(AParser: TsExpressionParser; + AWorksheet: TsWorksheet; ASheet1, ASheet2: String; + ARow1, ACol1, ARow2, ACol2: Cardinal; AFlags: tsRelFlags; Is3DRange: Boolean); +begin + FParser := AParser; + FWorksheet := AWorksheet; + FSheet[1] := GetWorkbook.GetWorksheetIndex(ASheet1); + if ASheet2 = '' then + FSheet[2] := FSheet[1] + else + FSheet[2] := GetWorkbook.GetWorksheetIndex(ASheet2); + FRow[1] := ARow1; + FCol[1] := ACol1; + FRow[2] := ARow2; + FCol[2] := ACol2; + FFlags := AFlags; + F3dRange := Is3dRange; +end; +(* + constructor TsCellRangeExprNode.Create(AParser: TsExpressionParser; AWorksheet: TsWorksheet; ACellRangeString: String; OnOtherSheet: Boolean); var @@ -3929,17 +3966,22 @@ begin FFlags := AFlags; FOnOtherSheet := true; end; + *) function TsCellRangeExprNode.AsRPNItem(ANext: PRPNItem): PRPNItem; begin - if FOnOtherSheet then + if F3dRange then Result := RPNCellRange3D( - GetSheetIndex(1), GetRow(1), GetCol(1), - GetSheetIndex(2), GetRow(2), GetCol(2), + FSheet[1], GetRow(1), GetCol(1), + FSheet[2], GetRow(2), GetCol(2), FFlags, ANext ) else - Result := RPNCellRange(GetRow(1), GetCol(1), GetRow(2), GetCol(2), FFlags, ANext); + Result := RPNCellRange( + GetRow(1), GetCol(1), + GetRow(2), GetCol(2), + FFlags, ANext + ); end; function TsCellRangeExprNode.AsString: string; @@ -3947,19 +3989,33 @@ var r1, c1, r2, c2: Cardinal; s1, s2: String; begin - r1 := GetRow(1); r2 := GetRow(2); - c1 := GetCol(1); c2 := GetCol(2); - s1 := FWorksheet.Name; s2 := FWorksheet2.Name; + s1 := Workbook.GetWorksheetByIndex(FSheet[1]).Name; + s2 := Workbook.GetWorksheetByIndex(FSheet[2]).Name; + r1 := GetRow(1); + c1 := GetCol(1); + r2 := GetRow(2); + c2 := GetCol(2); - case FParser.Dialect of - fdExcelA1: - Result := GetCellRangeString(s1, s2, r1, c1, r2, c2, FFlags, true); - fdExcelR1C1: - Result := GetCellRangeString_R1C1(s1, s2, r1, c1, r2, c2, FFlags, - FParser.FSourceCell^.Row, FParser.FSourceCell^.Col); - fdOpenDocument: - Result := GetCellRangeString_ODS(s1, s2, r1, c1, r2, c2, FFlags); - end; + if F3dRange then + case FParser.Dialect of + fdExcelA1: + Result := GetCellRangeString(s1, s2, r1, c1, r2, c2, FFlags, true); + fdExcelR1C1: + Result := GetCellRangeString_R1C1(s1, s2, r1, c1, r2, c2, FFlags, + FParser.FSourceCell^.Row, FParser.FSourceCell^.Col); + fdOpenDocument: + Result := GetCellRangeString_ODS(s1, s2, r1, c1, r2, c2, FFlags); + end + else + case FParser.Dialect of + fdExcelA1: + Result := GetCellRangeString(r1, c1, r2, c2, FFlags, true); + fdExcelR1C1: + Result := GetCellRangeString_R1C1(r1, c1, r2, c2, FFlags, + FParser.FSourceCell^.Row, FParser.FSourceCell^.Col); + fdOpenDocument: + Result := GetCellRangeString(r1, c1, r2, c2, FFlags, true); + end; end; procedure TsCellRangeExprNode.Check; @@ -3997,14 +4053,16 @@ begin begin r[i] := GetRow(i); c[i] := GetCol(i); - s[i] := GetSheetIndex(i); + s[i] := FSheet[i]; end; - if not FOnOtherSheet then s[2] := s[1]; - book := FWorksheet.Workbook; + if not F3dRange then begin + s[1] := Workbook.GetWorksheetIndex(FWorksheet); + s[2] := s[1]; + end; for ss := s[1] to s[2] do begin - sheet := book.GetWorksheetByIndex(ss); + sheet := Workbook.GetWorksheetByIndex(ss); for rr := r[1] to r[2] do for cc := c[1] to c[2] do begin @@ -4024,8 +4082,10 @@ begin Result.ResCellRange.Col1 := c[1]; Result.ResCellRange.Row2 := r[2]; Result.ResCellRange.Col2 := c[2]; + Result.ResCellRange.Sheet1 := s[1]; + Result.ResCellRange.Sheet2 := s[2]; Result.Worksheet := FWorksheet; - Result.Worksheet2 := FWorksheet2; +// Result.Worksheet2 := FWorksheet2; end; function TsCellRangeExprNode.GetRow(AIndex: TsCellRangeIndex): Cardinal; @@ -4035,22 +4095,14 @@ begin Result := FRow[AIndex] - FParser.FSourceCell^.Row + FParser.FDestCell^.Row; end; -function TsCellRangeExprNode.GetSheetIndex(AIndex: TsCellRangeIndex): Integer; -var - book: TsWorkbook; - sheet: TsWorksheet; +function TsCellRangeExprNode.GetWorkbook: TsWorkbook; begin - case AIndex of - 1: sheet := FWorksheet; - 2: sheet := FWorksheet2; - end; - book := sheet.Workbook; - Result := book.GetWorksheetIndex(sheet); + Result := FWorksheet.Workbook; end; function TsCellRangeExprNode.Has3DLink: Boolean; begin - Result := FOnOtherSheet; + Result := F3dRange; end; function TsCellRangeExprNode.NodeType: TsResultType; @@ -4224,29 +4276,37 @@ var i, n: Integer; r, c: Cardinal; cell: PCell; + sheet: TsWorksheet; arg: TsExpressionResult; + idx, idx1, idx2: Integer; begin SetLength(AData, BLOCKSIZE); n := 0; for i:=0 to High(Args) do begin arg := Args[i]; - if arg.ResultType = rtCellRange then - for r := arg.ResCellRange.Row1 to arg.ResCellRange.Row2 do - for c := arg.ResCellRange.Col1 to arg.ResCellRange.Col2 do - begin - cell := arg.Worksheet.FindCell(r, c); - if (cell <> nil) and (cell^.ContentType in [cctNumber, cctDateTime]) then + if arg.ResultType = rtCellRange then begin + idx1 := arg.ResCellRange.Sheet1; + idx2 := arg.ResCellRange.Sheet2; + for idx := idx1 to idx2 do + begin + sheet := arg.Worksheet.Workbook.GetWorksheetByIndex(idx); + for r := arg.ResCellRange.Row1 to arg.ResCellRange.Row2 do + for c := arg.ResCellRange.Col1 to arg.ResCellRange.Col2 do begin - case cell^.ContentType of - cctNumber : AData[n] := cell^.NumberValue; - cctDateTime : AData[n] := cell^.DateTimeValue + cell := sheet.FindCell(r, c); + if (cell <> nil) and (cell^.ContentType in [cctNumber, cctDateTime]) then + begin + case cell^.ContentType of + cctNumber : AData[n] := cell^.NumberValue; + cctDateTime : AData[n] := cell^.DateTimeValue + end; + inc(n); + if n = Length(AData) then SetLength(AData, Length(AData) + BLOCKSIZE); end; - inc(n); - if n = Length(AData) then SetLength(AData, length(AData) + BLOCKSIZE); - end; - end - else + end + end; + end else if (arg.ResultType in [rtInteger, rtFloat, rtDateTime, rtCell, rtBoolean]) then begin AData[n] := ArgToFloat(arg); diff --git a/components/fpspreadsheet/source/common/fpspreadsheet.pas b/components/fpspreadsheet/source/common/fpspreadsheet.pas index 4ab10e38f..5795befaf 100644 --- a/components/fpspreadsheet/source/common/fpspreadsheet.pas +++ b/components/fpspreadsheet/source/common/fpspreadsheet.pas @@ -755,7 +755,7 @@ type procedure PrepareBeforeReading; procedure PrepareBeforeSaving; - procedure ReCalc; +// procedure ReCalc; public {@@ A copy of SysUtil's DefaultFormatSettings (converted to UTF8) to provide @@ -8119,6 +8119,7 @@ end; {@@ ---------------------------------------------------------------------------- Recalculates rpn formulas in all worksheets -------------------------------------------------------------------------------} +(* procedure TsWorkbook.Recalc; var sheet: pointer; @@ -8126,6 +8127,7 @@ begin for sheet in FWorksheets do TsWorksheet(sheet).CalcFormulas; end; +*) {@@ ---------------------------------------------------------------------------- Conversion of length values between units @@ -8475,7 +8477,8 @@ begin ok := true; UpdateCaches; if (boAutoCalc in Options) then - Recalc; + CalcFormulas; +// Recalc; FFormatID := AFormatID; finally FReadWriteFlag := rwfNormal; @@ -8611,7 +8614,8 @@ begin ok := true; UpdateCaches; if (boAutoCalc in Options) then - Recalc; + CalcFormulas; +// Recalc; FFormatID := AFormatID; finally FReadWriteFlag := rwfNormal; @@ -8977,11 +8981,13 @@ end; function TsWorkbook.GetWorksheetByName(AName: String): TsWorksheet; var i:integer; + s: String; begin Result := nil; for i:=0 to FWorksheets.Count-1 do begin - if UTF8CompareText(TsWorkSheet(FWorkSheets.Items[i]).Name, AName) = 0 then + s := TsWorksheet(FWorksheets.Items[i]).Name; + if UTF8CompareText(s, AName) = 0 then begin Result := TsWorksheet(FWorksheets.Items[i]); exit; @@ -9012,10 +9018,15 @@ end; worksheet does not exist. -------------------------------------------------------------------------------} function TsWorkbook.GetWorksheetIndex(const AWorksheetName: String): Integer; +var + s: String; begin for Result := 0 to FWorksheets.Count-1 do - if TsWorksheet(FWorksheets[Result]).Name = AWorksheetName then + begin + s := TsWorksheet(FWorksheets[Result]).Name; + if SameText(s, AWorksheetName) then exit; + end; Result := -1; end; diff --git a/components/fpspreadsheet/source/common/fpsutils.pas b/components/fpspreadsheet/source/common/fpsutils.pas index b906ae389..f14c7a917 100644 --- a/components/fpspreadsheet/source/common/fpsutils.pas +++ b/components/fpspreadsheet/source/common/fpsutils.pas @@ -81,6 +81,9 @@ function ParseSheetCellString(const AStr: String; out ASheetName: String; function ParseCellRowString(const AStr: string; out ARow: Cardinal): Boolean; function ParseCellColString(const AStr: string; out ACol: Cardinal): Boolean; +function ParseCellRangeString(const AStr: String; out ASheet1, ASheet2: String; + out ARow1, ACol1, ARow2, ACol2: Cardinal; out AFlags: TsRelFlags): Boolean; overload; + function GetCellRangeString(ASheet1, ASheet2: String; ARow1, ACol1, ARow2, ACol2: Cardinal; AFlags: TsRelFlags = rfAllRel; Compact: Boolean = false): String; overload; function GetCellRangeString(ARow1, ACol1, ARow2, ACol2: Cardinal; @@ -914,6 +917,87 @@ begin Result := Char(AValue + ord('A')); end; +{@@ ---------------------------------------------------------------------------- + Parses a 3D cell and sheet range string in Excel A1 dialect. Returns the + names of the limiting sheets and the indexes of the limiting borders. + The function result is false if the provided string is not valid. +-------------------------------------------------------------------------------} +function ParseCellRangeString(const AStr: String; out ASheet1, ASheet2: String; + out ARow1, ACol1, ARow2, ACol2: Cardinal; out AFlags: TsRelFlags): Boolean; +var + s1, s2: string; + p: Integer; +begin + p := pos('!', AStr); + if p = 0 then begin + ASheet1 := ''; + ASheet2 := ''; + s2 := AStr; + end else begin + s1 := Copy(AStr, 1, p-1); + s2 := Copy(AStr, p+1, MaxInt); + p := pos(':', s1); + if p = 0 then + ASheet1 := s1 + else begin + ASheet1 := copy(s1, 1, p-1); + ASheet2 := copy(s1, p+1, MaxInt); + end; + end; + Result := ParseCellRangeString(s2, ARow1, ACol1, ARow2, ACol2, AFlags); +end; + +{@@ ---------------------------------------------------------------------------- + Parses a 3D cell and sheet range string in ODS dialect. Returns the + names of the limiting sheets and the indexes of the limiting borders. + The function result is false if the provided string is not valid. +-------------------------------------------------------------------------------} +function ParseCellRangeString_ODS(const AStr: String; out ASheet1, ASheet2: String; + out ARow1, ACol1, ARow2, ACol2: Cardinal; out AFlags: TsRelFlags): Boolean; +var + s1, s2: String; + p: Integer; + res1, res2: Boolean; + flags1, flags2: TsRelFlags; +begin + p := Pos(':', AStr); + if p = 0 then begin + s1 := AStr; + s2 := ''; + end else begin + s1 := copy(AStr, 1, p-1); + s2 := copy(AStr, p+1, MaxInt); + end; + + p := pos('.', s1); + if p = 0 then begin + ASheet1 := ''; + ASheet2 := ''; + Result := ParseCellString(s1, ARow1, ACol1, AFlags); + ARow2 := ARow1; + ACol2 := ACol1; + exit; + end else begin + ASheet1 := Copy(s1, 1, p-1); + s1 := copy(s1, p+1, MaxInt); + res1 := ParseCellString(s1, ARow1, ACol1, flags1); + end; + + p := pos('.', s2); + if p = 0 then begin + ASheet2 := ''; + res2 := ParseCellString(s2, ARow2, ACol2, flags2); + end else begin + ASheet2 := Copy(s2, 1, p-1); + s2 := copy(s2, p+1, MaxInt); + res2 := ParseCellString(s2, ARow2, ACol2, flags2); + end; + + Result := res1 and res2; + AFlags := flags1 + flags2; +end; + + {@@ ---------------------------------------------------------------------------- Calculates an Excel column name ('A', 'B' etc) from the zero-based column index @@ -1113,11 +1197,11 @@ function GetCellRangeString_ODS(ASheet1, ASheet2: String; var s1, s2: String; begin - s1 := Format('%s%s%s%s', [ + s1 := Format('%s%s%s%d', [ RELCHAR[rfRelCol in AFlags], GetColString(ACol1), RELCHAR[rfRelRow in AFlags], ARow1 + 1 ]); - s2 := Format('%s%s%s%s', [ + s2 := Format('%s%s%s%d', [ RELCHAR[rfRelCol2 in AFlags], GetColString(ACol2), RELCHAR[rfRelRow2 in AFlags], ARow2 + 1 ]); diff --git a/components/fpspreadsheet/source/common/xlsbiff5.pas b/components/fpspreadsheet/source/common/xlsbiff5.pas index 95f9c21e4..20267b084 100644 --- a/components/fpspreadsheet/source/common/xlsbiff5.pas +++ b/components/fpspreadsheet/source/common/xlsbiff5.pas @@ -532,6 +532,8 @@ begin INT_EXCEL_ID_COLINFO : ReadColInfo(AStream); INT_EXCEL_ID_DEFCOLWIDTH : ReadDefColWidth(AStream); INT_EXCEL_ID_EOF : SectionEOF := True; + INT_EXCEL_ID_EXTERNCOUNT : ReadEXTERNCOUNT(AStream); + INT_EXCEL_ID_EXTERNSHEET : ReadEXTERNSHEET(AStream); INT_EXCEL_ID_FOOTER : ReadHeaderFooter(AStream, false); INT_EXCEL_ID_FORMULA : ReadFormula(AStream); INT_EXCEL_ID_HEADER : ReadHeaderFooter(AStream, true); @@ -666,17 +668,17 @@ begin // Skip 8 unused bytes AStream.Position := AStream.Position + 8; - // Zero-based index to first referenced sheet (-1 = deleted sheet) + // one-based index to first referenced sheet (-1 = deleted sheet) idx := Int16(WordLEToN(AStream.ReadWord)); if idx <> -1 then begin - s := FExternSheets.Strings[idx]; + s := FExternSheets.Strings[idx-1]; ASheet1 := FWorkbook.GetWorksheetIndex(s); end; - // Zero-based index to last referenced sheet (-1 = deleted sheet) + // one-based index to last referenced sheet (-1 = deleted sheet) idx := WordLEToN(AStream.ReadWord); if idx <> -1 then begin - s := FExternSheets.Strings[idx]; + s := FExternSheets.Strings[idx-1]; ASheet2 := FWorkbook.GetWorksheetIndex(s); end; end diff --git a/components/fpspreadsheet/source/common/xlsbiff8.pas b/components/fpspreadsheet/source/common/xlsbiff8.pas index dbe9e8192..c67b73d5e 100644 --- a/components/fpspreadsheet/source/common/xlsbiff8.pas +++ b/components/fpspreadsheet/source/common/xlsbiff8.pas @@ -2831,6 +2831,9 @@ end; -------------------------------------------------------------------------------} procedure TsSpreadBIFF8Writer.WriteEXTERNBOOK(AStream: TStream); begin + if (FExternBooks = nil) or (FExternBooks.Count = 0) then + exit; + { BIFF record header } WriteBIFFHeader(AStream, INT_EXCEL_ID_EXTERNBOOK, 4); diff --git a/components/fpspreadsheet/source/common/xlscommon.pas b/components/fpspreadsheet/source/common/xlscommon.pas index 4ac03fbce..5a3e51f01 100644 --- a/components/fpspreadsheet/source/common/xlscommon.pas +++ b/components/fpspreadsheet/source/common/xlscommon.pas @@ -1887,7 +1887,8 @@ begin inc(len); SetLength(ansistr, len); AStream.ReadBuffer(ansistr[2], len-1); - ansistr[1] := char(b); + Delete(ansistr, 1, 1); +// ansistr[1] := char(b); s := ConvertEncoding(ansistr, FCodePage, encodingUTF8); FExternSheets.AddObject(s, TObject(PtrInt(b))); end; @@ -4088,6 +4089,9 @@ end; *) procedure TsSpreadBIFFWriter.WriteEXTERNCOUNT(AStream: TStream; ACount: Word); begin + if ACount = 0 then + exit; + { BIFF record header } WriteBIFFHeader(AStream, INT_EXCEL_ID_EXTERNCOUNT, 2); diff --git a/components/fpspreadsheet/tests/formulatests.pas b/components/fpspreadsheet/tests/formulatests.pas index 2864ec312..e032fbf4e 100644 --- a/components/fpspreadsheet/tests/formulatests.pas +++ b/components/fpspreadsheet/tests/formulatests.pas @@ -10,6 +10,8 @@ unit formulatests; Note that Excel report a corrupted file when trying to read this file } {.DEFINE ENABLE_DEFECTIVE_FORMULAS } +{ Activate the project define FORMULADEBUG to log the formulas written } + interface @@ -87,6 +89,9 @@ type implementation uses + {$IFDEF FORMULADEBUG} + LazLogger, + {$ENDIF} math, typinfo, lazUTF8, fpsUtils, fpsRPN, rpnFormulaUnit; var diff --git a/components/fpspreadsheet/tests/singleformulatests.pas b/components/fpspreadsheet/tests/singleformulatests.pas new file mode 100644 index 000000000..d7b8e7e84 --- /dev/null +++ b/components/fpspreadsheet/tests/singleformulatests.pas @@ -0,0 +1,258 @@ +unit SingleFormulaTests; + +{$mode objfpc}{$H+} + +interface + +uses + // Not using Lazarus package as the user may be working with multiple versions + // Instead, add .. to unit search path + Classes, SysUtils, fpcunit, testutils, testregistry, + fpstypes, fpsallformats, fpspreadsheet, fpsexprparser, + xlsbiff8 {and a project requirement for lclbase for utf8 handling}, + testsutility; + +type + TFormulaTestKind = (ftkConstants, ftkCellConstant, ftkCells, ftkCellRange, + ftkCellRangeSheet, ftkCellRangeSheetRange); + + { TSpreadDetailedFormulaFormula } + TSpreadSingleFormulaTests = class(TTestCase) + private + protected + procedure SetUp; override; + procedure TearDown; override; + procedure TestFloatFormula(AFormula: String; AExpected: Double; + ATestKind: TFormulaTestKind; AFormat: TsSpreadsheetFormat); + + published + procedure AddConst_BIFF2; + procedure AddConst_BIFF5; + procedure AddConst_BIFF8; + procedure AddConst_OOXML; + procedure AddConst_ODS; + + procedure AddCells_BIFF2; + procedure AddCells_BIFF5; + procedure AddCells_BIFF8; + procedure AddCells_OOXML; + procedure AddCells_ODS; + + procedure SumRange_BIFF2; + procedure SumRange_BIFF5; + procedure SumRange_BIFF8; + procedure SumRange_OOXML; + + procedure SumSheetRange_BIFF5; // no 3d ranges for BIFF2 + procedure SumSheetRange_BIFF8; + procedure SumSheetRange_OOXML; + + end; + +implementation + +uses + {$IFDEF FORMULADEBUG} + LazLogger, + {$ENDIF} + math, typinfo, lazUTF8, fpsUtils; + + +{ TSpreadExtendedFormulaTests } + +procedure TSpreadSingleFormulaTests.SetUp; +begin + inherited SetUp; +end; + +procedure TSpreadSingleFormulaTests.TearDown; +begin + inherited TearDown; +end; + +procedure TSpreadSingleFormulaTests.TestFloatFormula(AFormula: String; + AExpected: Double; ATestKind: TFormulaTestKind; AFormat: TsSpreadsheetFormat); +const + SHEET1 = 'Sheet1'; + SHEET2 = 'Sheet2'; + SHEET3 = 'Sheet3'; + TESTCELL_ROW = 1; + TESTCELL_COL = 2; +var + worksheet: TsWorksheet; + othersheet: TsWorksheet; + workbook: TsWorkbook; + TempFile: string; //write xls/xml to this file and read back from it + cell: PCell; + actualformula: String; + actualValue: Double; +begin + TempFile := GetTempFileName; + + // Create test workbook and write test formula and needed cells + workbook := TsWorkbook.Create; + try + workbook.Options := workbook.Options + [boCalcBeforeSaving, boAutoCalc]; + workSheet:= workBook.AddWorksheet(SHEET1); + + if ATestKind <> ftkConstants then begin + // Write cells used by the formula + worksheet.WriteNumber(2, 2, 1.0); // C3 + worksheet.WriteNumber(3, 2, -2.0); // C4 + worksheet.WriteNumber(4, 2, 1.5); // C5 + worksheet.WriteNumber(2, 3, 15.0); // D3 + end; + + if ATestKind in [ftkCellRangeSheet, ftkCellRangeSheetRange] then begin + otherSheet := Workbook.AddWorksheet(SHEET2); + othersheet.WriteNumber(2, 2, 10.0); // Sheet2!C3 + othersheet.WriteNumber(3, 2, -20.0); // Sheet2!C4 + othersheet.WriteNumber(4, 2, 15.0); // Sheet2!C5 + othersheet.WriteNumber(2, 3, 150.0); // Sheet2!D5 + end; + + if ATestKind = ftkCellRangeSheetRange then begin + otherSheet := Workbook.AddWorksheet(SHEET3); + othersheet.WriteNumber(2, 2, 100.0); // Sheet3C3 + othersheet.WriteNumber(3, 2, -200.0); // Sheet3!C4 + othersheet.WriteNumber(4, 2, 150.0); // Sheet3!C5 + othersheet.WriteNumber(2, 3, 1500.0); // Sheet3!D5 + end; + + // Write the formula + cell := worksheet.WriteFormula(TESTCELL_ROW, TESTCELL_COL, AFormula); + + // Read formula before saving + actualFormula := cell^.Formulavalue; + CheckEquals(AFormula, actualFormula, 'Unsaved formula text mismatch'); + + // Read calculated value before saving + actualvalue := worksheet.ReadAsNumber(TESTCELL_ROW, TESTCELL_COL); + CheckEquals(AExpected, actualvalue, 'Unsaved calculated value mismatch'); + + // Save + workbook.WriteToFile(TempFile, AFormat, true); + finally + workbook.Free; + end; + + // Read file + workbook := TsWorkbook.Create; + try + workbook.Options := workbook.Options + [boReadFormulas, boAutoCalc]; + workbook.ReadFromFile(TempFile, AFormat); + worksheet := workbook.GetFirstWorksheet; + + // Read calculated formula value + actualvalue := worksheet.ReadAsNumber(TESTCELL_ROW, TESTCELL_COL); + CheckEquals(AExpected, actualValue, 'Saved calculated value mismatch'); + + cell := worksheet.FindCell(TESTCELL_ROW, TESTCELL_COL); + actualformula := cell^.FormulaValue; + CheckEquals(AFormula, actualformula, 'Saved formula text mismatch.'); + finally + workbook.Free; + DeleteFile(TempFile); + end; +end; + +procedure TSpreadSingleFormulaTests.AddConst_BIFF2; +begin + TestFloatFormula('1+1', 2, ftkConstants, sfExcel2); +end; + +procedure TSpreadSingleFormulaTests.AddConst_BIFF5; +begin + TestFloatFormula('1+1', 2, ftkConstants, sfExcel5); +end; + +procedure TSpreadSingleFormulaTests.AddConst_BIFF8; +begin + TestFloatFormula('1+1', 2, ftkConstants, sfExcel8); +end; + +procedure TSpreadSingleFormulaTests.AddConst_OOXML; +begin + TestFloatFormula('1+1', 2, ftkConstants, sfOOXML); +end; + +procedure TSpreadSingleFormulaTests.AddConst_ODS; +begin + TestFloatFormula('1+1', 2, ftkConstants, sfOpenDocument); +end; + +{---------------} + +procedure TSpreadSingleFormulaTests.AddCells_BIFF2; +begin + TestFloatFormula('C3+C4', -1.0, ftkCells, sfExcel2); +end; + +procedure TSpreadSingleFormulaTests.AddCells_BIFF5; +begin + TestFloatFormula('C3+C4', -1.0, ftkCells, sfExcel5); +end; + +procedure TSpreadSingleFormulaTests.AddCells_BIFF8; +begin + TestFloatFormula('C3+C4', -1.0, ftkCells, sfExcel8); +end; + +procedure TSpreadSingleFormulaTests.AddCells_OOXML; +begin + TestFloatFormula('C3+C4', -1.0, ftkCells, sfOOXML); +end; + +procedure TSpreadSingleFormulaTests.AddCells_ODS; +begin + TestFloatFormula('C3+C4', -1.0, ftkCells, sfOpenDocument); +end; + +{ ------ } + +procedure TSpreadSingleFormulaTests.SumRange_BIFF2; +begin + TestFloatFormula('SUM(C3:C5)', 0.5, ftkCellRange, sfExcel2); +end; + +procedure TSpreadSingleFormulaTests.SumRange_BIFF5; +begin + TestFloatFormula('SUM(C3:C5)', 0.5, ftkCellRange, sfExcel5); +end; + +procedure TSpreadSingleFormulaTests.SumRange_BIFF8; +begin + TestFloatFormula('SUM(C3:C5)', 0.5, ftkCellRange, sfExcel8); +end; + +procedure TSpreadSingleFormulaTests.SumRange_OOXML; +begin + TestFloatFormula('SUM(C3:C5)', 0.5, ftkCellRange, sfOOXML); +end; + +{ ---- } + +procedure TSpreadSingleFormulaTests.SumSheetRange_BIFF5; +begin + TestFloatFormula('SUM(Sheet2!C3:C5)', 5.0, ftkCellRangeSheet, sfExcel5); +end; + +procedure TSpreadSingleFormulaTests.SumSheetRange_BIFF8; +begin + TestFloatFormula('SUM(Sheet2!C3:C5)', 5.0, ftkCellRangeSheet, sfExcel8); +end; + +procedure TSpreadSingleFormulaTests.SumSheetRange_OOXML; +begin + TestFloatFormula('SUM(Sheet2!C3:C5)', 5.0, ftkCellRangeSheet, sfOOXML); +end; + +{ ---- } + + +initialization + // Register to include these tests in a full run + RegisterTest(TSpreadSingleFormulaTests); + +end. + diff --git a/components/fpspreadsheet/tests/spreadtestgui.lpi b/components/fpspreadsheet/tests/spreadtestgui.lpi index 3671dd440..e90e8b995 100644 --- a/components/fpspreadsheet/tests/spreadtestgui.lpi +++ b/components/fpspreadsheet/tests/spreadtestgui.lpi @@ -38,7 +38,7 @@ - + @@ -156,6 +156,11 @@ + + + + + @@ -174,6 +179,12 @@ + + + + + + diff --git a/components/fpspreadsheet/tests/spreadtestgui.lpr b/components/fpspreadsheet/tests/spreadtestgui.lpr index 9c20f73b3..73d618a8b 100644 --- a/components/fpspreadsheet/tests/spreadtestgui.lpr +++ b/components/fpspreadsheet/tests/spreadtestgui.lpr @@ -9,12 +9,13 @@ uses //HeapTrc, SysUtils, {$ENDIF} - Interfaces, Forms, GuiTestRunner, datetests, stringtests, numberstests, - manualtests, testsutility, internaltests, formattests, colortests, fonttests, - optiontests, numformatparsertests, formulatests, rpnFormulaUnit, exceltests, - emptycelltests, errortests, virtualmodetests, insertdeletetests, ssttests, - celltypetests, sortingtests, copytests, enumeratortests, commenttests, - hyperlinktests, pagelayouttests, protectiontests; + Interfaces, Forms, GuiTestRunner, testsutility, + datetests, stringtests, numberstests, manualtests, internaltests, + formattests, colortests, fonttests, optiontests, numformatparsertests, + formulatests, rpnFormulaUnit, singleformulatests, + exceltests, emptycelltests, errortests, virtualmodetests, + insertdeletetests, ssttests, celltypetests, sortingtests, copytests, + enumeratortests, commenttests, hyperlinktests, pagelayouttests, protectiontests; begin {$IFDEF HEAPTRC} diff --git a/components/fpspreadsheet/tests/testcases_calc3dformula.inc b/components/fpspreadsheet/tests/testcases_calc3dformula.inc index cc1b14987..9513717ea 100644 --- a/components/fpspreadsheet/tests/testcases_calc3dformula.inc +++ b/components/fpspreadsheet/tests/testcases_calc3dformula.inc @@ -6,7 +6,9 @@ sheet1.WriteNumber(1, 5, 12.0); // F2 = 12.0 sheet2.WriteText(2, 1, 'A'); // B3 = 'A' - sheet2.WriteNumber(1, 4, 1.0); // E2 = 1.0 + sheet2.WriteNumber(1, 4, 1.0); // E2 = 1.0 + sheet2.WriteNumber(2, 4, -1.0); // E3 = -1.0 + sheet2.WriteNumber(3, 4, 10.0); // E4 = 10.0 sheet3.WriteText(1, 2, 'B'); // C2 = 'B' sheet3.WriteNumber(1, 1, 2.0); // B2 = 2.0 @@ -69,6 +71,13 @@ SetLength(SollValues, Row+1); SollValues[Row] := StringResult('AB'); + inc(Row); + formula := 'SUM(Sheet2!E2:E4)'; { A9 } + sheet1.WriteText(Row, 0, formula); + sheet1.WriteFormula(Row, 1, formula); + SetLength(SollValues, Row+1); + SollValues[Row] := FloatResult(10.0); + { inc(Row); formula := 'D1&Sheet2!B3%"BC"'; diff --git a/components/fpspreadsheet/tests/testcases_calcrpnformula.inc b/components/fpspreadsheet/tests/testcases_calcrpnformula.inc index 8d8baaf47..e773ff86f 100644 --- a/components/fpspreadsheet/tests/testcases_calcrpnformula.inc +++ b/components/fpspreadsheet/tests/testcases_calcrpnformula.inc @@ -4,13 +4,14 @@ // Setting up some test numbers // Test range M1:N3 - MyWorksheet.WriteUTF8Text(0, 12, 'A'); // M1 - MyWorksheet.WriteUTF8Text(0, 13, 'A'); // N1 - MyWorksheet.WriteNumber (1, 12, 1); // M2 - MyWorksheet.WriteNumber (1, 13, 2); // N2 + MyWorksheet.WriteText(0, 12, 'A'); // M1 + MyWorksheet.WriteText(0, 13, 'A'); // N1 + MyWorksheet.WriteNumber (1, 12, 1); // M2 + MyWorksheet.WriteNumber (1, 13, 2); // N2 // Create an error in H2 MyWorksheet.WriteFormula (1, 7, '1/0'); + {------------------------------------------------------------------------------} { Basic operations } {------------------------------------------------------------------------------} @@ -18,7 +19,10 @@ Row := 0; formula := '1+1'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -38,7 +42,10 @@ // Subtraction inc(Row); formula := '1-10'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -58,7 +65,10 @@ // Add cell values - relative addresses inc(Row); formula := 'B1+B2'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B1', @@ -73,7 +83,10 @@ // Add cell values - absolute addresses inc(Row); formula := '$B$1+$B$2'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('$B$1', @@ -89,7 +102,10 @@ // Add cell values - mixed absolute and relative addresses inc(Row); formula := 'B$1+$B2'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B$1', @@ -105,7 +121,7 @@ // Subtract cell values - relative addresses inc(Row); formula := 'B1-B2'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B1', @@ -120,7 +136,10 @@ // Subtract cell values - absolute addresses inc(Row); formula := '$B$1-$B$2'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('$B$1', @@ -135,7 +154,10 @@ // Subtract cell values - mixed absolute and relative addresses inc(Row); formula := 'B$1-$B2'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B$1', @@ -151,7 +173,10 @@ // Multiplication w/o Parenthesis inc(Row); formula := '10*-3'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(10.0, @@ -166,7 +191,10 @@ // Multiplication w/Parenthesis inc(Row); formula := '10*(-3)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(10.0, @@ -182,7 +210,10 @@ // Multiplication of cell values inc(Row); formula := 'B1*B2'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B1', @@ -197,7 +228,10 @@ // Division inc(Row); formula := '10/200'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(10.0, @@ -212,7 +246,10 @@ // Division: Error case - divide by zero inc(Row); formula := '10/0'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(10.0, @@ -230,7 +267,10 @@ // Division of cell values inc(Row); formula := 'B1/B2'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B1', @@ -245,7 +285,10 @@ // Percentage inc(Row); formula := '10%'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(10.0, @@ -259,7 +302,10 @@ // Percentage of cell value inc(Row); formula := 'B1%'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B1', @@ -273,7 +319,10 @@ // Exotic test case from OpenOffice test file inc(Row); formula := '200%%'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(200, @@ -287,7 +336,10 @@ // Power symbol inc(Row); formula := '2^0.5'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(2.0, @@ -302,7 +354,10 @@ // Power symbol - precedence of operations inc(Row); formula := '2^0.5*4'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(2.0, @@ -319,7 +374,10 @@ // Power symbol - precedence of operators inc(Row); formula := '4*2^0.5'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(4.0, @@ -336,7 +394,10 @@ // Exotic sample from OpenOffice test files inc(Row); formula := '50%^200%'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(50.0, @@ -355,7 +416,10 @@ // Power of constant inc(Row); formula := 'POWER(2,0.5)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(2.0, @@ -370,7 +434,10 @@ // Power of cell values inc(Row); formula := 'POWER(B1,B2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B1', @@ -387,7 +454,10 @@ // Power: Error case "power( (negative number), (fractional number) )" inc(Row); formula := 'POWER(-2.0, 0.5)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(-2.0, @@ -405,7 +475,10 @@ // Unary minus inc(Row); formula := '-(-1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNformula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(-1.0, @@ -420,7 +493,10 @@ // Unary minus of cell value inc(Row); formula := '-B1'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B1', @@ -434,7 +510,10 @@ // Unary plus inc(Row); formula := '+(-1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(-1.0, @@ -449,6 +528,9 @@ // Unary plus of cell value inc(Row); formula := '+(B2)'; + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} MyWorksheet.WriteUTF8Text(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( @@ -464,7 +546,10 @@ // Exotic case from OpenOffice test files inc(Row); formula := '+-B2'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellvalue('B2', @@ -479,20 +564,26 @@ // String result inc(Row); formula := '"Hallo"'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo', nil))) else Myworksheet.WriteFormula(Row, 1, formula); - Myworksheet.WriteUTF8Text(Row, 2, 'Hallo'); + Myworksheet.WriteText(Row, 2, 'Hallo'); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('Hallo'); // String concatenation inc(Row); formula := '"Hallo"&" world"'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo', @@ -500,14 +591,17 @@ RPNFunc(fekConcat, nil))))) else MyWorksheet.WriteFormula(Row, 1, formula); - Myworksheet.WriteUTF8Text(Row, 2, 'Hallo' + ' world'); + Myworksheet.WriteText(Row, 2, 'Hallo' + ' world'); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('Hallo' + ' world'); // Equal (bool) inc(Row); formula := 'TRUE=FALSE'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, @@ -517,12 +611,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true = false); - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); // Equal (strings) inc(Row); formula := '"Hallo"="world"'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo', @@ -532,12 +629,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult('Hallo' = 'world'); - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); // Equal (numbers) inc(Row); formula := '1=1'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1, @@ -547,12 +647,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(1 = 1); - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); // Equal (cell) inc(Row); formula := 'M1=1'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('M1', @@ -562,11 +665,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); // M1 is "A" - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); inc(Row); formula := 'M2=1'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('M2', @@ -576,11 +682,14 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); // M2 is 1 - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); inc(Row); formula := 'M2=N2'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('M2', @@ -590,12 +699,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); // M2 is 1, N2 is 2 - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); // Greater (bool) inc(Row); formula := 'TRUE>FALSE'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, @@ -605,12 +717,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true > false); - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); // Greater (strings) inc(Row); formula := '"Hallo">"world"'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo', @@ -620,12 +735,12 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult('Hallo' > 'world'); - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); // Greater (numbers) inc(Row); formula := '1>1'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1, @@ -635,12 +750,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(1 > 1); - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); // Greater (cell) inc(Row); formula := 'M2>1'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('M2', @@ -650,11 +768,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); Myworksheet.WriteBoolvalue(Row, 2, SollValues[Row].ResBoolean); - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); inc(Row); formula := 'M2>N2'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('M2', @@ -664,12 +785,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); // M2 is 1, N2 is 2 - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); // Greater equal (bool) inc(Row); formula := 'TRUE>=FALSE'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, @@ -679,12 +803,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true >= false); - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); // Greater equal (strings) inc(Row); formula := '"Hallo">="world"'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo', @@ -694,12 +821,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult('Hallo' >= 'world'); - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); // Greater equal (numbers) inc(Row); formula := '1>=1'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1, @@ -709,12 +839,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(1 >= 1); - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); // Greater equal(cell) inc(Row); formula := 'M2>=1'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('M2', @@ -724,11 +857,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); // M2 is 1 - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); inc(Row); formula := 'M2>=N2'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('M2', @@ -738,12 +874,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); // M2 is 1, N2 is 2 - Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); + Myworksheet.WriteText(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE')); // Less (bool) inc(Row); formula := 'TRUE false); - Myworksheet.WriteUTF8Text(Row, 2, 'TRUE'); + Myworksheet.WriteText(Row, 2, 'TRUE'); // Not equal (strings) inc(Row); formula := '"Hallo"<>"world"'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo', @@ -916,12 +1088,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult('Hallo' <> 'world'); - Myworksheet.WriteUTF8Text(Row, 2, 'TRUE'); + Myworksheet.WriteText(Row, 2, 'TRUE'); // Not equal (numbers) inc(Row); formula := '1<>1'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1, @@ -931,12 +1106,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(1 <> 1); - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); + Myworksheet.WriteText(Row, 2, 'FALSE'); // Not equal (cell) inc(Row); formula := 'M2<>1'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('M2', @@ -946,11 +1124,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); // M2 is 1 - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); + Myworksheet.WriteText(Row, 2, 'FALSE'); inc(Row); formula := 'M2<>N2'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('M2', @@ -960,8 +1141,7 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); // M2 is 1, N2 is 2 - Myworksheet.WriteUTF8Text(Row, 2, 'TRUE'); - + Myworksheet.WriteText(Row, 2, 'TRUE'); {------------------------------------------------------------------------------} { Math } @@ -969,7 +1149,10 @@ // ABS inc(Row); formula := 'ABS(-1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(-1, @@ -984,7 +1167,10 @@ inc(Row); number := 0.1; formula := 'ACOS(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1000,7 +1186,10 @@ // ACOS - error result (arccos is not defined outside the interval [-1..1] inc(Row); formula := 'ACOS(-2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(-2, @@ -1018,7 +1207,10 @@ inc(Row); number := 1.1; formula := 'ACOSH(1.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(number, @@ -1032,7 +1224,10 @@ // ACOSH - error result (arccos is not defined below 1 inc(Row); formula := 'ACOSH(0.9)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.9, @@ -1050,7 +1245,10 @@ inc(Row); number := 0.1; formula := 'ASIN(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1064,7 +1262,10 @@ // ASIN - error result (arcsin is not defined outside the interval [-1..1] inc(Row); formula := 'ASIN(-2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(-2, @@ -1082,7 +1283,10 @@ inc(Row); number := 1.1; formula := 'ASINH(1.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.1, @@ -1097,7 +1301,10 @@ inc(Row); number := 0.1; formula := 'ATAN(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1112,7 +1319,10 @@ inc(Row); number := 0.1; formula := 'ATANH(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1126,7 +1336,10 @@ // ATANH - error result (arctan is only defined within ]-1,1[ inc(Row); formula := 'ATANH(1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -1145,7 +1358,10 @@ inc(Row); number := 0.1; formula := 'CEILING(5.02,0.25)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(5.02, @@ -1162,7 +1378,10 @@ inc(Row); number := 0.1; formula := 'COS(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1177,7 +1396,10 @@ inc(Row); number := 0.1; formula := 'COSH(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1193,7 +1415,10 @@ begin inc(Row); formula := 'DEGREES(1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1, @@ -1209,8 +1434,11 @@ if AFormat <> sfExcel2 then begin inc(Row); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} formula := 'EVEN(11.2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(11.2, @@ -1226,7 +1454,10 @@ inc(Row); number := 0.1; formula := 'EXP(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1240,7 +1471,10 @@ // FACT inc(Row); formula := 'FACT(5)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNInteger(5, @@ -1256,7 +1490,10 @@ inc(Row); number := 0.1; formula := 'FLOOR(5.02,0.25)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(5.02, @@ -1273,7 +1510,10 @@ inc(Row); number := 0.1; formula := 'INT(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1287,7 +1527,10 @@ // INT (negative argument) inc(Row); formula := 'INT(-0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(-0.1, @@ -1302,7 +1545,10 @@ inc(Row); number := 0.1; formula := 'LN(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1316,14 +1562,17 @@ // LN - error due to argument = 0 inc(Row); formula := 'LN(0)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.0, RPNFunc('LN', nil)))) else MyWorksheet.WriteFormula(Row, 1, formula); - myWorksheet.WriteUTF8Text(Row, 2, GetErrorValueStr(errOverflow)); + myWorksheet.WriteText(Row, 2, GetErrorValueStr(errOverflow)); SetLength(sollValues, Row+1); if AFormat = sfOpenDocument then sollValues[Row] := FloatResult(0) @@ -1333,14 +1582,17 @@ // LN - error due to argument < 0 inc(Row); formula := 'LN(-0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(-0.1, RPNFunc('LN', nil)))) else MyWorksheet.WriteFormula(Row, 1, formula); - MyWorksheet.WriteUTF8Text(Row, 2, GetErrorValueStr(errOverflow)); + MyWorksheet.WriteText(Row, 2, GetErrorValueStr(errOverflow)); SetLength(sollValues, Row+1); if AFormat = sfOpenDocument then sollValues[Row] := FloatResult(0) @@ -1351,7 +1603,10 @@ inc(Row); number := 0.1; formula := 'LOG10(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1365,14 +1620,17 @@ // LOG10 - error due to argument = 0 inc(Row); formula := 'LOG10(0)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.0, RPNFunc('LOG10', nil)))) else MyWorksheet.WriteFormula(Row, 1, formula); - myWorksheet.WriteUTF8Text(Row, 2, GetErrorValueStr(errOverflow)); + myWorksheet.WriteText(Row, 2, GetErrorValueStr(errOverflow)); SetLength(sollValues, Row+1); if AFormat = sfOpenDocument then sollValues[Row] := FloatResult(0) @@ -1382,14 +1640,17 @@ // LOG10 - error due to argument < 0 inc(Row); formula := 'LOG10(-0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(-0.1, RPNFunc('LOG10', nil)))) else MyWorksheet.WriteFormula(Row, 1, formula); - MyWorksheet.WriteUTF8Text(Row, 2, GetErrorValueStr(errOverFlow)); + MyWorksheet.WriteText(Row, 2, GetErrorValueStr(errOverFlow)); SetLength(sollValues, Row+1); if AFormat = sfOpenDocument then sollValues[Row] := FloatResult(0) @@ -1400,7 +1661,10 @@ inc(Row); number := 0.1; formula := 'LOG(0.1,2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1415,7 +1679,10 @@ // LOG - error result (2 arguments, base missing) inc(Row); formula := 'LOG(0.1,)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1423,7 +1690,7 @@ RPNFunc('LOG', 2, nil))))) else MyWorksheet.WriteFormula(Row, 1, formula); - MyWorksheet.WriteUTF8Text(Row, 2, GetErrorValueStr(errOverflow)); + MyWorksheet.WriteText(Row, 2, GetErrorValueStr(errOverflow)); SetLength(sollValues, Row+1); if AFormat = sfOpenDocument then sollValues[Row] := FloatResult(0) @@ -1434,7 +1701,10 @@ inc(Row); number := 0.1; formula := 'LOG(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1448,7 +1718,10 @@ // LOG - negative base inc(Row); formula := 'LOG(0.1,-2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1456,7 +1729,7 @@ RPNFunc('LOG', 2, nil))))) else MyWorksheet.WriteFormula(Row, 1, formula); - MyWorksheet.WriteUTF8Text(Row, 2, GetErrorValueStr(errOverflow)); + MyWorksheet.WriteText(Row, 2, GetErrorValueStr(errOverflow)); SetLength(sollValues, Row+1); if AFormat = sfOpenDocument then sollValues[Row] := FloatResult(0) @@ -1466,7 +1739,10 @@ // LOG - negative value inc(Row); formula := 'LOG(-0.1,2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(-0.1, @@ -1474,7 +1750,7 @@ RPNFunc('LOG', 2, nil))))) else MyWorksheet.WriteFormula(Row, 1, formula); - MyWorksheet.WriteUTF8Text(Row, 2, GetErrorValueStr(errOverflow)); + MyWorksheet.WriteText(Row, 2, GetErrorValueStr(errOverflow)); SetLength(sollValues, Row+1); if AFormat = sfOpenDocument then sollValues[Row] := FloatResult(0) @@ -1484,7 +1760,10 @@ // LOG of cell inc(Row); formula := 'LOG(B1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B1', @@ -1498,7 +1777,10 @@ // MOD inc(Row); formula := 'MOD(12,5)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNInteger(12, @@ -1515,7 +1797,10 @@ begin inc(Row); formula := 'ODD(11.2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(11.2, @@ -1530,7 +1815,10 @@ // PI inc(Row); formula := 'PI()'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNFunc('PI', nil))) @@ -1545,7 +1833,10 @@ // RADIANS inc(Row); formula := 'RADIANS(60)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(60, @@ -1559,7 +1850,10 @@ // RADIANS of cell value inc(Row); formula := 'RADIANS(B1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B1', @@ -1578,7 +1872,10 @@ // ROUND inc(Row); formula := 'ROUND(PI(),2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNFunc('PI', @@ -1594,7 +1891,10 @@ // ROUND inc(Row); formula := 'ROUND(12345.6789,-2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(12345.6789, @@ -1611,7 +1911,10 @@ inc(Row); number := -0.1; formula := 'SIGN(-0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(-0.1, @@ -1625,7 +1928,10 @@ // SIGN of cell value inc(Row); formula := 'SIGN(B1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B1', @@ -1640,7 +1946,10 @@ inc(Row); number := 0.1; formula := 'SIN(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1654,7 +1963,10 @@ // SIN of cell value inc(Row); formula := 'SIN(B1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B1', @@ -1669,7 +1981,10 @@ inc(Row); number := 0.1; formula := 'SINH(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1683,7 +1998,10 @@ // SINH of cell value inc(Row); formula := 'SINH(B1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B1', @@ -1698,7 +2016,10 @@ inc(Row); number := 0.1; formula := 'SQRT(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1712,14 +2033,17 @@ // SQRT - error (negative argument) inc(Row); formula := 'SQRT(-0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(-0.1, RPNFunc('SQRT', nil)))) else myWorksheet.WriteFormula(Row, 1, formula); - MyWorksheet.WriteUTF8Text(Row, 2, GetErrorValueStr(errOverflow)); + MyWorksheet.WriteText(Row, 2, GetErrorValueStr(errOverflow)); SetLength(sollValues, Row+1); if AFormat = sfOpenDocument then sollValues[Row] := FloatResult(0) @@ -1729,7 +2053,10 @@ // SQRT of cell value inc(Row); formula := 'SQRT(B1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellvalue('B1', @@ -1744,7 +2071,10 @@ inc(Row); number := 0.1; formula := 'TAN(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1761,7 +2091,10 @@ // TAN of cell value inc(Row); formula := 'TAN(B1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B1', @@ -1776,7 +2109,10 @@ inc(Row); number := 0.1; formula := 'TANH(0.1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0.1, @@ -1790,7 +2126,10 @@ // TANH of cell value inc(Row); formula := 'TANH(B1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('B1', @@ -1801,7 +2140,6 @@ SetLength(sollValues, Row+1); sollValues[Row] := FloatResult(tanh(cellB1)); - {------------------------------------------------------------------------------} { Date/time functions } {------------------------------------------------------------------------------} @@ -1809,7 +2147,10 @@ // DATE inc(Row); formula := 'DATE(2014,7,1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(2014, @@ -1826,7 +2167,10 @@ if AFormat <> sfExcel2 then begin inc(Row); formula := 'DATEDIF(DATE(2014,7,1),DATE(2014,1,1),"D")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(2014, @@ -1851,7 +2195,10 @@ inc(Row); s := DateToStr(EncodeDate(2014, 7, 1)); // Localization of the test formula := 'DATEVALUE("'+s+'")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString(s, @@ -1866,7 +2213,10 @@ // DAY / argument number inc(Row); formula := 'DAY(DATE(2014,7,1))'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(2014, @@ -1884,7 +2234,10 @@ inc(Row); s := DateToStr(EncodeDate(2014, 7, 1)); // Localization of the test formula := 'DAY("'+s+'")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString(s, @@ -1898,7 +2251,10 @@ // HOUR / argument number inc(Row); formula := 'HOUR(TIME(9,59,20))'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(9, @@ -1916,7 +2272,10 @@ inc(Row); s := TimeToStr(EncodeTime(9, 59, 20, 0)); // Localization of the test formula := 'HOUR("'+s+'")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString(s, @@ -1930,7 +2289,10 @@ // MINUTE / argument number inc(Row); formula := 'MINUTE(TIME(9,59,20))'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(9, @@ -1948,7 +2310,10 @@ inc(Row); s := TimeToStr(EncodeTime(9, 59, 20, 0)); // Localization of the test formula := 'MINUTE("'+s+'")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString(s, @@ -1962,7 +2327,10 @@ // MONTH / argument number inc(Row); formula := 'MONTH(DATE(2014,7,1))'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(2014, @@ -1980,7 +2348,10 @@ inc(Row); s := DateToStr(EncodeDate(2014, 7, 1)); // Localization of the test formula := 'MONTH("'+s+'")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString(s, @@ -1994,13 +2365,16 @@ // NOW inc(Row); formula := 'NOW()'; + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} // Make sure that, when the file is read we still have the same second // Otherwise there would be a mismatch. repeat number := now(); DecodeTime(number, hr, min, sec, msec); until msec < 500; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNFunc('NOW', nil))) @@ -2014,7 +2388,10 @@ // SECOND / argument number inc(Row); formula := 'SECOND(TIME(9,59,20))'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(9, @@ -2032,7 +2409,10 @@ inc(Row); s := TimeToStr(EncodeTime(9, 59, 20, 0)); // Localization of the test formula := 'SECOND("'+s+'")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString(s, @@ -2046,7 +2426,10 @@ // TIME inc(Row); formula := 'TIME(9,59,20)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(9, @@ -2064,7 +2447,10 @@ inc(Row); s := TimeToStr(EncodeTime(9, 59, 20, 0)); // Localization! formula := 'TIMEVALUE("'+s+'")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString(s, @@ -2079,7 +2465,10 @@ // TODAY inc(Row); formula := 'TODAY()'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNFunc('TODAY', nil))) @@ -2093,7 +2482,10 @@ // WEEKDAY / argument number inc(Row); formula := 'WEEKDAY(DATE(2014,7,1))'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(2014, @@ -2111,7 +2503,10 @@ inc(Row); s := DateToStr(EncodeDate(2014, 7, 1)); // Localization of the test formula := 'WEEKDAY("'+s+'")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString(s, @@ -2125,7 +2520,10 @@ // YEAR / argument number inc(Row); formula := 'YEAR(DATE(2014,7,1))'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(2014, @@ -2143,7 +2541,10 @@ inc(Row); s := DateToStr(EncodeDate(2014, 7, 1)); // Localization of the test formula := 'YEAR("'+s+'")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString(s, @@ -2163,7 +2564,10 @@ if AFormat <> sfExcel2 then begin inc(Row); formula := 'AVEDEV(1,1.1,1.2,0.9,0.8)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -2185,7 +2589,10 @@ // AVERAGE inc(Row); formula := 'AVERAGE(1,1.1,1.2,0.9,0.8)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -2203,7 +2610,10 @@ // AVERAGE of cell block inc(Row); formula := 'AVERAGE(B1:B2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('B1:B2', @@ -2216,8 +2626,11 @@ // COUNT inc(Row); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} formula := 'COUNT(1,1.1,1.2,0.9,0.8)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -2235,7 +2648,10 @@ // COUNT of cell range (no empty cells) inc(Row); formula := 'COUNT(B1:B2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellrange('B1:B2', @@ -2249,7 +2665,10 @@ // COUNT of cell range (no empty cells, but with non-numeric cells) inc(Row); formula := 'COUNT(A1:B2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellrange('A1:B2', @@ -2262,11 +2681,14 @@ // COUNT of cell range (with empty cells) inc(Row); - formula := 'COUNT(B1:C2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + formula := 'COUNT(M2:N3)'; + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( - RPNCellrange('B1:C2', + RPNCellrange('M2:N3', RPNFunc('COUNT', 1, nil)))) else Myworksheet.WriteFormula(Row, 1, formula); @@ -2274,9 +2696,13 @@ SetLength(sollValues, Row+1); sollValues[Row] := IntegerResult(2); - // COUNTA +// COUNTA + inc(Row); formula := 'COUNTA(1,1.1,1.2,0.9,0.8)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -2291,8 +2717,12 @@ SetLength(sollValues, Row+1); sollValues[Row] := IntegerResult(5); + inc(Row); formula := 'COUNTA(1,1.1,1.2,0.9,0.8,"A","B")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -2311,7 +2741,10 @@ inc(Row); formula := 'COUNTA(A1:D2,1,2,"A")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('A1:D2', @@ -2329,7 +2762,10 @@ if AFormat <> sfExcel2 then begin inc(Row); formula := 'COUNTBLANK(A1:D2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('A1:D2', @@ -2347,7 +2783,10 @@ if AFormat <> sfExcel2 then begin inc(Row); formula := 'COUNTIF(M1:N3,1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('M1:N3', @@ -2361,7 +2800,10 @@ inc(Row); formula := 'COUNTIF(M1:N3,">=1")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('M1:N3', @@ -2375,7 +2817,10 @@ inc(Row); formula := 'COUNTIF(M1:N3,"<2")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('M1:N3', @@ -2389,7 +2834,10 @@ inc(Row); formula := 'COUNTIF(M1:N3,"<>2")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('M1:N3', @@ -2403,7 +2851,10 @@ inc(Row); formula := 'COUNTIF(M1:N3,M1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('M1:N3', @@ -2419,7 +2870,10 @@ // MAX inc(Row); formula := 'MAX(1,1.1,1.2,0.9,0.8)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -2437,7 +2891,10 @@ // MAX of cell range (no empty cells) inc(Row); formula := 'MAX(B1:B2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('B1:B2', @@ -2451,7 +2908,10 @@ // MAX of cell range (incl empty cells) inc(Row); formula := 'MAX(B1:C2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('B1:C2', @@ -2465,7 +2925,10 @@ // MIN inc(Row); formula := 'MIN(1,1.1,1.2,0.9,0.8)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -2483,7 +2946,10 @@ // MIN of cell range (no empty cells) inc(Row); formula := 'MIN(B1:B2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('B1:B2', @@ -2497,7 +2963,10 @@ // MIN of cell range (incl empty cells) inc(Row); formula := 'MIN(B1:C2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('B1:C2', @@ -2511,7 +2980,10 @@ // PRODUCT inc(Row); formula := 'PRODUCT(1,1.1,1.2,0.9,0.8)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -2529,7 +3001,10 @@ // STDEV inc(Row); formula := 'STDEV(1,1.1,1.2,0.9,0.8)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -2547,7 +3022,10 @@ // STDEVP inc(Row); formula := 'STDEVP(1,1.1,1.2,0.9,0.8)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -2565,7 +3043,10 @@ // SUM inc(Row); formula := 'SUM(1,1.1,1.2,0.9,0.8)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -2584,7 +3065,10 @@ if AFormat <> sfExcel2 then begin inc(Row); formula := 'SUMSQ(1,1.1,1.2,0.9,0.8)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -2603,7 +3087,10 @@ // SUMIF inc(Row); formula = 'SUMIF(M1:N3,1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('M1:N3', @@ -2617,7 +3104,10 @@ inc(Row); formula := 'SUMIF(M1:N3,">=1")'; - MyWorksheet.WriteUTF8Text(Row, 0, formul); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formul); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('M1:N3', @@ -2631,7 +3121,10 @@ inc(Row); formula := 'SUMIF(M1:N3,"<2")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('M1:N3', @@ -2645,7 +3138,10 @@ inc(Row); formula := 'SUMIF(M1:N3,"<>2")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('M1:N3', @@ -2659,7 +3155,10 @@ inc(Row); formula := 'SUMIF(M1:N3,M1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('M1:N3', @@ -2673,7 +3172,10 @@ inc(Row); formula := 'SUMIF(M1:N3,M2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('M1:N3', @@ -2690,7 +3192,10 @@ // VAR inc(Row); formula := 'VAR(1,1.1,1.2,0.9,0.8)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -2708,7 +3213,10 @@ // VARP inc(Row); formula := 'VARP(1,1.1,1.2,0.9,0.8)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1.0, @@ -2731,21 +3239,27 @@ // AND of one values (bool) inc(Row); formula := 'AND(TRUE)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, RPNFunc('AND', 1, nil)))) else MyWorksheet.WriteFormula(Row, 1, formula); - MyWorksheet.WriteUTF8Text(Row, 2, 'TRUE'); + MyWorksheet.WriteText(Row, 2, 'TRUE'); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); // AND of two values (bool) inc(Row); formula := 'AND(TRUE,FALSE)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, @@ -2753,14 +3267,17 @@ RPNFunc('AND', 2, nil))))) else MyWorksheet.WriteFormula(Row, 1, formula); - MyWorksheet.WriteUTF8Text(Row, 2, 'FALSE'); + MyWorksheet.WriteText(Row, 2, 'FALSE'); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true and false); // AND of three values (bool) inc(Row); formula := 'AND(TRUE,FALSE,TRUE)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, @@ -2769,27 +3286,33 @@ RPNFunc('AND', 3, nil)))))) else MyWorksheet.WriteFormula(Row, 1, formula); - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); + Myworksheet.WriteText(Row, 2, 'FALSE'); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true and false and true); // function =FALSE() inc(Row); formula := 'FALSE()'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNFunc('FALSE', nil))) else MyWorksheet.WriteFormula(Row, 1, formula); - MyWorksheet.WriteUTF8Text(Row, 2, 'FALSE'); + MyWorksheet.WriteText(Row, 2, 'FALSE'); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); // IF (2 parameters)/strings/case true inc(Row); formula := 'IF(TRUE,"A")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, @@ -2797,14 +3320,17 @@ RPNFunc('IF', 2, nil))))) else MyWorksheet.WriteFormula(Row, 1, formula); - MyWorksheet.WriteUTF8Text(Row, 2, 'A'); + MyWorksheet.WriteText(Row, 2, 'A'); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('A'); // IF (2 parameters) /floats/case true inc(Row); formula := 'IF(TRUE,1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, @@ -2819,7 +3345,10 @@ // IF (2 parameters)/strings/case false inc(Row); formula := 'IF(FALSE,"A")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(false, @@ -2827,14 +3356,17 @@ RPNFunc('IF', 2, nil))))) else MyWorksheet.WriteFormula(Row, 1, formula); - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); + Myworksheet.WriteText(Row, 2, 'FALSE'); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); // IF (2 parameters) /floats/case false inc(Row); formula := 'IF(FALSE,1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(false, @@ -2842,14 +3374,17 @@ RPNFunc('IF', 2, nil))))) else MyWorksheet.WriteFormula(Row, 1, formula); - myWorksheet.WriteUTF8Text(Row, 2, 'FALSE'); + myWorksheet.WriteText(Row, 2, 'FALSE'); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); // IF (3 parameters)/strings inc(Row); formula := 'IF(TRUE,"A","B")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, @@ -2858,14 +3393,17 @@ RPNFunc('IF', 3, nil)))))) else MyWorksheet.WriteFormula(Row, 1, formula); - Myworksheet.WriteUTF8Text(Row, 2, 'A'); + Myworksheet.WriteText(Row, 2, 'A'); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('A'); // IF (3 parameters) /floats inc(Row); formula := 'IF(TRUE,1,2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, @@ -2881,7 +3419,10 @@ // IF (3 parameters) /floats / mixed types, case true inc(Row); formula := 'IF(TRUE,1,"A")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, @@ -2897,7 +3438,10 @@ // IF (3 parameters) /floats / mixed types, case false inc(Row); formula := 'IF(FALSE,1,"A")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(false, @@ -2906,42 +3450,51 @@ RPNFunc('IF', 3, nil)))))) else myWorksheet.WriteFormula(Row, 1, formula); - MyWorksheet.WriteUTF8Text(Row, 2, 'A'); + MyWorksheet.WriteText(Row, 2, 'A'); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('A'); // NOT inc(Row); formula := 'NOT(FALSE)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(false, RPNFunc('NOT', nil)))) else MyWorksheet.WriteFormula(Row, 1, formula); - MyWorksheet.WriteUTF8Text(Row, 2, 'TRUE'); + MyWorksheet.WriteText(Row, 2, 'TRUE'); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(not false); // OR of one values (bool) inc(Row); formula := 'OR(TRUE)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, RPNFunc('OR', 1, nil)))) else MyWorksheet.WriteFormula(Row, 1, formula); - myWorksheet.WriteUTF8Text(Row, 2, 'TRUE'); + myWorksheet.WriteText(Row, 2, 'TRUE'); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); // OR of two values (bool) inc(Row); formula := 'OR(TRUE,FALSE)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, @@ -2949,14 +3502,17 @@ RPNFunc('OR', 2, nil))))) else MyWorksheet.WriteFormula(Row, 1, formula); - Myworksheet.WriteUTF8Text(Row, 2, 'TRUE'); + Myworksheet.WriteText(Row, 2, 'TRUE'); SetLength(sollValues, Row+1); sollValues[Row] := Booleanresult(true or false); // OR of three values (bool) inc(Row); formula := 'OR(TRUE,FALSE,TRUE)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, @@ -2965,24 +3521,28 @@ RPNFunc('OR', 3, nil)))))) else Myworksheet.WriteFormula(Row, 1, formula); - Myworksheet.WriteUTF8Text(Row, 2, 'TRUE'); + Myworksheet.WriteText(Row, 2, 'TRUE'); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true or false or true); // function =TRUE() inc(Row); formula := 'TRUE()'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNFunc('TRUE', nil))) else MyWorksheet.WriteFormula(Row, 1, formula); - MyWorksheet.WriteUTF8Text(Row, 2, 'TRUE'); + MyWorksheet.WriteText(Row, 2, 'TRUE'); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); + {------------------------------------------------------------------------------} { String functions } {------------------------------------------------------------------------------} @@ -2990,7 +3550,10 @@ // CHAR inc(Row); formula := 'CHAR(72)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNInteger(72, @@ -2999,12 +3562,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult(char(72)); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // CODE inc(Row); formula := 'CODE("Hallo world")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo world', @@ -3020,7 +3586,10 @@ begin inc(Row); formula := 'CONCATENATE("A","B","C")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('A', @@ -3031,13 +3600,16 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('ABC'); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); end; // EXACT inc(Row); formula := 'EXACT("abc","ABC")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('abc', @@ -3047,12 +3619,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); + Myworksheet.WriteText(Row, 2, 'FALSE'); // LEFT (2 parameters) inc(Row); formula := 'LEFT("Hallo world",2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo world', @@ -3062,12 +3637,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('Ha'); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // LEFT (2 parameters, utf8) inc(Row); formula := 'LEFT("Ändern",3)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Ändern', @@ -3077,12 +3655,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('Änd'); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // LEFT (2 parameters, 1 of them missing) inc(Row); formula := 'LEFT("Hallo world",)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo world', @@ -3092,12 +3673,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('H'); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // LEFT (1 parameter) inc(Row); formula := 'LEFT("Hallo world")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo world', @@ -3106,12 +3690,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('H'); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // Len inc(Row); formula := 'LEN("Hallo world")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo world', @@ -3125,7 +3712,10 @@ // Lower case inc(Row); formula := 'LOWER("Hallo world")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo world', @@ -3134,12 +3724,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult(LowerCase('Hallo world')); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // Lower case / utf8 inc(Row); formula := 'LOWER("Viele Grüße")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Viele Grüße', @@ -3148,12 +3741,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult(UTF8LowerCase('Viele Grüße')); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // MID inc(Row); formula := 'MID("Hallo world",3,2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo world', @@ -3164,12 +3760,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('ll'); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // REPLACE inc(Row); formula := 'REPLACE("weather",2,2,"he")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('weather', @@ -3181,12 +3780,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('whether'); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // REPLACE / utf8 inc(Row); formula := 'REPLACE("würde",2,1,"u")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('würde', @@ -3198,12 +3800,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('wurde'); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // REPT inc(Row); formula := 'REPT("ABC",3)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('ABC', @@ -3213,12 +3818,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('ABCABCABC'); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // RIGHT (2 parameters) inc(Row); formula := 'RIGHT("Hallo world",2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo world', @@ -3228,12 +3836,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('ld'); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // RIGHT (2 parameters, one of them missing) inc(Row); formula := 'RIGHT("Hallo world",)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo world', @@ -3243,12 +3854,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('d'); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // RIGHT (1 parameter) inc(Row); formula := 'RIGHT("Hallo world")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo world', @@ -3257,12 +3871,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('d'); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // SUBSTITUTE inc(Row); formula := 'SUBSTITUTE("lAzArus","A","a")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('lAzArus', @@ -3273,12 +3890,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('lazarus'); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // SUBSTITUTE /nth appearance inc(Row); formula := 'SUBSTITUTE("lazarus","a","A",2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('lazarus', @@ -3290,12 +3910,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('lazArus'); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // Trim inc(Row); formula := 'TRIM(" Hallo world ")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString(' Hallo world ', @@ -3304,12 +3927,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult(UTF8Trim(' Hallo world ')); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // Upper case inc(Row); formula := 'UPPER("Hallo world")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Hallo world', @@ -3318,12 +3944,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult(UpperCase('Hallo world')); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // Upper case / utf8 inc(Row); formula := 'UPPER("Viele Grüße")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('Viele Grüße', @@ -3332,12 +3961,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult(UTF8UpperCase('Viele Grüße')); - Myworksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + Myworksheet.WriteText(Row, 2, sollValues[Row].ResString); // VALUE inc(Row); formula := 'VALUE("100")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('100', @@ -3349,25 +3981,19 @@ sollValues[Row] := FloatResult(100); - - - - - - {------------------------------------------------------------------------------} { Lookup / reference functions } {------------------------------------------------------------------------------} - (* + { // COLUMN - MyWorksheet.WriteUTF8Text(Row, 0, 'COLUMN(A1)'); + MyWorksheet.WriteText(Row, 0, 'COLUMN(A1)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('A1', RPNFunc(fekCOLUMN, 1, nil)))); SetLength(sollValues, Row+1); sollValues[Row] := CreateNumberArg(1); - MyWorksheet.WriteUTF8Text(Row, 0, 'COLUMN(C1:D3)'); + MyWorksheet.WriteText(Row, 0, 'COLUMN(C1:D3)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('C1:D3', RPNFunc(fekCOLUMN, 1, nil)))); @@ -3375,14 +4001,14 @@ sollValues[Row] := CreateNumberArg(3); // COLUMNS - MyWorksheet.WriteUTF8Text(Row, 0, 'COLUMNS(A1)'); + MyWorksheet.WriteText(Row, 0, 'COLUMNS(A1)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('A1', RPNFunc(fekCOLUMNS, 1, nil)))); SetLength(sollValues, Row+1); sollValues[Row] := CreateNumberArg(1); - MyWorksheet.WriteUTF8Text(Row, 0, 'COLUMNS(C1:D3)'); + MyWorksheet.WriteText(Row, 0, 'COLUMNS(C1:D3)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('C1:D3', RPNFunc(fekCOLUMNS, 1, nil)))); @@ -3390,14 +4016,14 @@ sollValues[Row] := CreateNumberArg(2); // ROW - MyWorksheet.WriteUTF8Text(Row, 0, 'ROW(A1)'); + MyWorksheet.WriteText(Row, 0, 'ROW(A1)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('A1', RPNFunc(fekROW, 1, nil)))); SetLength(sollValues, Row+1); sollValues[Row] := CreateNumberArg(1); - MyWorksheet.WriteUTF8Text(Row, 0, 'ROW(C2:D3)'); + MyWorksheet.WriteText(Row, 0, 'ROW(C2:D3)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('C2:D3', RPNFunc(fekROW, 1, nil)))); @@ -3405,28 +4031,31 @@ sollValues[Row] := CreateNumberArg(2); // ROWS - MyWorksheet.WriteUTF8Text(Row, 0, 'ROWS(A1)'); + MyWorksheet.WriteText(Row, 0, 'ROWS(A1)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('A1', RPNFunc(fekROWS, 1, nil)))); SetLength(sollValues, Row+1); sollValues[Row] := CreateNumberArg(1); - MyWorksheet.WriteUTF8Text(Row, 0, 'ROWS(C2:D3)'); + MyWorksheet.WriteText(Row, 0, 'ROWS(C2:D3)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRange('C2:D3', RPNFunc(fekROWS, 1, nil)))); SetLength(sollValues, Row+1); sollValues[Row] := CreateNumberArg(2); - *) + } {------------------------------------------------------------------------------} { Information functions } {------------------------------------------------------------------------------} { cell function will be removed because it requires localized string parameters // CELL formula := 'CELL("address",A1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('address', @@ -3436,9 +4065,9 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := StringResult('$A$1'); - MyWorksheet.WriteUTF8Text(Row, 2, sollValues[Row].ResString); + MyWorksheet.WriteText(Row, 2, sollValues[Row].ResString); - MyWorksheet.WriteUTF8Text(Row, 0, 'CELL("col", B1)'); + MyWorksheet.WriteText(Row, 0, 'CELL("col", B1)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('col', RPNCellRef('B1', @@ -3446,7 +4075,7 @@ SetLength(sollValues, Row+1); sollValues[Row] := CreateNumberArg(2); // Excel starts counting at 1 - MyWorksheet.WriteUTF8Text(Row, 0, 'CELL("format", B1)'); + MyWorksheet.WriteText(Row, 0, 'CELL("format", B1)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('format', RPNCellRef('B1', @@ -3454,7 +4083,7 @@ SetLength(sollValues, Row+1); sollValues[Row] := CreateStringArg('G'); - MyWorksheet.WriteUTF8Text(Row, 0, 'CELL("prefix", A1)'); + MyWorksheet.WriteText(Row, 0, 'CELL("prefix", A1)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('prefix', RPNCellRef('A1', @@ -3462,7 +4091,7 @@ SetLength(sollValues, Row+1); sollValues[Row] := CreateStringArg(''''); - MyWorksheet.WriteUTF8Text(Row, 0, 'CELL("row", B1)'); + MyWorksheet.WriteText(Row, 0, 'CELL("row", B1)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('row', RPNCellRef('B1', @@ -3470,7 +4099,7 @@ SetLength(sollValues, Row+1); sollValues[Row] := CreateNumberArg(1); // Excel starts counting at 1 - MyWorksheet.WriteUTF8Text(Row, 0, 'CELL("type", A1)'); + MyWorksheet.WriteText(Row, 0, 'CELL("type", A1)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('type', RPNCellRef('A1', @@ -3478,7 +4107,7 @@ SetLength(sollValues, Row+1); sollValues[Row] := CreateStringArg('l'); - MyWorksheet.WriteUTF8Text(Row, 0, 'CELL("type", B1)'); + MyWorksheet.WriteText(Row, 0, 'CELL("type", B1)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('type', RPNCellRef('B1', @@ -3489,14 +4118,14 @@ (* // INFO - MyWorksheet.WriteUTF8Text(Row, 0, 'INFO("directory", A1)'); + MyWorksheet.WriteText(Row, 0, 'INFO("directory", A1)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('directory', RPNFunc(fekINFO, nil)))); SetLength(sollValues, Row+1); sollValues[Row] := CreateStringArg(ExtractFilePath(TempFile)); - MyWorksheet.WriteUTF8Text(Row, 0, 'INFO("numfile")'); + MyWorksheet.WriteText(Row, 0, 'INFO("numfile")'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('numfile', RPNFunc(fekINFO, nil)))); @@ -3508,7 +4137,10 @@ (* ---- fails for ODS ---> to be checked inc(Row); formula := 'ERROR.TYPE(A1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('A1', @@ -3517,11 +4149,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollvalues, Row+1); sollValues[Row] := ErrorResult(errArgError); - MyWorksheet.WriteUTF8Text(Row, 2, '#N/A'); + MyWorksheet.WriteText(Row, 2, '#N/A'); inc(Row); formula := 'ERROR.TYPE(H2)'; // this cells contains "1/0" --> #DIV/0! - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('H2', @@ -3530,13 +4165,16 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollvalues, Row+1); sollValues[Row] := IntegerResult(ord(errDivideByZero)); - MyWorksheet.WriteUTF8Text(Row, 2, IntToStr(ord(errDivideByZero))); + MyWorksheet.WriteText(Row, 2, IntToStr(ord(errDivideByZero))); *) // IsBlank inc(Row); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} formula := 'ISBLANK(A1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('A1', @@ -3545,11 +4183,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); // cell contains text --> not blank - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); + Myworksheet.WriteText(Row, 2, 'FALSE'); inc(Row); formula := 'ISBLANK(G1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('G1', @@ -3558,12 +4199,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); // the cell does not exist --> blank - Myworksheet.WriteUTF8Text(Row, 2, 'TRUE'); + Myworksheet.WriteText(Row, 2, 'TRUE'); inc(Row); formula := 'ISBLANK(H1)'; + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} MyWorksheet.WriteBlank(0, 7); // A11 is an empty cell - MyWorksheet.WriteUTF8Text(Row, 0, formula); + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('H1', @@ -3572,12 +4216,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); // the cell exists, but it is empty - Myworksheet.WriteUTF8Text(Row, 2, 'TRUE'); + Myworksheet.WriteText(Row, 2, 'TRUE'); // IsErr inc(Row); formula := 'ISERR(H2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then myWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('H2', @@ -3586,10 +4233,13 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); // there is an error in H2 - Myworksheet.WriteUTF8Text(Row, 2, 'TRUE'); + Myworksheet.WriteText(Row, 2, 'TRUE'); formula := 'ISERR(H3)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then myWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('H3', @@ -3598,12 +4248,15 @@ Myworksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); // no error in H3 - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); + Myworksheet.WriteText(Row, 2, 'FALSE'); // IsError inc(Row); formula := 'ISERROR(1/0)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1, @@ -3614,11 +4267,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); - Myworksheet.WriteUTF8Text(Row, 2, 'TRUE'); + Myworksheet.WriteText(Row, 2, 'TRUE'); inc(Row); formula := 'ISERROR(0/1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(0, @@ -3629,11 +4285,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); + Myworksheet.WriteText(Row, 2, 'FALSE'); inc(Row); formula := 'ISERROR(H2)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('H2', @@ -3642,11 +4301,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); - Myworksheet.WriteUTF8Text(Row, 2, 'TRUE'); + Myworksheet.WriteText(Row, 2, 'TRUE'); inc(Row); formula := 'ISERROR(H3)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('H3', @@ -3655,12 +4317,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); + Myworksheet.WriteText(Row, 2, 'FALSE'); // IsLogical inc(Row); formula := 'ISLOGICAL(B1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('B1', @@ -3669,12 +4334,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); + Myworksheet.WriteText(Row, 2, 'FALSE'); // IsNONTEXT inc(Row); formula := 'ISNONTEXT(1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1, @@ -3683,11 +4351,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); - Myworksheet.WriteUTF8Text(Row, 2, 'TRUE'); + Myworksheet.WriteText(Row, 2, 'TRUE'); inc(Row); formula := 'ISNONTEXT("A")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('A', @@ -3696,11 +4367,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); + Myworksheet.WriteText(Row, 2, 'FALSE'); inc(Row); formula := 'ISNONTEXT(A1)'; // A1 contains a text - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('A1', @@ -3709,11 +4383,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); + Myworksheet.WriteText(Row, 2, 'FALSE'); inc(Row); formula := 'ISNONTEXT(B1)'; // B1 contains a number - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('B1', @@ -3722,12 +4399,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); - Myworksheet.WriteUTF8Text(Row, 2, 'TRUE'); + Myworksheet.WriteText(Row, 2, 'TRUE'); // IsNumber inc(Row); formula := 'ISNUMBER(B1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('B1', @@ -3736,12 +4416,15 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); - Myworksheet.WriteUTF8Text(Row, 2, 'TRUE'); + Myworksheet.WriteText(Row, 2, 'TRUE'); // IsRef inc(Row); formula := 'ISREF(1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1, @@ -3750,11 +4433,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); + Myworksheet.WriteText(Row, 2, 'FALSE'); inc(Row); formula := 'ISREF(A1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('A1', @@ -3763,11 +4449,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); + Myworksheet.WriteText(Row, 2, 'FALSE'); - inc(Row); +inc(Row); formula := 'ISREF(A1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellValue('A1', // we use a cell value here ! @@ -3779,12 +4468,15 @@ // a cell reference. But Excel seems to ignore this difference here and // accepts only a "true". sollValues[Row] := BooleanResult(true); - MyWorksheet.WriteUTF8Text(Row, 2, 'TRUE'); + MyWorksheet.WriteText(Row, 2, 'TRUE'); // IsText inc(Row); formula := 'ISTEXT(1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNNumber(1, @@ -3793,11 +4485,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); + Myworksheet.WriteText(Row, 2, 'FALSE'); inc(Row); formula := 'ISTEXT("A")'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNString('A', @@ -3806,11 +4501,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); - Myworksheet.WriteUTF8Text(Row, 2, 'TRUE'); + Myworksheet.WriteText(Row, 2, 'TRUE'); inc(Row); formula := 'ISTEXT(A1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('A1', @@ -3819,11 +4517,14 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(true); - Myworksheet.WriteUTF8Text(Row, 2, 'TRUE'); + Myworksheet.WriteText(Row, 2, 'TRUE'); inc(Row); formula := 'ISTEXT(B1)'; - MyWorksheet.WriteUTF8Text(Row, 0, formula); + {$IFDEF FORMULADEBUG} + DebugLn('Row ' + IntToStr(Row) + ': ' + formula); + {$ENDIF} + MyWorksheet.WriteText(Row, 0, formula); if UseRPNFormula then MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNCellRef('B1', @@ -3832,8 +4533,7 @@ MyWorksheet.WriteFormula(Row, 1, formula); SetLength(sollValues, Row+1); sollValues[Row] := BooleanResult(false); - Myworksheet.WriteUTF8Text(Row, 2, 'FALSE'); - + Myworksheet.WriteText(Row, 2, 'FALSE'); {------------------------------------------------------------------------------} { Error cases } @@ -3841,7 +4541,7 @@ {$IFDEF ENABLE_DEFECTIVE_FORMULAS } // Using less parameters than specified inc(Row); - MyWorksheet.WriteUTF8Text(Row, 0, 'IF(true,1)'); + MyWorksheet.WriteText(Row, 0, 'IF(true,1)'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, RPNNumber(1.0, @@ -3851,7 +4551,7 @@ // Using more parameters than specified inc(Row); - MyWorksheet.WriteUTF8Text(Row, 0, 'IF(true,1,"A")'); + MyWorksheet.WriteText(Row, 0, 'IF(true,1,"A")'); MyWorksheet.WriteRPNFormula(Row, 1, CreateRPNFormula( RPNBool(true, RPNNumber(1.0,