diff --git a/components/fpspreadsheet/fpspreadsheetgrid.pas b/components/fpspreadsheet/fpspreadsheetgrid.pas index 9d7b49feb..2ac8ca45f 100644 --- a/components/fpspreadsheet/fpspreadsheetgrid.pas +++ b/components/fpspreadsheet/fpspreadsheetgrid.pas @@ -3933,7 +3933,7 @@ end; procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string; AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer); begin - ZoomFactor := 1.0; +// ZoomFactor := 1.0; GetWorkbookSource.LoadFromSpreadsheetFile(AFileName, AFormat, AWorksheetIndex); end; @@ -3952,7 +3952,7 @@ end; procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string; AFormatID: TsSpreadFormatID = sfidUnknown; AWorksheetIndex: Integer = -1); begin - ZoomFactor := 1.0; +// ZoomFactor := 1.0; GetWorkbookSource.LoadFromSpreadsheetFile(AFileName, AFormatID, AWorksheetIndex); end; @@ -3969,7 +3969,7 @@ end; procedure TsCustomWorksheetGrid.LoadSheetFromSpreadsheetFile(AFileName: String; AWorksheetIndex: Integer = -1; AFormatID: TsSpreadFormatID = sfidUnknown); begin - ZoomFactor := 1.0; +// ZoomFactor := 1.0; GetWorkbookSource.LoadFromSpreadsheetFile(AFilename, AFormatID, AWorksheetIndex); end; @@ -3986,7 +3986,7 @@ end; procedure TsCustomWorksheetGrid.LoadFromWorkbook(AWorkbook: TsWorkbook; AWorksheetIndex: Integer = -1); begin - ZoomFactor := 1.0; +// ZoomFactor := 1.0; GetWorkbookSource.LoadFromWorkbook(AWorkbook, AWorksheetIndex); Invalidate; end; diff --git a/components/fpspreadsheet/xlsbiff5.pas b/components/fpspreadsheet/xlsbiff5.pas index 9c52a4450..6b6079fed 100755 --- a/components/fpspreadsheet/xlsbiff5.pas +++ b/components/fpspreadsheet/xlsbiff5.pas @@ -536,6 +536,7 @@ begin INT_EXCEL_ID_SHEETPR : ReadSHEETPR(AStream); INT_EXCEL_ID_STANDARDWIDTH : ReadStandardWidth(AStream, FWorksheet); INT_EXCEL_ID_TOPMARGIN : ReadMargin(AStream, 2); + INT_EXCEL_ID_SCL : ReadSCLRecord(AStream); INT_EXCEL_ID_STRING : ReadStringRecord(AStream); INT_EXCEL_ID_VCENTER : ReadVCENTER(AStream); INT_EXCEL_ID_WINDOW2 : ReadWindow2(AStream); @@ -1161,6 +1162,7 @@ begin WriteColInfos(AStream, FWorksheet); WriteDimensions(AStream, FWorksheet); WriteWindow2(AStream, FWorksheet); + WriteSCLRecord(AStream, FWorksheet); WritePane(AStream, FWorksheet, true, pane); // true for "is BIFF5 or BIFF8" WriteSelection(AStream, FWorksheet, pane); //WriteRows(AStream, sheet); diff --git a/components/fpspreadsheet/xlsbiff8.pas b/components/fpspreadsheet/xlsbiff8.pas index fde8922cf..df739ee44 100755 --- a/components/fpspreadsheet/xlsbiff8.pas +++ b/components/fpspreadsheet/xlsbiff8.pas @@ -886,6 +886,7 @@ begin // This record replaces the record INTEGER written in BIFF2. INT_EXCEL_ID_RK : ReadRKValue(AStream); + INT_EXCEL_ID_SCL : ReadSCLRecord(AStream); INT_EXCEL_ID_SELECTION : ReadSELECTION(AStream); INT_EXCEL_ID_SHAREDFMLA : ReadSharedFormula(AStream); INT_EXCEL_ID_SHEETPR : ReadSHEETPR(AStream); @@ -2159,6 +2160,7 @@ begin // View settings block WriteWindow2(AStream, FWorksheet); + WriteSCLRecord(AStream, FWorksheet); WritePane(AStream, FWorksheet, isBIFF8, pane); WriteSelection(AStream, FWorksheet, pane); WriteHyperlinks(AStream, FWorksheet); diff --git a/components/fpspreadsheet/xlscommon.pas b/components/fpspreadsheet/xlscommon.pas index a3a27b490..e4852d89f 100644 --- a/components/fpspreadsheet/xlscommon.pas +++ b/components/fpspreadsheet/xlscommon.pas @@ -64,6 +64,7 @@ const INT_EXCEL_ID_STYLE = $0293; // does not exist in BIFF2 { RECORD IDs which did not change across version 4-8 } + INT_EXCEL_ID_SCL = $00A0; // does not exist before BIFF4 INT_EXCEL_ID_PAGESETUP = $00A1; // does not exist before BIFF4 INT_EXCEL_ID_FORMAT = $041E; // BIFF2-3: $001E @@ -466,6 +467,7 @@ type out ARpnFormula: TsRPNFormula; ACell: PCell = nil; ASharedFormulaBase: PCell = nil): Boolean; overload; function ReadRPNTokenArraySize(AStream: TStream): word; virtual; + procedure ReadSCLRecord(AStream: TStream); procedure ReadSELECTION(AStream: TStream); procedure ReadSharedFormula(AStream: TStream); procedure ReadSHEETPR(AStream: TStream); @@ -589,6 +591,8 @@ type AFormula: TsRPNFormula; UseRelAddr, IsSupported: Boolean; var RPNLength: Word); procedure WriteRPNTokenArraySize(AStream: TStream; ASize: Word); virtual; + procedure WriteSCLRecord(AStream: TStream; ASheet: TsWorksheet); + // Writes out a SELECTION record procedure WriteSELECTION(AStream: TStream; ASheet: TsWorksheet; APane: Byte); procedure WriteSelections(AStream: TStream; ASheet: TsWorksheet); @@ -2582,6 +2586,18 @@ begin Result := WordLEToN(AStream.ReadWord); end; +{@@ ---------------------------------------------------------------------------- + Reads the SCL record, This is the magnification factor of the current view +-------------------------------------------------------------------------------} +procedure TsSpreadBIFFReader.ReadSCLRecord(AStream: TStream); +var + num, denom: Word; +begin + num := WordLEToN(AStream.ReadWord); + denom := WOrdLEToN(AStream.ReadWord); + FWorksheet.ZoomFactor := num/denom; +end; + {@@ ---------------------------------------------------------------------------- Reads a SELECTION record containing the currently selected cell Valid for BIFF2-BIFF8. @@ -4339,6 +4355,26 @@ begin end; end; +{@@ ---------------------------------------------------------------------------- + Writes the SCL record - this is the current magnification factor of the sheet +-------------------------------------------------------------------------------} +procedure TsSpreadBIFFWriter.WriteSCLRecord(AStream: TStream; + ASheet: TsWorksheet); +var + num, denom: Word; +begin + { BIFF record header } + WriteBIFFHeader(AStream, INT_EXCEL_ID_SCL, 4); + + denom := 100; + num := round(ASheet.ZoomFactor * denom); + + { Numerator } + AStream.WriteWord(WordToLE(num)); + { Denominator } + AStream.WriteWord(WordToLE(denom)); +end; + {@@ ---------------------------------------------------------------------------- Writes an Excel 2-8 SELECTION record Writes just reasonable default values