fpspreadsheet: Add meta data reader for Excel XML.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7582 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2020-07-28 21:10:32 +00:00
parent 7015c9fa8c
commit c902c41997
2 changed files with 43 additions and 0 deletions

View File

@ -84,7 +84,10 @@ begin
book := TsWorkbook.Create;
try
// Select one of these
book.ReadFromFile('test.ods');
// book.ReadFromFile('test.xlsx');
// book.ReadFromFile('test.xml');
WriteLn('Created by : ', book.MetaData.CreatedBy);
WriteLn('Date created : ', DateTimeToStr(book.MetaData.DateCreated));
WriteLn('Modified by : ', book.MetaData.LastModifiedBy);

View File

@ -45,6 +45,7 @@ type
procedure ReadCellProtection(ANode: TDOMNode; var AFormat: TsCellFormat);
procedure ReadComment(ANode: TDOMNode; AWorksheet: TsBasicWorksheet; ACell: PCell);
procedure ReadConditionalFormatting(ANode: TDOMNode; AWorksheet: TsBasicWorksheet);
procedure ReadDocumentProperties(ANode: TDOMNode);
procedure ReadExcelWorkbook(ANode: TDOMNode);
procedure ReadFont(ANode: TDOMNode; var AFormat: TsCellFormat);
procedure ReadInterior(ANode: TDOMNode; var AFormat: TsCellFormat);
@ -1082,6 +1083,42 @@ begin
sheet.WriteConditionalCellFormat(range, TsCFCondition(condition), op1, op2, fmtIndex);
end;
{@@ ----------------------------------------------------------------------------
Reads the meta data etc.
-------------------------------------------------------------------------------}
procedure TsSpreadExcelXMLReader.ReadDocumentProperties(ANode: TDOMNode);
var
book: TsWorkbook;
nodeName: String;
s: String;
begin
if ANode = nil then
exit;
book := TsWorkbook(FWorkbook);
ANode := ANode.FirstChild;
while ANode <> nil do
begin
nodeName := ANode.NodeName;
s := GetNodeValue(ANode);
case nodeName of
'Title':
book.MetaData.Title := s;
'Author':
book.MetaData.CreatedBy := s;
'LastAuthor':
book.MetaData.LastModifiedBy := s;
'Created':
if s <> '' then
book.MetaData.DateCreated := ISO8601StrToDateTime(s);
'LastSaved':
if s <> '' then
book.MetaData.DateLastModified := ISO8601StrToDateTime(s);
end;
ANode := ANode.NextSibling;
end;
end;
{@@ ----------------------------------------------------------------------------
Reads the "ExcelWorkbook" node
-------------------------------------------------------------------------------}
@ -2011,6 +2048,9 @@ begin
try
ReadXMLStream(doc, AStream);
// Read meta data
ReadDocumentProperties(doc.DocumentElement.FindNode('DocumentProperties'));
// Read style list
ReadStyles(doc.DocumentElement.FindNode('Styles'));