You've already forked lazarus-ccr
fpspreadsheet: Read/write name of active worksheet (biff5, biff8, xlsx, ods, visual controls)
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4240 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -89,6 +89,7 @@ type
|
|||||||
FPageLayoutList: TFPList;
|
FPageLayoutList: TFPList;
|
||||||
FMasterPageList: TFPList;
|
FMasterPageList: TFPList;
|
||||||
FHeaderFooterFontList: TObjectList;
|
FHeaderFooterFontList: TObjectList;
|
||||||
|
FActiveSheet: String;
|
||||||
FDateMode: TDateMode;
|
FDateMode: TDateMode;
|
||||||
// Applies internally stored column widths to current worksheet
|
// Applies internally stored column widths to current worksheet
|
||||||
procedure ApplyColWidths;
|
procedure ApplyColWidths;
|
||||||
@ -1865,6 +1866,7 @@ var
|
|||||||
OfficeSettingsNode: TDOMNode;
|
OfficeSettingsNode: TDOMNode;
|
||||||
nodename: String;
|
nodename: String;
|
||||||
pageLayout: PsPageLayout;
|
pageLayout: PsPageLayout;
|
||||||
|
sheet: TsWorksheet;
|
||||||
begin
|
begin
|
||||||
//unzip files into AFileName path
|
//unzip files into AFileName path
|
||||||
FilePath := GetTempDir(false);
|
FilePath := GetTempDir(false);
|
||||||
@ -1958,6 +1960,12 @@ begin
|
|||||||
ReadSettings(OfficeSettingsNode);
|
ReadSettings(OfficeSettingsNode);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
// Active sheet
|
||||||
|
if FActiveSheet <> '' then
|
||||||
|
sheet := FWorkbook.GetWorksheetByName(FActiveSheet) else
|
||||||
|
sheet := FWorkbook.GetWorksheetByIndex(0);
|
||||||
|
FWorkbook.SelectWorksheet(sheet);
|
||||||
|
|
||||||
finally
|
finally
|
||||||
if Assigned(Doc) then Doc.Free;
|
if Assigned(Doc) then Doc.Free;
|
||||||
end;
|
end;
|
||||||
@ -1966,32 +1974,14 @@ end;
|
|||||||
procedure TsSpreadOpenDocReader.ReadFromStream(AStream: TStream);
|
procedure TsSpreadOpenDocReader.ReadFromStream(AStream: TStream);
|
||||||
var
|
var
|
||||||
Doc : TXMLDocument;
|
Doc : TXMLDocument;
|
||||||
// FilePath : string;
|
|
||||||
// UnZip : TUnZipper;
|
|
||||||
// FileList : TStringList;
|
|
||||||
BodyNode, SpreadSheetNode, TableNode: TDOMNode;
|
BodyNode, SpreadSheetNode, TableNode: TDOMNode;
|
||||||
StylesNode: TDOMNode;
|
StylesNode: TDOMNode;
|
||||||
OfficeSettingsNode: TDOMNode;
|
OfficeSettingsNode: TDOMNode;
|
||||||
nodename: String;
|
nodename: String;
|
||||||
pageLayout: PsPageLayout;
|
pageLayout: PsPageLayout;
|
||||||
XMLStream: TStream;
|
XMLStream: TStream;
|
||||||
|
sheet: TsWorksheet;
|
||||||
begin
|
begin
|
||||||
{
|
|
||||||
//unzip files into AFileName path
|
|
||||||
FilePath := GetTempDir(false);
|
|
||||||
UnZip := TUnZipper.Create;
|
|
||||||
FileList := TStringList.Create;
|
|
||||||
try
|
|
||||||
FileList.Add('styles.xml');
|
|
||||||
FileList.Add('content.xml');
|
|
||||||
FileList.Add('settings.xml');
|
|
||||||
UnZip.OutputPath := FilePath;
|
|
||||||
Unzip.UnZipFiles(AFileName,FileList);
|
|
||||||
finally
|
|
||||||
FreeAndNil(FileList);
|
|
||||||
FreeAndNil(UnZip);
|
|
||||||
end; //try
|
|
||||||
}
|
|
||||||
Doc := nil;
|
Doc := nil;
|
||||||
try
|
try
|
||||||
// process the styles.xml file
|
// process the styles.xml file
|
||||||
@ -2079,17 +2069,17 @@ begin
|
|||||||
XMLStream.Free;
|
XMLStream.Free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
// Active sheet
|
||||||
|
if FActiveSheet <> '' then
|
||||||
|
sheet := FWorkbook.GetWorksheetByName(FActiveSheet) else
|
||||||
|
sheet := FWorkbook.GetWorksheetByIndex(0);
|
||||||
|
FWorkbook.SelectWorksheet(sheet);
|
||||||
|
|
||||||
finally
|
finally
|
||||||
FreeAndNil(Doc);
|
FreeAndNil(Doc);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
{
|
|
||||||
begin
|
|
||||||
Unused(AStream);
|
|
||||||
raise Exception.Create('[TsSpreadOpenDocReader.ReadFromStream] '+
|
|
||||||
'Method not implemented. Use "ReadFromFile" instead.');
|
|
||||||
end;
|
|
||||||
}
|
|
||||||
procedure TsSpreadOpenDocReader.ReadHeaderFooterFont(ANode: TDOMNode;
|
procedure TsSpreadOpenDocReader.ReadHeaderFooterFont(ANode: TDOMNode;
|
||||||
var AFontName: String; var AFontSize: Double;
|
var AFontName: String; var AFontSize: Double;
|
||||||
var AFontStyle: TsHeaderFooterFontStyles; var AFontColor: TsColor);
|
var AFontStyle: TsHeaderFooterFontStyles; var AFontColor: TsColor);
|
||||||
@ -2997,6 +2987,11 @@ begin
|
|||||||
if (nodeName = 'config:config-item') then
|
if (nodeName = 'config:config-item') then
|
||||||
begin
|
begin
|
||||||
cfgName := lowercase(GetAttrValue(cfgEntryItemNode, 'config:name'));
|
cfgName := lowercase(GetAttrValue(cfgEntryItemNode, 'config:name'));
|
||||||
|
if cfgName = 'activetable' then
|
||||||
|
begin
|
||||||
|
cfgValue := GetNodeValue(cfgEntryItemNode);
|
||||||
|
FActiveSheet := cfgValue;
|
||||||
|
end else
|
||||||
if cfgName = 'showgrid' then
|
if cfgName = 'showgrid' then
|
||||||
begin
|
begin
|
||||||
cfgValue := GetNodeValue(cfgEntryItemNode);
|
cfgValue := GetNodeValue(cfgEntryItemNode);
|
||||||
@ -3734,15 +3729,18 @@ var
|
|||||||
i: Integer;
|
i: Integer;
|
||||||
showGrid, showHeaders: Boolean;
|
showGrid, showHeaders: Boolean;
|
||||||
sheet: TsWorksheet;
|
sheet: TsWorksheet;
|
||||||
|
actSheet: String;
|
||||||
begin
|
begin
|
||||||
// Open/LibreOffice allow to change showGrid and showHeaders only globally.
|
// Open/LibreOffice allow to change showGrid and showHeaders only globally.
|
||||||
// As a compromise, we check whether there is at least one page with these
|
// As a compromise, we check whether there is at least one page with these
|
||||||
// settings off. Then we assume it to be valid also for the other sheets.
|
// settings off. Then we assume it to be valid also for the other sheets.
|
||||||
showGrid := true;
|
showGrid := true;
|
||||||
showHeaders := true;
|
showHeaders := true;
|
||||||
|
actSheet := 'Table1';
|
||||||
for i:=0 to Workbook.GetWorksheetCount-1 do
|
for i:=0 to Workbook.GetWorksheetCount-1 do
|
||||||
begin
|
begin
|
||||||
sheet := Workbook.GetWorksheetByIndex(i);
|
sheet := Workbook.GetWorksheetByIndex(i);
|
||||||
|
if sheet = Workbook.ActiveWorksheet then actSheet := sheet.Name;
|
||||||
if not (soShowGridLines in sheet.Options) then showGrid := false;
|
if not (soShowGridLines in sheet.Options) then showGrid := false;
|
||||||
if not (soShowHeaders in sheet.Options) then showHeaders := false;
|
if not (soShowHeaders in sheet.Options) then showHeaders := false;
|
||||||
end;
|
end;
|
||||||
@ -3758,7 +3756,7 @@ begin
|
|||||||
'<config:config-item-set config:name="ooo:view-settings">' +
|
'<config:config-item-set config:name="ooo:view-settings">' +
|
||||||
'<config:config-item-map-indexed config:name="Views">' +
|
'<config:config-item-map-indexed config:name="Views">' +
|
||||||
'<config:config-item-map-entry>' +
|
'<config:config-item-map-entry>' +
|
||||||
'<config:config-item config:name="ActiveTable" config:type="string">Tabelle1</config:config-item>' +
|
'<config:config-item config:name="ActiveTable" config:type="string">'+actSheet+'</config:config-item>' +
|
||||||
'<config:config-item config:name="ZoomValue" config:type="int">100</config:config-item>' +
|
'<config:config-item config:name="ZoomValue" config:type="int">100</config:config-item>' +
|
||||||
'<config:config-item config:name="PageViewZoomValue" config:type="int">100</config:config-item>' +
|
'<config:config-item config:name="PageViewZoomValue" config:type="int">100</config:config-item>' +
|
||||||
'<config:config-item config:name="ShowPageBreakPreview" config:type="boolean">false</config:config-item>' +
|
'<config:config-item config:name="ShowPageBreakPreview" config:type="boolean">false</config:config-item>' +
|
||||||
|
@ -735,7 +735,7 @@ type
|
|||||||
procedure ClearErrorList;
|
procedure ClearErrorList;
|
||||||
|
|
||||||
{@@ Identifies the "active" worksheet (only for visual controls)}
|
{@@ Identifies the "active" worksheet (only for visual controls)}
|
||||||
property ActiveWorksheet: TsWorksheet read FActiveWorksheet;
|
property ActiveWorksheet: TsWorksheet read FActiveWorksheet write SelectWorksheet;
|
||||||
{@@ Retrieves error messages collected during reading/writing }
|
{@@ Retrieves error messages collected during reading/writing }
|
||||||
property ErrorMsg: String read GetErrorMsg;
|
property ErrorMsg: String read GetErrorMsg;
|
||||||
{@@ Filename of the saved workbook }
|
{@@ Filename of the saved workbook }
|
||||||
@ -7110,7 +7110,10 @@ begin
|
|||||||
if (AWorksheet <> nil) and (FWorksheets.IndexOf(AWorksheet) = -1) then
|
if (AWorksheet <> nil) and (FWorksheets.IndexOf(AWorksheet) = -1) then
|
||||||
raise Exception.Create('[TsWorkbook.SelectSheet] Worksheet does not belong to the workbook');
|
raise Exception.Create('[TsWorkbook.SelectSheet] Worksheet does not belong to the workbook');
|
||||||
FActiveWorksheet := AWorksheet;
|
FActiveWorksheet := AWorksheet;
|
||||||
if Assigned(FOnSelectWorksheet) then FOnSelectWorksheet(self, AWorksheet);
|
if FReadWriteFlag = rwfRead then
|
||||||
|
exit;
|
||||||
|
if Assigned(FOnSelectWorksheet) then
|
||||||
|
FOnSelectWorksheet(self, AWorksheet);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{@@ ----------------------------------------------------------------------------
|
{@@ ----------------------------------------------------------------------------
|
||||||
|
@ -76,7 +76,7 @@ type
|
|||||||
procedure CellSelectedHandler(Sender: TObject; ARow, ACol: Cardinal);
|
procedure CellSelectedHandler(Sender: TObject; ARow, ACol: Cardinal);
|
||||||
procedure InternalCreateNewWorkbook;
|
procedure InternalCreateNewWorkbook;
|
||||||
procedure InternalLoadFromFile(AFileName: string; AAutoDetect: Boolean;
|
procedure InternalLoadFromFile(AFileName: string; AAutoDetect: Boolean;
|
||||||
AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = 0);
|
AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = -1);
|
||||||
procedure SetFileName(const AFileName: TFileName);
|
procedure SetFileName(const AFileName: TFileName);
|
||||||
procedure SetOptions(AValue: TsWorkbookOptions);
|
procedure SetOptions(AValue: TsWorkbookOptions);
|
||||||
// procedure WorkbookChangedPaletteHandler(Sender: TObject);
|
// procedure WorkbookChangedPaletteHandler(Sender: TObject);
|
||||||
@ -105,9 +105,9 @@ type
|
|||||||
procedure CreateNewWorkbook;
|
procedure CreateNewWorkbook;
|
||||||
|
|
||||||
procedure LoadFromSpreadsheetFile(AFileName: string;
|
procedure LoadFromSpreadsheetFile(AFileName: string;
|
||||||
AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = 0); overload;
|
AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = -1); overload;
|
||||||
procedure LoadFromSpreadsheetFile(AFileName: string;
|
procedure LoadFromSpreadsheetFile(AFileName: string;
|
||||||
AWorksheetIndex: Integer = 0); overload;
|
AWorksheetIndex: Integer = -1); overload;
|
||||||
|
|
||||||
procedure SaveToSpreadsheetFile(AFileName: string;
|
procedure SaveToSpreadsheetFile(AFileName: string;
|
||||||
AOverwriteExisting: Boolean = true); overload;
|
AOverwriteExisting: Boolean = true); overload;
|
||||||
@ -835,7 +835,7 @@ end;
|
|||||||
@param AWorksheetIndex Index of the worksheet to be selected after loading.
|
@param AWorksheetIndex Index of the worksheet to be selected after loading.
|
||||||
-------------------------------------------------------------------------------}
|
-------------------------------------------------------------------------------}
|
||||||
procedure TsWorkbookSource.InternalLoadFromFile(AFileName: string;
|
procedure TsWorkbookSource.InternalLoadFromFile(AFileName: string;
|
||||||
AAutoDetect: Boolean; AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = 0);
|
AAutoDetect: Boolean; AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = -1);
|
||||||
begin
|
begin
|
||||||
// Create a new empty workbook
|
// Create a new empty workbook
|
||||||
InternalCreateNewWorkbook;
|
InternalCreateNewWorkbook;
|
||||||
@ -851,6 +851,12 @@ begin
|
|||||||
EnableControls;
|
EnableControls;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if AWorksheetIndex = -1 then
|
||||||
|
begin
|
||||||
|
if FWorkbook.ActiveWorksheet <> nil then
|
||||||
|
AWorksheetIndex := FWorkbook.GetWorksheetIndex(FWorkbook.ActiveWorksheet) else
|
||||||
|
AWorksheetIndex := 0;
|
||||||
|
end;
|
||||||
SelectWorksheet(FWorkbook.GetWorkSheetByIndex(AWorksheetIndex));
|
SelectWorksheet(FWorkbook.GetWorkSheetByIndex(AWorksheetIndex));
|
||||||
|
|
||||||
// If required, display loading error message
|
// If required, display loading error message
|
||||||
@ -879,9 +885,10 @@ end;
|
|||||||
@param AFilename Name of the spreadsheet file to be loaded
|
@param AFilename Name of the spreadsheet file to be loaded
|
||||||
@param AFormat Spreadsheet file format assumed for the file
|
@param AFormat Spreadsheet file format assumed for the file
|
||||||
@param AWorksheetIndex Index of the worksheet to be selected after loading.
|
@param AWorksheetIndex Index of the worksheet to be selected after loading.
|
||||||
|
(If empty then the active worksheet is loaded)
|
||||||
-------------------------------------------------------------------------------}
|
-------------------------------------------------------------------------------}
|
||||||
procedure TsWorkbookSource.LoadFromSpreadsheetFile(AFileName: string;
|
procedure TsWorkbookSource.LoadFromSpreadsheetFile(AFileName: string;
|
||||||
AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = 0);
|
AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = -1);
|
||||||
begin
|
begin
|
||||||
InternalLoadFromFile(AFileName, false, AFormat, AWorksheetIndex);
|
InternalLoadFromFile(AFileName, false, AFormat, AWorksheetIndex);
|
||||||
end;
|
end;
|
||||||
@ -895,9 +902,10 @@ end;
|
|||||||
|
|
||||||
@param AFilename Name of the spreadsheet file to be loaded
|
@param AFilename Name of the spreadsheet file to be loaded
|
||||||
@param AWorksheetIndex Index of the worksheet to be selected after loading.
|
@param AWorksheetIndex Index of the worksheet to be selected after loading.
|
||||||
|
(If empty then the active worksheet is loaded)
|
||||||
-------------------------------------------------------------------------------}
|
-------------------------------------------------------------------------------}
|
||||||
procedure TsWorkbookSource.LoadFromSpreadsheetFile(AFileName: string;
|
procedure TsWorkbookSource.LoadFromSpreadsheetFile(AFileName: string;
|
||||||
AWorksheetIndex: Integer = 0);
|
AWorksheetIndex: Integer = -1);
|
||||||
const
|
const
|
||||||
sfNotNeeded = sfExcel8;
|
sfNotNeeded = sfExcel8;
|
||||||
// The parameter AFormat if InternalLoadFromFile is not needed here,
|
// The parameter AFormat if InternalLoadFromFile is not needed here,
|
||||||
@ -924,6 +932,17 @@ var
|
|||||||
I: IsSpreadsheetControl;
|
I: IsSpreadsheetControl;
|
||||||
C: TComponent;
|
C: TComponent;
|
||||||
begin
|
begin
|
||||||
|
{
|
||||||
|
// Select worksheet in tab control first
|
||||||
|
if lniWorksheet in AChangedItems then
|
||||||
|
for j:=0 to FListeners.Count-1 do begin
|
||||||
|
C := TComponent(FListeners[j]);
|
||||||
|
if C is TsWorkbookTabControl then begin
|
||||||
|
C.GetInterface(GUID_SpreadsheetControl, I);
|
||||||
|
I.ListenerNotification(AChangedItems, AData);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
}
|
||||||
for j:=0 to FListeners.Count-1 do begin
|
for j:=0 to FListeners.Count-1 do begin
|
||||||
C := TComponent(FListeners[j]);
|
C := TComponent(FListeners[j]);
|
||||||
if C.GetInterface(GUID_SpreadsheetControl, I) then
|
if C.GetInterface(GUID_SpreadsheetControl, I) then
|
||||||
@ -1275,7 +1294,9 @@ procedure TsWorkbookSource.WorkbookOpenedHandler(Sender: TObject);
|
|||||||
begin
|
begin
|
||||||
Unused(Sender);
|
Unused(Sender);
|
||||||
NotifyListeners([lniWorkbook]);
|
NotifyListeners([lniWorkbook]);
|
||||||
SelectWorksheet(FWorkbook.GetFirstWorksheet);
|
if FWorkbook.ActiveWorksheet = nil then
|
||||||
|
SelectWorksheet(FWorkbook.GetFirstWorksheet) else
|
||||||
|
SelectWorksheet(FWorkbook.ActiveWorksheet);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{@@ ----------------------------------------------------------------------------
|
{@@ ----------------------------------------------------------------------------
|
||||||
@ -1478,9 +1499,16 @@ begin
|
|||||||
begin
|
begin
|
||||||
inc(FLockCount); // avoid WorkbookSelect message when adding each tab
|
inc(FLockCount); // avoid WorkbookSelect message when adding each tab
|
||||||
GetSheetList(Tabs);
|
GetSheetList(Tabs);
|
||||||
|
{
|
||||||
if (lniWorkbook in AChangedItems) then
|
if (lniWorkbook in AChangedItems) then
|
||||||
TabIndex := 0
|
TabIndex := 0
|
||||||
else
|
else
|
||||||
|
}
|
||||||
|
if (lniWorkbook in AChangedItems) and (Workbook <> nil) then
|
||||||
|
begin
|
||||||
|
i := Workbook.GetWorksheetIndex(Workbook.ActiveWorksheet);
|
||||||
|
if i > -1 then TabIndex := i else TabIndex := 0
|
||||||
|
end else
|
||||||
if (lniWorksheetAdd in AChangedItems) then
|
if (lniWorksheetAdd in AChangedItems) then
|
||||||
TabIndex := Tabs.Count-1
|
TabIndex := Tabs.Count-1
|
||||||
else
|
else
|
||||||
|
@ -237,9 +237,9 @@ type
|
|||||||
procedure InsertCol(AGridCol: Integer);
|
procedure InsertCol(AGridCol: Integer);
|
||||||
procedure InsertRow(AGridRow: Integer);
|
procedure InsertRow(AGridRow: Integer);
|
||||||
procedure LoadFromSpreadsheetFile(AFileName: string;
|
procedure LoadFromSpreadsheetFile(AFileName: string;
|
||||||
AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = 0); overload;
|
AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = -1); overload;
|
||||||
procedure LoadFromSpreadsheetFile(AFileName: string;
|
procedure LoadFromSpreadsheetFile(AFileName: string;
|
||||||
AWorksheetIndex: Integer = 0); overload;
|
AWorksheetIndex: Integer = -1); overload;
|
||||||
procedure NewWorkbook(AColCount, ARowCount: Integer);
|
procedure NewWorkbook(AColCount, ARowCount: Integer);
|
||||||
procedure SaveToSpreadsheetFile(AFileName: string;
|
procedure SaveToSpreadsheetFile(AFileName: string;
|
||||||
AOverwriteExisting: Boolean = true); overload;
|
AOverwriteExisting: Boolean = true); overload;
|
||||||
@ -3433,6 +3433,7 @@ end;
|
|||||||
@param AFileName Name of the file to be loaded
|
@param AFileName Name of the file to be loaded
|
||||||
@param AFormat Spreadsheet file format assumed for the file
|
@param AFormat Spreadsheet file format assumed for the file
|
||||||
@param AWorksheetIndex Index of the worksheet to be displayed in the grid
|
@param AWorksheetIndex Index of the worksheet to be displayed in the grid
|
||||||
|
(If empty then the active worksheet is loaded)
|
||||||
-------------------------------------------------------------------------------}
|
-------------------------------------------------------------------------------}
|
||||||
procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string;
|
procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string;
|
||||||
AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer);
|
AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer);
|
||||||
@ -3461,6 +3462,7 @@ end;
|
|||||||
|
|
||||||
@param AFileName Name of the file to be loaded
|
@param AFileName Name of the file to be loaded
|
||||||
@param AWorksheetIndex Index of the worksheet to be shown in the grid
|
@param AWorksheetIndex Index of the worksheet to be shown in the grid
|
||||||
|
(If empty then the active worksheet is loaded)
|
||||||
-------------------------------------------------------------------------------}
|
-------------------------------------------------------------------------------}
|
||||||
procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string;
|
procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string;
|
||||||
AWorksheetIndex: Integer);
|
AWorksheetIndex: Integer);
|
||||||
|
@ -1605,6 +1605,7 @@ procedure TsSpreadBIFF5Writer.WriteWindow2(AStream: TStream;
|
|||||||
ASheet: TsWorksheet);
|
ASheet: TsWorksheet);
|
||||||
var
|
var
|
||||||
Options: Word;
|
Options: Word;
|
||||||
|
actSheet: TsWorksheet;
|
||||||
begin
|
begin
|
||||||
{ BIFF Record header }
|
{ BIFF Record header }
|
||||||
WriteBiffHeader(AStream, INT_EXCEL_ID_WINDOW2, 10);
|
WriteBiffHeader(AStream, INT_EXCEL_ID_WINDOW2, 10);
|
||||||
@ -1613,10 +1614,11 @@ begin
|
|||||||
Options :=
|
Options :=
|
||||||
MASK_WINDOW2_OPTION_SHOW_ZERO_VALUES or
|
MASK_WINDOW2_OPTION_SHOW_ZERO_VALUES or
|
||||||
MASK_WINDOW2_OPTION_AUTO_GRIDLINE_COLOR or
|
MASK_WINDOW2_OPTION_AUTO_GRIDLINE_COLOR or
|
||||||
MASK_WINDOW2_OPTION_SHOW_OUTLINE_SYMBOLS or
|
MASK_WINDOW2_OPTION_SHOW_OUTLINE_SYMBOLS; { or
|
||||||
MASK_WINDOW2_OPTION_SHEET_SELECTED or
|
MASK_WINDOW2_OPTION_SHEET_SELECTED or
|
||||||
MASK_WINDOW2_OPTION_SHEET_ACTIVE;
|
MASK_WINDOW2_OPTION_SHEET_ACTIVE; }
|
||||||
{ Bug 0026386 -> every sheet must be selected/active, otherwise Excel cannot print }
|
{ Bug 0026386 -> every sheet must be selected/active, otherwise Excel cannot print
|
||||||
|
---> wp: after changes for issue 0028452: this is not necessary any more. }
|
||||||
|
|
||||||
if (soShowGridLines in ASheet.Options) then
|
if (soShowGridLines in ASheet.Options) then
|
||||||
Options := Options or MASK_WINDOW2_OPTION_SHOW_GRID_LINES;
|
Options := Options or MASK_WINDOW2_OPTION_SHOW_GRID_LINES;
|
||||||
@ -1624,6 +1626,11 @@ begin
|
|||||||
Options := Options or MASK_WINDOW2_OPTION_SHOW_SHEET_HEADERS;
|
Options := Options or MASK_WINDOW2_OPTION_SHOW_SHEET_HEADERS;
|
||||||
if (soHasFrozenPanes in ASheet.Options) and ((ASheet.LeftPaneWidth > 0) or (ASheet.TopPaneHeight > 0)) then
|
if (soHasFrozenPanes in ASheet.Options) and ((ASheet.LeftPaneWidth > 0) or (ASheet.TopPaneHeight > 0)) then
|
||||||
Options := Options or MASK_WINDOW2_OPTION_PANES_ARE_FROZEN;
|
Options := Options or MASK_WINDOW2_OPTION_PANES_ARE_FROZEN;
|
||||||
|
if FWorkbook.ActiveWorksheet <> nil then
|
||||||
|
actSheet := FWorkbook.ActiveWorksheet else
|
||||||
|
actSheet := Fworkbook.GetWorksheetByIndex(0);
|
||||||
|
if (ASheet = actSheet) then
|
||||||
|
Options := Options or MASK_WINDOW2_OPTION_SHEET_ACTIVE or MASK_WINDOW2_OPTION_SHEET_SELECTED;
|
||||||
|
|
||||||
AStream.WriteWord(WordToLE(Options));
|
AStream.WriteWord(WordToLE(Options));
|
||||||
|
|
||||||
|
@ -3147,6 +3147,7 @@ procedure TsSpreadBIFF8Writer.WriteWINDOW2(AStream: TStream;
|
|||||||
ASheet: TsWorksheet);
|
ASheet: TsWorksheet);
|
||||||
var
|
var
|
||||||
Options: Word;
|
Options: Word;
|
||||||
|
actSheet: TsWorksheet;
|
||||||
begin
|
begin
|
||||||
{ BIFF Record header }
|
{ BIFF Record header }
|
||||||
WriteBiffHeader(AStream, INT_EXCEL_ID_WINDOW2, 18);
|
WriteBiffHeader(AStream, INT_EXCEL_ID_WINDOW2, 18);
|
||||||
@ -3155,10 +3156,12 @@ begin
|
|||||||
Options :=
|
Options :=
|
||||||
MASK_WINDOW2_OPTION_SHOW_ZERO_VALUES or
|
MASK_WINDOW2_OPTION_SHOW_ZERO_VALUES or
|
||||||
MASK_WINDOW2_OPTION_AUTO_GRIDLINE_COLOR or
|
MASK_WINDOW2_OPTION_AUTO_GRIDLINE_COLOR or
|
||||||
MASK_WINDOW2_OPTION_SHOW_OUTLINE_SYMBOLS or
|
MASK_WINDOW2_OPTION_SHOW_OUTLINE_SYMBOLS;
|
||||||
|
{or
|
||||||
MASK_WINDOW2_OPTION_SHEET_SELECTED or
|
MASK_WINDOW2_OPTION_SHEET_SELECTED or
|
||||||
MASK_WINDOW2_OPTION_SHEET_ACTIVE;
|
MASK_WINDOW2_OPTION_SHEET_ACTIVE;}
|
||||||
{ Bug 0026386 -> every sheet must be selected/active, otherwise Excel cannot print }
|
{ Bug 0026386 -> every sheet must be selected/active, otherwise Excel cannot print
|
||||||
|
---> wp: after changes for issue 0028452: this is not necessary any more. }
|
||||||
|
|
||||||
if (soShowGridLines in ASheet.Options) then
|
if (soShowGridLines in ASheet.Options) then
|
||||||
Options := Options or MASK_WINDOW2_OPTION_SHOW_GRID_LINES;
|
Options := Options or MASK_WINDOW2_OPTION_SHOW_GRID_LINES;
|
||||||
@ -3166,6 +3169,11 @@ begin
|
|||||||
Options := Options or MASK_WINDOW2_OPTION_SHOW_SHEET_HEADERS;
|
Options := Options or MASK_WINDOW2_OPTION_SHOW_SHEET_HEADERS;
|
||||||
if (soHasFrozenPanes in ASheet.Options) and ((ASheet.LeftPaneWidth > 0) or (ASheet.TopPaneHeight > 0)) then
|
if (soHasFrozenPanes in ASheet.Options) and ((ASheet.LeftPaneWidth > 0) or (ASheet.TopPaneHeight > 0)) then
|
||||||
Options := Options or MASK_WINDOW2_OPTION_PANES_ARE_FROZEN;
|
Options := Options or MASK_WINDOW2_OPTION_PANES_ARE_FROZEN;
|
||||||
|
if FWorkbook.ActiveWorksheet <> nil then
|
||||||
|
actSheet := FWorkbook.ActiveWorksheet else
|
||||||
|
actSheet := Fworkbook.GetWorksheetByIndex(0);
|
||||||
|
if (ASheet = actSheet) then
|
||||||
|
Options := Options or MASK_WINDOW2_OPTION_SHEET_ACTIVE or MASK_WINDOW2_OPTION_SHEET_SELECTED;
|
||||||
AStream.WriteWord(WordToLE(Options));
|
AStream.WriteWord(WordToLE(Options));
|
||||||
|
|
||||||
{ Index to first visible row }
|
{ Index to first visible row }
|
||||||
|
@ -2280,6 +2280,9 @@ begin
|
|||||||
FWorksheet.Options := FWorksheet.Options + [soHasFrozenPanes]
|
FWorksheet.Options := FWorksheet.Options + [soHasFrozenPanes]
|
||||||
else
|
else
|
||||||
FWorksheet.Options := FWorksheet.Options - [soHasFrozenPanes];
|
FWorksheet.Options := FWorksheet.Options - [soHasFrozenPanes];
|
||||||
|
|
||||||
|
if (flags and MASK_WINDOW2_OPTION_SHEET_ACTIVE <> 0) then
|
||||||
|
FWorkbook.SelectWorksheet(FWorksheet);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ Reads the workbook globals. }
|
{ Reads the workbook globals. }
|
||||||
|
@ -65,6 +65,7 @@ type
|
|||||||
procedure ApplyCellFormatting(ACell: PCell; XfIndex: Integer);
|
procedure ApplyCellFormatting(ACell: PCell; XfIndex: Integer);
|
||||||
procedure ApplyHyperlinks(AWorksheet: TsWorksheet);
|
procedure ApplyHyperlinks(AWorksheet: TsWorksheet);
|
||||||
function FindCommentsFileName(ANode: TDOMNode): String;
|
function FindCommentsFileName(ANode: TDOMNode): String;
|
||||||
|
procedure ReadActiveSheet(ANode: TDOMNode; out ActiveSheetIndex: Integer);
|
||||||
procedure ReadBorders(ANode: TDOMNode);
|
procedure ReadBorders(ANode: TDOMNode);
|
||||||
procedure ReadCell(ANode: TDOMNode; AWorksheet: TsWorksheet);
|
procedure ReadCell(ANode: TDOMNode; AWorksheet: TsWorksheet);
|
||||||
procedure ReadCellXfs(ANode: TDOMNode);
|
procedure ReadCellXfs(ANode: TDOMNode);
|
||||||
@ -421,6 +422,20 @@ begin
|
|||||||
Result := '';
|
Result := '';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TsSpreadOOXMLReader.ReadActiveSheet(ANode: TDOMNode;
|
||||||
|
out ActiveSheetIndex: Integer);
|
||||||
|
var
|
||||||
|
S: string;
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
ActiveSheetIndex := -1;
|
||||||
|
if ANode = nil then
|
||||||
|
Exit;
|
||||||
|
S := GetAttrValue(ANode.FindNode('workbookView'), 'activeTab');
|
||||||
|
if TryStrToInt(S, i) then
|
||||||
|
ActiveSheetIndex := i;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TsSpreadOOXMLReader.ReadBorders(ANode: TDOMNode);
|
procedure TsSpreadOOXMLReader.ReadBorders(ANode: TDOMNode);
|
||||||
|
|
||||||
function ReadBorderStyle(ANode: TDOMNode;
|
function ReadBorderStyle(ANode: TDOMNode;
|
||||||
@ -1883,7 +1898,7 @@ var
|
|||||||
i: Integer;
|
i: Integer;
|
||||||
fn: String;
|
fn: String;
|
||||||
fn_comments: String;
|
fn_comments: String;
|
||||||
XMLStream: TStream;
|
actSheetIndex: Integer;
|
||||||
begin
|
begin
|
||||||
//unzip "content.xml" of "AFileName" to folder "FilePath"
|
//unzip "content.xml" of "AFileName" to folder "FilePath"
|
||||||
FilePath := GetTempDir(false);
|
FilePath := GetTempDir(false);
|
||||||
@ -1920,6 +1935,7 @@ begin
|
|||||||
ReadFileVersion(Doc.DocumentElement.FindNode('fileVersion'));
|
ReadFileVersion(Doc.DocumentElement.FindNode('fileVersion'));
|
||||||
ReadDateMode(Doc.DocumentElement.FindNode('workbookPr'));
|
ReadDateMode(Doc.DocumentElement.FindNode('workbookPr'));
|
||||||
ReadSheetList(Doc.DocumentElement.FindNode('sheets'), SheetList);
|
ReadSheetList(Doc.DocumentElement.FindNode('sheets'), SheetList);
|
||||||
|
ReadActiveSheet(Doc.DocumentElement.FindNode('bookViews'), actSheetIndex);
|
||||||
FreeAndNil(Doc);
|
FreeAndNil(Doc);
|
||||||
|
|
||||||
// process the styles.xml file
|
// process the styles.xml file
|
||||||
@ -2004,6 +2020,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
// Add hyperlinks to cells
|
// Add hyperlinks to cells
|
||||||
ApplyHyperlinks(FWorksheet);
|
ApplyHyperlinks(FWorksheet);
|
||||||
|
|
||||||
|
// Active worksheet
|
||||||
|
if i = actSheetIndex then
|
||||||
|
FWorkbook.SelectWorksheet(FWorksheet);
|
||||||
end; // for
|
end; // for
|
||||||
|
|
||||||
finally
|
finally
|
||||||
@ -2021,6 +2041,7 @@ var
|
|||||||
fn: String;
|
fn: String;
|
||||||
fn_comments: String;
|
fn_comments: String;
|
||||||
XMLStream: TStream;
|
XMLStream: TStream;
|
||||||
|
actSheetIndex: Integer;
|
||||||
begin
|
begin
|
||||||
Doc := nil;
|
Doc := nil;
|
||||||
SheetList := TStringList.Create;
|
SheetList := TStringList.Create;
|
||||||
@ -2047,6 +2068,7 @@ begin
|
|||||||
ReadFileVersion(Doc.DocumentElement.FindNode('fileVersion'));
|
ReadFileVersion(Doc.DocumentElement.FindNode('fileVersion'));
|
||||||
ReadDateMode(Doc.DocumentElement.FindNode('workbookPr'));
|
ReadDateMode(Doc.DocumentElement.FindNode('workbookPr'));
|
||||||
ReadSheetList(Doc.DocumentElement.FindNode('sheets'), SheetList);
|
ReadSheetList(Doc.DocumentElement.FindNode('sheets'), SheetList);
|
||||||
|
ReadActiveSheet(Doc.DocumentElement.FindNode('bookViews'), actSheetIndex);
|
||||||
FreeAndNil(Doc);
|
FreeAndNil(Doc);
|
||||||
finally
|
finally
|
||||||
XMLStream.Free;
|
XMLStream.Free;
|
||||||
@ -2163,6 +2185,10 @@ begin
|
|||||||
|
|
||||||
// Add hyperlinks to cells
|
// Add hyperlinks to cells
|
||||||
ApplyHyperlinks(FWorksheet);
|
ApplyHyperlinks(FWorksheet);
|
||||||
|
|
||||||
|
// Active worksheet
|
||||||
|
if i = actSheetIndex then
|
||||||
|
FWorkbook.SelectWorksheet(FWorksheet);
|
||||||
end; // for
|
end; // for
|
||||||
|
|
||||||
finally
|
finally
|
||||||
@ -3371,6 +3397,7 @@ end;
|
|||||||
procedure TsSpreadOOXMLWriter.WriteContent;
|
procedure TsSpreadOOXMLWriter.WriteContent;
|
||||||
var
|
var
|
||||||
i, counter: Integer;
|
i, counter: Integer;
|
||||||
|
actTab: String;
|
||||||
begin
|
begin
|
||||||
{ --- WorkbookRels --- }
|
{ --- WorkbookRels --- }
|
||||||
{ Workbook relations - Mark relation to all sheets }
|
{ Workbook relations - Mark relation to all sheets }
|
||||||
@ -3396,6 +3423,9 @@ begin
|
|||||||
|
|
||||||
{ --- Workbook --- }
|
{ --- Workbook --- }
|
||||||
{ Global workbook data - Mark all sheets }
|
{ Global workbook data - Mark all sheets }
|
||||||
|
actTab := IfThen(FWorkbook.ActiveWorksheet = nil, '',
|
||||||
|
'activeTab="' + IntToStr(FWorkbook.GetWorksheetIndex(FWOrkbook.ActiveWorksheet)) + '"');
|
||||||
|
|
||||||
AppendToStream(FSWorkbook,
|
AppendToStream(FSWorkbook,
|
||||||
XML_HEADER);
|
XML_HEADER);
|
||||||
AppendToStream(FSWorkbook, Format(
|
AppendToStream(FSWorkbook, Format(
|
||||||
@ -3406,7 +3436,7 @@ begin
|
|||||||
'<workbookPr defaultThemeVersion="124226" />');
|
'<workbookPr defaultThemeVersion="124226" />');
|
||||||
AppendToStream(FSWorkbook,
|
AppendToStream(FSWorkbook,
|
||||||
'<bookViews>' +
|
'<bookViews>' +
|
||||||
'<workbookView xWindow="480" yWindow="90" windowWidth="15195" windowHeight="12525" />' +
|
'<workbookView xWindow="480" yWindow="90" windowWidth="15195" windowHeight="12525" ' + actTab + '/>' +
|
||||||
'</bookViews>');
|
'</bookViews>');
|
||||||
AppendToStream(FSWorkbook,
|
AppendToStream(FSWorkbook,
|
||||||
'<sheets>');
|
'<sheets>');
|
||||||
|
Reference in New Issue
Block a user