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;