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;
|
procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string;
|
||||||
AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer);
|
AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer);
|
||||||
begin
|
begin
|
||||||
ZoomFactor := 1.0;
|
// ZoomFactor := 1.0;
|
||||||
GetWorkbookSource.LoadFromSpreadsheetFile(AFileName, AFormat, AWorksheetIndex);
|
GetWorkbookSource.LoadFromSpreadsheetFile(AFileName, AFormat, AWorksheetIndex);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -3952,7 +3952,7 @@ end;
|
|||||||
procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string;
|
procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string;
|
||||||
AFormatID: TsSpreadFormatID = sfidUnknown; AWorksheetIndex: Integer = -1);
|
AFormatID: TsSpreadFormatID = sfidUnknown; AWorksheetIndex: Integer = -1);
|
||||||
begin
|
begin
|
||||||
ZoomFactor := 1.0;
|
// ZoomFactor := 1.0;
|
||||||
GetWorkbookSource.LoadFromSpreadsheetFile(AFileName, AFormatID, AWorksheetIndex);
|
GetWorkbookSource.LoadFromSpreadsheetFile(AFileName, AFormatID, AWorksheetIndex);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -3969,7 +3969,7 @@ end;
|
|||||||
procedure TsCustomWorksheetGrid.LoadSheetFromSpreadsheetFile(AFileName: String;
|
procedure TsCustomWorksheetGrid.LoadSheetFromSpreadsheetFile(AFileName: String;
|
||||||
AWorksheetIndex: Integer = -1; AFormatID: TsSpreadFormatID = sfidUnknown);
|
AWorksheetIndex: Integer = -1; AFormatID: TsSpreadFormatID = sfidUnknown);
|
||||||
begin
|
begin
|
||||||
ZoomFactor := 1.0;
|
// ZoomFactor := 1.0;
|
||||||
GetWorkbookSource.LoadFromSpreadsheetFile(AFilename, AFormatID, AWorksheetIndex);
|
GetWorkbookSource.LoadFromSpreadsheetFile(AFilename, AFormatID, AWorksheetIndex);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -3986,7 +3986,7 @@ end;
|
|||||||
procedure TsCustomWorksheetGrid.LoadFromWorkbook(AWorkbook: TsWorkbook;
|
procedure TsCustomWorksheetGrid.LoadFromWorkbook(AWorkbook: TsWorkbook;
|
||||||
AWorksheetIndex: Integer = -1);
|
AWorksheetIndex: Integer = -1);
|
||||||
begin
|
begin
|
||||||
ZoomFactor := 1.0;
|
// ZoomFactor := 1.0;
|
||||||
GetWorkbookSource.LoadFromWorkbook(AWorkbook, AWorksheetIndex);
|
GetWorkbookSource.LoadFromWorkbook(AWorkbook, AWorksheetIndex);
|
||||||
Invalidate;
|
Invalidate;
|
||||||
end;
|
end;
|
||||||
|
@ -536,6 +536,7 @@ begin
|
|||||||
INT_EXCEL_ID_SHEETPR : ReadSHEETPR(AStream);
|
INT_EXCEL_ID_SHEETPR : ReadSHEETPR(AStream);
|
||||||
INT_EXCEL_ID_STANDARDWIDTH : ReadStandardWidth(AStream, FWorksheet);
|
INT_EXCEL_ID_STANDARDWIDTH : ReadStandardWidth(AStream, FWorksheet);
|
||||||
INT_EXCEL_ID_TOPMARGIN : ReadMargin(AStream, 2);
|
INT_EXCEL_ID_TOPMARGIN : ReadMargin(AStream, 2);
|
||||||
|
INT_EXCEL_ID_SCL : ReadSCLRecord(AStream);
|
||||||
INT_EXCEL_ID_STRING : ReadStringRecord(AStream);
|
INT_EXCEL_ID_STRING : ReadStringRecord(AStream);
|
||||||
INT_EXCEL_ID_VCENTER : ReadVCENTER(AStream);
|
INT_EXCEL_ID_VCENTER : ReadVCENTER(AStream);
|
||||||
INT_EXCEL_ID_WINDOW2 : ReadWindow2(AStream);
|
INT_EXCEL_ID_WINDOW2 : ReadWindow2(AStream);
|
||||||
@ -1161,6 +1162,7 @@ begin
|
|||||||
WriteColInfos(AStream, FWorksheet);
|
WriteColInfos(AStream, FWorksheet);
|
||||||
WriteDimensions(AStream, FWorksheet);
|
WriteDimensions(AStream, FWorksheet);
|
||||||
WriteWindow2(AStream, FWorksheet);
|
WriteWindow2(AStream, FWorksheet);
|
||||||
|
WriteSCLRecord(AStream, FWorksheet);
|
||||||
WritePane(AStream, FWorksheet, true, pane); // true for "is BIFF5 or BIFF8"
|
WritePane(AStream, FWorksheet, true, pane); // true for "is BIFF5 or BIFF8"
|
||||||
WriteSelection(AStream, FWorksheet, pane);
|
WriteSelection(AStream, FWorksheet, pane);
|
||||||
//WriteRows(AStream, sheet);
|
//WriteRows(AStream, sheet);
|
||||||
|
@ -886,6 +886,7 @@ begin
|
|||||||
// This record replaces the record INTEGER written in BIFF2.
|
// This record replaces the record INTEGER written in BIFF2.
|
||||||
INT_EXCEL_ID_RK : ReadRKValue(AStream);
|
INT_EXCEL_ID_RK : ReadRKValue(AStream);
|
||||||
|
|
||||||
|
INT_EXCEL_ID_SCL : ReadSCLRecord(AStream);
|
||||||
INT_EXCEL_ID_SELECTION : ReadSELECTION(AStream);
|
INT_EXCEL_ID_SELECTION : ReadSELECTION(AStream);
|
||||||
INT_EXCEL_ID_SHAREDFMLA : ReadSharedFormula(AStream);
|
INT_EXCEL_ID_SHAREDFMLA : ReadSharedFormula(AStream);
|
||||||
INT_EXCEL_ID_SHEETPR : ReadSHEETPR(AStream);
|
INT_EXCEL_ID_SHEETPR : ReadSHEETPR(AStream);
|
||||||
@ -2159,6 +2160,7 @@ begin
|
|||||||
|
|
||||||
// View settings block
|
// View settings block
|
||||||
WriteWindow2(AStream, FWorksheet);
|
WriteWindow2(AStream, FWorksheet);
|
||||||
|
WriteSCLRecord(AStream, FWorksheet);
|
||||||
WritePane(AStream, FWorksheet, isBIFF8, pane);
|
WritePane(AStream, FWorksheet, isBIFF8, pane);
|
||||||
WriteSelection(AStream, FWorksheet, pane);
|
WriteSelection(AStream, FWorksheet, pane);
|
||||||
WriteHyperlinks(AStream, FWorksheet);
|
WriteHyperlinks(AStream, FWorksheet);
|
||||||
|
@ -64,6 +64,7 @@ const
|
|||||||
INT_EXCEL_ID_STYLE = $0293; // does not exist in BIFF2
|
INT_EXCEL_ID_STYLE = $0293; // does not exist in BIFF2
|
||||||
|
|
||||||
{ RECORD IDs which did not change across version 4-8 }
|
{ 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_PAGESETUP = $00A1; // does not exist before BIFF4
|
||||||
INT_EXCEL_ID_FORMAT = $041E; // BIFF2-3: $001E
|
INT_EXCEL_ID_FORMAT = $041E; // BIFF2-3: $001E
|
||||||
|
|
||||||
@ -466,6 +467,7 @@ type
|
|||||||
out ARpnFormula: TsRPNFormula; ACell: PCell = nil;
|
out ARpnFormula: TsRPNFormula; ACell: PCell = nil;
|
||||||
ASharedFormulaBase: PCell = nil): Boolean; overload;
|
ASharedFormulaBase: PCell = nil): Boolean; overload;
|
||||||
function ReadRPNTokenArraySize(AStream: TStream): word; virtual;
|
function ReadRPNTokenArraySize(AStream: TStream): word; virtual;
|
||||||
|
procedure ReadSCLRecord(AStream: TStream);
|
||||||
procedure ReadSELECTION(AStream: TStream);
|
procedure ReadSELECTION(AStream: TStream);
|
||||||
procedure ReadSharedFormula(AStream: TStream);
|
procedure ReadSharedFormula(AStream: TStream);
|
||||||
procedure ReadSHEETPR(AStream: TStream);
|
procedure ReadSHEETPR(AStream: TStream);
|
||||||
@ -589,6 +591,8 @@ type
|
|||||||
AFormula: TsRPNFormula; UseRelAddr, IsSupported: Boolean; var RPNLength: Word);
|
AFormula: TsRPNFormula; UseRelAddr, IsSupported: Boolean; var RPNLength: Word);
|
||||||
procedure WriteRPNTokenArraySize(AStream: TStream; ASize: Word); virtual;
|
procedure WriteRPNTokenArraySize(AStream: TStream; ASize: Word); virtual;
|
||||||
|
|
||||||
|
procedure WriteSCLRecord(AStream: TStream; ASheet: TsWorksheet);
|
||||||
|
|
||||||
// Writes out a SELECTION record
|
// Writes out a SELECTION record
|
||||||
procedure WriteSELECTION(AStream: TStream; ASheet: TsWorksheet; APane: Byte);
|
procedure WriteSELECTION(AStream: TStream; ASheet: TsWorksheet; APane: Byte);
|
||||||
procedure WriteSelections(AStream: TStream; ASheet: TsWorksheet);
|
procedure WriteSelections(AStream: TStream; ASheet: TsWorksheet);
|
||||||
@ -2582,6 +2586,18 @@ begin
|
|||||||
Result := WordLEToN(AStream.ReadWord);
|
Result := WordLEToN(AStream.ReadWord);
|
||||||
end;
|
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
|
Reads a SELECTION record containing the currently selected cell
|
||||||
Valid for BIFF2-BIFF8.
|
Valid for BIFF2-BIFF8.
|
||||||
@ -4339,6 +4355,26 @@ begin
|
|||||||
end;
|
end;
|
||||||
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 an Excel 2-8 SELECTION record
|
||||||
Writes just reasonable default values
|
Writes just reasonable default values
|
||||||
|
Reference in New Issue
Block a user