You've already forked lazarus-ccr
fpspreadsheet: xlsx reading/writing support for hidden grid lines and headers
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3420 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -69,6 +69,12 @@ type
|
|||||||
procedure TestWriteRead_ODS_Panes_Hor;
|
procedure TestWriteRead_ODS_Panes_Hor;
|
||||||
procedure TestWriteRead_ODS_Panes_Vert;
|
procedure TestWriteRead_ODS_Panes_Vert;
|
||||||
procedure TestWriteRead_ODS_Panes_None;
|
procedure TestWriteRead_ODS_Panes_None;
|
||||||
|
|
||||||
|
{ OOXML tests }
|
||||||
|
procedure TestWriteRead_OOXML_ShowGridLines_ShowHeaders;
|
||||||
|
procedure TestWriteRead_OOXML_ShowGridLines_HideHeaders;
|
||||||
|
procedure TestWriteRead_OOXML_HideGridLines_ShowHeaders;
|
||||||
|
procedure TestWriteRead_OOXML_HideGridLines_HideHeaders;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
@ -220,6 +226,28 @@ begin
|
|||||||
TestWriteReadGridHeaders(sfOpenDocument, false, false);
|
TestWriteReadGridHeaders(sfOpenDocument, false, false);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ Tests for OOXML grid lines and/or headers }
|
||||||
|
procedure TSpreadWriteReadOptionsTests.TestWriteRead_OOXML_ShowGridLines_ShowHeaders;
|
||||||
|
begin
|
||||||
|
TestWriteReadGridHeaders(sfOOXML, true, true);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadWriteReadOptionsTests.TestWriteRead_OOXML_ShowGridLines_HideHeaders;
|
||||||
|
begin
|
||||||
|
TestWriteReadGridHeaders(sfOOXML, true, false);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadWriteReadOptionsTests.TestWriteRead_OOXML_HideGridLines_ShowHeaders;
|
||||||
|
begin
|
||||||
|
TestWriteReadGridHeaders(sfOOXML, false, true);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSpreadWriteReadOptionsTests.TestWriteRead_OOXML_HideGridLines_HideHeaders;
|
||||||
|
begin
|
||||||
|
TestWriteReadGridHeaders(sfOOXML, false, false);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
{ Test for frozen panes }
|
{ Test for frozen panes }
|
||||||
|
|
||||||
procedure TSpreadWriteReadOptionsTests.TestWriteReadPanes(AFormat: TsSpreadsheetFormat;
|
procedure TSpreadWriteReadOptionsTests.TestWriteReadPanes(AFormat: TsSpreadsheetFormat;
|
||||||
|
@ -79,6 +79,7 @@ type
|
|||||||
procedure ReadRowHeight(ANode: TDOMNode; AWorksheet: TsWorksheet);
|
procedure ReadRowHeight(ANode: TDOMNode; AWorksheet: TsWorksheet);
|
||||||
procedure ReadSharedStrings(ANode: TDOMNode);
|
procedure ReadSharedStrings(ANode: TDOMNode);
|
||||||
procedure ReadSheetList(ANode: TDOMNode; AList: TStrings);
|
procedure ReadSheetList(ANode: TDOMNode; AList: TStrings);
|
||||||
|
procedure ReadSheetViews(ANode: TDOMNode; AWorksheet: TsWorksheet);
|
||||||
procedure ReadWorksheet(ANode: TDOMNode; AWorksheet: TsWorksheet);
|
procedure ReadWorksheet(ANode: TDOMNode; AWorksheet: TsWorksheet);
|
||||||
protected
|
protected
|
||||||
procedure ApplyCellFormatting(ACell: PCell; XfIndex: Integer);
|
procedure ApplyCellFormatting(ACell: PCell; XfIndex: Integer);
|
||||||
@ -1014,6 +1015,30 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TsSpreadOOXMLReader.ReadSheetViews(ANode: TDOMNode; AWorksheet: TsWorksheet);
|
||||||
|
var
|
||||||
|
sheetViewNode: TDOMNode;
|
||||||
|
nodeName: String;
|
||||||
|
s: String;
|
||||||
|
begin
|
||||||
|
if ANode = nil then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
sheetViewNode := ANode.FirstChild;
|
||||||
|
while Assigned(sheetViewNode) do begin
|
||||||
|
nodeName := sheetViewNode.NodeName;
|
||||||
|
if nodeName = 'sheetView' then begin
|
||||||
|
s := GetAttrValue(sheetViewNode, 'showGridLines');
|
||||||
|
if s = '0' then
|
||||||
|
AWorksheet.Options := AWorksheet.Options - [soShowGridLines];
|
||||||
|
s := GetAttrValue(sheetViewNode, 'showRowColHeaders');
|
||||||
|
if s = '0' then
|
||||||
|
AWorksheet.Options := AWorksheet.Options - [soShowHeaders];
|
||||||
|
end;
|
||||||
|
sheetViewNode := sheetViewNode.NextSibling;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TsSpreadOOXMLReader.ReadWorksheet(ANode: TDOMNode; AWorksheet: TsWorksheet);
|
procedure TsSpreadOOXMLReader.ReadWorksheet(ANode: TDOMNode; AWorksheet: TsWorksheet);
|
||||||
var
|
var
|
||||||
rownode: TDOMNode;
|
rownode: TDOMNode;
|
||||||
@ -1124,6 +1149,7 @@ begin
|
|||||||
|
|
||||||
FWorksheet := AData.AddWorksheet(SheetList[i]);
|
FWorksheet := AData.AddWorksheet(SheetList[i]);
|
||||||
|
|
||||||
|
ReadSheetViews(Doc.DocumentElement.FindNode('sheetViews'), FWorksheet);
|
||||||
ReadCols(Doc.DocumentElement.FindNode('cols'), FWorksheet);
|
ReadCols(Doc.DocumentElement.FindNode('cols'), FWorksheet);
|
||||||
ReadWorksheet(Doc.DocumentElement.FindNode('sheetData'), FWorksheet);
|
ReadWorksheet(Doc.DocumentElement.FindNode('sheetData'), FWorksheet);
|
||||||
|
|
||||||
@ -1851,6 +1877,8 @@ var
|
|||||||
row: PRow;
|
row: PRow;
|
||||||
rh: String;
|
rh: String;
|
||||||
h0: Single;
|
h0: Single;
|
||||||
|
showGridLines: String;
|
||||||
|
showHeaders: String;
|
||||||
begin
|
begin
|
||||||
FCurSheetNum := Length(FSSheets);
|
FCurSheetNum := Length(FSSheets);
|
||||||
SetLength(FSSheets, FCurSheetNum + 1);
|
SetLength(FSSheets, FCurSheetNum + 1);
|
||||||
@ -1863,14 +1891,24 @@ begin
|
|||||||
FSSheets[FCurSheetNum] := TMemoryStream.Create;
|
FSSheets[FCurSheetNum] := TMemoryStream.Create;
|
||||||
|
|
||||||
// Header
|
// Header
|
||||||
|
if not (soShowGridLines in CurSheet.Options) then
|
||||||
|
showGridLines := 'showGridLines="0"'
|
||||||
|
else
|
||||||
|
showGridLines := '';
|
||||||
|
|
||||||
|
if not (soShowHeaders in CurSheet.Options) then
|
||||||
|
showHeaders := 'showRowColHeaders="0"'
|
||||||
|
else
|
||||||
|
showHeaders := '';
|
||||||
|
|
||||||
AppendToStream(FSSheets[FCurSheetNum],
|
AppendToStream(FSSheets[FCurSheetNum],
|
||||||
XML_HEADER);
|
XML_HEADER);
|
||||||
AppendToStream(FSSheets[FCurSheetNum], Format(
|
AppendToStream(FSSheets[FCurSheetNum], Format(
|
||||||
'<worksheet xmlns="%s" xmlns:r="%s">', [SCHEMAS_SPREADML, SCHEMAS_DOC_RELS]));
|
'<worksheet xmlns="%s" xmlns:r="%s">', [SCHEMAS_SPREADML, SCHEMAS_DOC_RELS]));
|
||||||
AppendToStream(FSSheets[FCurSheetNum],
|
AppendToStream(FSSheets[FCurSheetNum],
|
||||||
'<sheetViews>');
|
'<sheetViews>');
|
||||||
AppendToStream(FSSheets[FCurSheetNum],
|
AppendToStream(FSSheets[FCurSheetNum], Format(
|
||||||
'<sheetView workbookViewId="0" />');
|
'<sheetView workbookViewId="0" %s %s />', [showGridLines, showHeaders]));
|
||||||
AppendToStream(FSSheets[FCurSheetNum],
|
AppendToStream(FSSheets[FCurSheetNum],
|
||||||
'</sheetViews>');
|
'</sheetViews>');
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user