You've already forked lazarus-ccr
fpspreadsheet: Read zoom factor from BIFF8 and BIFF5 files, and write it back
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5225 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user