diff --git a/components/fpspreadsheet/examples/other/metadata/demo_metadata.lpr b/components/fpspreadsheet/examples/other/metadata/demo_metadata.lpr
index 4172f0a1e..50fb7ad07 100644
--- a/components/fpspreadsheet/examples/other/metadata/demo_metadata.lpr
+++ b/components/fpspreadsheet/examples/other/metadata/demo_metadata.lpr
@@ -66,6 +66,7 @@ begin
book.MetaData.DateLastModified := Now();
book.MetaData.LastModifiedBy := 'Dagobert Duck';
book.MetaData.Title := 'Test of metadata äöü';
+ book.Metadata.Subject := 'FPSpreadsheet demos';
book.MetaData.Comments.Add('This is a test of spreadsheet metadata.');
book.MetaData.Comments.Add('Assign the author to the field CreatedBy.');
book.MetaData.Comments.Add('Assign the creation date to the field CreatedAt.');
@@ -93,6 +94,7 @@ begin
WriteLn('Modified by : ', book.MetaData.LastModifiedBy);
WriteLn('Date last modified : ', DateTimeToStr(book.MetaData.DateLastModified));
WriteLn('Title : ', book.MetaData.Title);
+ WriteLn('Subject : ', book.MetaData.Subject);
WriteLn('Keywords : ', book.MetaData.Keywords.CommaText);
WriteLn('Comments: ');
WriteLn(book.MetaData.Comments.Text);
diff --git a/components/fpspreadsheet/source/common/fpsopendocument.pas b/components/fpspreadsheet/source/common/fpsopendocument.pas
index 0074d7b7e..0d658a528 100644
--- a/components/fpspreadsheet/source/common/fpsopendocument.pas
+++ b/components/fpspreadsheet/source/common/fpsopendocument.pas
@@ -1990,6 +1990,8 @@ begin
book.MetaData.Comments.Text := s;
'dc:title':
book.MetaData.Title := s;
+ 'dc:subject':
+ book.Metadata.Subject := s;
end;
ANode := ANode.NextSibling;
end;
@@ -5868,6 +5870,13 @@ begin
'%s', [s]));
end;
+ if book.Metadata.Subject <> '' then
+ begin
+ s := book.Metadata.Subject;
+ AppendToStream(FSMeta, Format(
+ '%s', [s]));
+ end;
+
if book.Metadata.CreatedBy <> '' then
AppendToStream(FSMeta, Format(
'%s', [book.MetaData.CreatedBy]));
diff --git a/components/fpspreadsheet/source/common/fpstypes.pas b/components/fpspreadsheet/source/common/fpstypes.pas
index 4dcf80dce..20e6afb0b 100644
--- a/components/fpspreadsheet/source/common/fpstypes.pas
+++ b/components/fpspreadsheet/source/common/fpstypes.pas
@@ -973,6 +973,7 @@ type
FDateLastModified: TDateTime;
FLastModifiedBy: String;
FTitle: String;
+ FSubject: String;
FComments: TStrings;
FKeywords: TStrings;
public
@@ -983,6 +984,7 @@ type
property LastModifiedBy: String read FLastModifiedBy write FLastModifiedBy;
property DateCreated: TDateTime read FDateCreated write FDateCreated;
property DateLastModified: TDatetime read FDateLastModified write FDateLastModified;
+ property Subject: String read FSubject write FSubject;
property Title: String read FTitle write FTitle;
property Comments: TStrings read FComments write FComments;
property Keywords: TStrings read FKeywords write FKeywords;
@@ -1208,7 +1210,8 @@ end;
function TsMetaData.IsEmpty: Boolean;
begin
- Result := (FCreatedBy = '') and (FLastModifiedBy = '') and (FTitle = '') and
+ Result := (FCreatedBy = '') and (FLastModifiedBy = '') and
+ (FTitle = '') and (FSubject = '') and
(FComments.Count = 0) and (FKeywords.Count = 0) and
(FDateCreated = 0) and (FDateLastModified = 0);
end;
diff --git a/components/fpspreadsheet/source/common/xlsxml.pas b/components/fpspreadsheet/source/common/xlsxml.pas
index 35aeb6600..f43d6540e 100644
--- a/components/fpspreadsheet/source/common/xlsxml.pas
+++ b/components/fpspreadsheet/source/common/xlsxml.pas
@@ -1121,6 +1121,8 @@ begin
case nodeName of
'Title':
book.MetaData.Title := s;
+ 'Subject':
+ book.MetaData.Subject := s;
'Author':
book.MetaData.CreatedBy := s;
'LastAuthor':
@@ -2721,6 +2723,7 @@ const
LE = LineEnding;
var
sTitle: String;
+ sSubject: String;
sAuthor: String;
sLastAuthor: String;
sDateCreated: String;
@@ -2744,6 +2747,11 @@ begin
else
sTitle := '';
+ if book.MetaData.Subject <> '' then
+ sSubject := '' + book.MetaData.Subject + '' + LE + INDENT2
+ else
+ sSubject := '';
+
if book.MetaData.CreatedBy <> '' then
sAuthor := '' + book.MetaData.CreatedBy + '' + LE + INDENT2
else
@@ -2773,6 +2781,7 @@ begin
AppendToStream(AStream, INDENT1 +
'' + LE + INDENT2 +
sTitle +
+ sSubject +
sAuthor +
sLastAuthor +
sDateCreated +
diff --git a/components/fpspreadsheet/source/common/xlsxooxml.pas b/components/fpspreadsheet/source/common/xlsxooxml.pas
index 8b1318853..a9702d7ee 100644
--- a/components/fpspreadsheet/source/common/xlsxooxml.pas
+++ b/components/fpspreadsheet/source/common/xlsxooxml.pas
@@ -2716,6 +2716,8 @@ begin
case nodeName of
'dc:title':
book.MetaData.Title := s;
+ 'dc:subject':
+ book.MetaData.Subject := s;
'dc:creator':
book.MetaData.CreatedBy := s;
'cp:lastModifiedBy':
@@ -6197,6 +6199,10 @@ begin
AppendToStream(AStream, Format(
'%s', [UTF8TextToXMLText(book.MetaData.Title)]));
+ if book.MetaData.Subject <> '' then
+ AppendToStream(AStream, Format(
+ '%s', [UTF8TextToXMLText(book.Metadata.Subject)]));
+
if book.MetaData.CreatedBy <> '' then
AppendToStream(AStream, Format(
'%s', [UTF8TextToXMLText(book.MetaData.CreatedBy)]));