diff --git a/components/fpspreadsheet/fpolestorage.pas b/components/fpspreadsheet/fpolestorage.pas
index 920507416..b94923b34 100755
--- a/components/fpspreadsheet/fpolestorage.pas
+++ b/components/fpspreadsheet/fpolestorage.pas
@@ -70,7 +70,7 @@ type
{ Fields for both }
FOLEDocument: TOLEDocument;
FUseShortSectors: Boolean;
- FNumSATSectors, FNumStreamSectors, FNumTotalSectors: Cardinal;
+ FNumSATSectors, FNumStreamSectors: Cardinal;
FNumStreamShortSectors: Cardinal;
{ Writer Helper routines }
procedure WriteOLEHeader(AStream: TStream);
@@ -84,19 +84,19 @@ type
procedure WriteUserStream(ADest, ASource: TStream);
{ Reader helper routines }
procedure ReadOLEHeader(AStream: TStream);
- procedure ReadSectorAllocationTable(AStream: TStream);
+ procedure ReadSectorAllocationTable({%H-}AStream: TStream);
procedure ReadDirectoryStream(AStream: TStream);
procedure ReadDirectoryEntry(AStream: TStream; out AName: widestring;
out EntryType, EntryColor: Byte; out AIsStorage: Boolean;
out AFirstSecID, AStreamSize: Cardinal);
- procedure ReadShortSectorAllocationTable(AStream: TStream);
+ procedure ReadShortSectorAllocationTable({%H-}AStream: TStream);
procedure ReadUserStream(ADest, ASource: TStream);
public
constructor Create;
destructor Destroy; override;
procedure WriteOLEFile(AFileName: string; AOLEDocument: TOLEDocument;
const AOverwriteExisting: Boolean = False; const AStreamName: UTF8String='Book');
- procedure ReadOLEFile(AFileName: string; AOLEDocument: TOLEDocument; const AStreamName: UTF8String='Book');
+ procedure ReadOLEFile(AFileName: string; AOLEDocument: TOLEDocument; const {%H-}AStreamName: UTF8String='Book');
procedure FreeOLEDocumentData(AOLEDocument: TOLEDocument);
end;
@@ -104,7 +104,7 @@ implementation
const
INT_OLE_SECTOR_SIZE = 512; // in bytes
- INT_OLE_SECTOR_DWORD_SIZE = 512 div 4; // in dwords
+ {%H-}INT_OLE_SECTOR_DWORD_SIZE = 512 div 4; // in dwords
INT_OLE_SHORT_SECTOR_SIZE = 64; // in bytes
INT_OLE_MIN_SIZE_FOR_STANDARD_STREAMS = 4096;
@@ -492,7 +492,7 @@ end;
procedure TOLEStorage.ReadOLEHeader(AStream: TStream);
var
- BaseAddr: Int64;
+ {%H-}BaseAddr: Int64;
begin
BaseAddr := AStream.Position;
@@ -589,6 +589,7 @@ begin
00000400H 52 00 6F 00 6F 00 74 00 20 00 45 00 6E 00 74 00 }
+ EntryName[0] := #0; // silence the compilere...
AStream.ReadBuffer(EntryName, 64);
AName := EntryName;
@@ -694,7 +695,7 @@ procedure TOLEStorage.WriteOLEFile(AFileName: string;
const AStreamName: UTF8String);
var
cbWritten: Cardinal;
- lMode: Word;
+ {%H-}lMode: Word;
{$IFNDEF FPOLESTORAGE_USE_COM}
AFileStream: TStream;
{$ENDIF}
diff --git a/components/fpspreadsheet/fpsexprparser.pas b/components/fpspreadsheet/fpsexprparser.pas
index 4c6b77a46..6a36ae134 100644
--- a/components/fpspreadsheet/fpsexprparser.pas
+++ b/components/fpspreadsheet/fpsexprparser.pas
@@ -3672,7 +3672,7 @@ end;
procedure TsFunctionExprNode.Check;
var
i: Integer;
- rta, // parameter types passed to the function
+ rta, // Parameter types passed to the function
rtp: TsResultType; // Parameter types expected from the parameter symbol
lastrtp: TsResultType;
begin
@@ -3700,7 +3700,7 @@ begin
if rta = rtCell then
Continue;
-
+ (*
if (rtp <> rta) and not (rta in [rtCellRange, rtError, rtEmpty]) then
begin
// Automatically convert integers to floats in functions that return a float
@@ -3714,6 +3714,7 @@ begin
exit;
RaiseParserError(SErrInvalidArgumentType, [i+1, ResultTypeName(rtp), ResultTypeName(rta)])
end;
+ *)
end;
end;
diff --git a/components/fpspreadsheet/fpspreadsheet.pas b/components/fpspreadsheet/fpspreadsheet.pas
index 73a5e8a94..9f9d30e9a 100755
--- a/components/fpspreadsheet/fpspreadsheet.pas
+++ b/components/fpspreadsheet/fpspreadsheet.pas
@@ -7552,7 +7552,11 @@ begin
begin
Workbook.UpdateCaches;
AFirstRow := AWorksheet.GetFirstRowIndex;
+ if AFirstRow = Cardinal(-1) then
+ AFirstRow := 0; // this happens if the sheet is empty and does not contain row records
AFirstCol := AWorksheet.GetFirstColIndex;
+ if AFirstCol = Cardinal(-1) then
+ AFirstCol := 0; // this happens if the sheet is empty and does not contain col records
ALastRow := AWorksheet.GetLastRowIndex;
ALastCol := AWorksheet.GetLastColIndex;
end;
diff --git a/components/fpspreadsheet/tests/spreadtestgui.lpi b/components/fpspreadsheet/tests/spreadtestgui.lpi
index 3f1596b13..8b11c02d0 100644
--- a/components/fpspreadsheet/tests/spreadtestgui.lpi
+++ b/components/fpspreadsheet/tests/spreadtestgui.lpi
@@ -48,6 +48,7 @@
+
@@ -56,7 +57,6 @@
-
@@ -71,11 +71,11 @@
+
-
@@ -96,7 +96,6 @@
-
@@ -106,12 +105,10 @@
-
-
diff --git a/components/fpspreadsheet/tests/testcases_calcrpnformula.inc b/components/fpspreadsheet/tests/testcases_calcrpnformula.inc
index 54384e944..8532e5727 100644
--- a/components/fpspreadsheet/tests/testcases_calcrpnformula.inc
+++ b/components/fpspreadsheet/tests/testcases_calcrpnformula.inc
@@ -600,8 +600,8 @@
RPNFunc(fekGreater, nil)))))
else
MyWorksheet.WriteFormula(Row, 1, formula);
- Myworksheet.WriteBoolvalue(Row, 2, SollValues[Row].ResBoolean);
SetLength(sollValues, Row+1);
+ Myworksheet.WriteBoolvalue(Row, 2, SollValues[Row].ResBoolean);
Myworksheet.WriteUTF8Text(Row, 2, BoolToStr(SollValues[Row].ResBoolean, 'TRUE','FALSE'));
inc(Row);
diff --git a/components/fpspreadsheet/xlsbiff2.pas b/components/fpspreadsheet/xlsbiff2.pas
index 91d68c396..2bc1cb67b 100755
--- a/components/fpspreadsheet/xlsbiff2.pas
+++ b/components/fpspreadsheet/xlsbiff2.pas
@@ -1678,7 +1678,8 @@ end;
procedure TsSpreadBIFF2Writer.WriteRPNTokenArraySize(AStream: TStream;
ASize: Word);
begin
- AStream.WriteByte(Lo(ASize));
+ AStream.WriteByte(ASize);
+// AStream.WriteByte(Lo(ASize));
end;
{ Is intended to write the token array of a shared formula stored in ACell.
diff --git a/components/fpspreadsheet/xlsbiff8.pas b/components/fpspreadsheet/xlsbiff8.pas
index 279b5729d..ce4041000 100755
--- a/components/fpspreadsheet/xlsbiff8.pas
+++ b/components/fpspreadsheet/xlsbiff8.pas
@@ -1001,10 +1001,16 @@ begin
// Loop writing the merged cell ranges
while (n > 0) and (i < Length(rngList)) do begin
+ AStream.WriteWord(WordToLE(rngList[i].Row1));
+ AStream.WriteWord(WordToLE(rngList[i].Row2));
+ AStream.WriteWord(WordToLE(rngList[i].Col1));
+ AStream.WriteWord(WordToLE(rngList[i].Col2));
+ (*
AStream.WriteWord(WordToLE({%H-}Lo(rngList[i].Row1)));
AStream.WriteWord(WordToLE({%H-}Lo(rngList[i].Row2)));
AStream.WriteWord(WordToLE({%H-}Lo(rngList[i].Col1)));
AStream.WriteWord(WordToLE({%H-}Lo(rngList[i].Col2)));
+ *)
inc(i);
dec(n);
end;
diff --git a/components/fpspreadsheet/xlscommon.pas b/components/fpspreadsheet/xlscommon.pas
index 2d497a749..e9b3fad18 100644
--- a/components/fpspreadsheet/xlscommon.pas
+++ b/components/fpspreadsheet/xlscommon.pas
@@ -2811,19 +2811,27 @@ end;
No need for BIFF2 which does not support shared formulas. }
procedure TsSpreadBIFFWriter.WriteSharedFormulaRange(AStream: TStream;
AFirstRow, AFirstCol, ALastRow, ALastCol: Cardinal);
+{
var
c: Word;
+}
begin
// Index to first row
AStream.WriteWord(WordToLE(AFirstRow));
// Index to last row
AStream.WriteWord(WordToLE(ALastRow));
// Index to first column
+ AStream.WriteByte(AFirstCol);
+ (*
c := {%H-}Lo(AFirstCol);
AStream.WriteByte(Lo(c));
+ *)
// Index to last rcolumn
+ AStream.WriteByte(ALastCol);
+ (*
c := {%H-}Lo(ALastCol);
AStream.WriteByte(Lo(c));
+ *)
end;