diff --git a/components/fpspreadsheet/examples/other/comments/comments_demo_read.lpi b/components/fpspreadsheet/examples/other/comments/comments_demo_read.lpi
new file mode 100644
index 000000000..401eb92d1
--- /dev/null
+++ b/components/fpspreadsheet/examples/other/comments/comments_demo_read.lpi
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/fpspreadsheet/examples/other/comments/comments_demo_read.pas b/components/fpspreadsheet/examples/other/comments/comments_demo_read.pas
new file mode 100644
index 000000000..7da728f3b
--- /dev/null
+++ b/components/fpspreadsheet/examples/other/comments/comments_demo_read.pas
@@ -0,0 +1,49 @@
+program comments_demo_read;
+
+uses
+ SysUtils, fpspreadsheet, fpstypes, fpsutils, fpsallformats;
+const
+ FILE_NAME = 'test';
+
+function RemoveLinebreaks(s: String): String;
+var
+ i: Integer;
+begin
+ SetLength(Result, Length(s));
+ for i := 1 to Length(s) do
+ if s[i] in [#10, #13] then
+ Result[i] := ' '
+ else
+ Result[i] := s[i];
+end;
+
+var
+ workbook: TsWorkbook;
+ worksheet: TsWorksheet;
+ cmnt: PsComment;
+ txt: string;
+ i: Integer;
+begin
+ workbook := TsWorkbook.Create;
+ try
+ workbook.ReadFromFile(FILE_NAME + '.xlsx', sfOOXML);
+ for i := 0 to workbook.GetWorksheetCount-1 do
+ begin
+ worksheet := workbook.GetWorksheetByIndex(i);
+ WriteLn('Worksheet "', worksheet.Name, '":');
+ for cmnt in worksheet.Comments do
+ begin
+ txt := RemoveLinebreaks(cmnt^.Text);
+ WriteLn(' Comment in cell ', GetCellString(cmnt^.Row, cmnt^.Col), ': "', txt, '"');
+ end;
+ WriteLn;
+ end;
+ finally
+ workbook.Free;
+ end;
+
+ WriteLn;
+ WriteLn('Press ENTER to close...');
+ ReadLn;
+end.
+
diff --git a/components/fpspreadsheet/examples/other/comments/comments_demo_write.lpi b/components/fpspreadsheet/examples/other/comments/comments_demo_write.lpi
new file mode 100644
index 000000000..034902b9b
--- /dev/null
+++ b/components/fpspreadsheet/examples/other/comments/comments_demo_write.lpi
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/fpspreadsheet/examples/other/comments/comments_demo_write.pas b/components/fpspreadsheet/examples/other/comments/comments_demo_write.pas
new file mode 100644
index 000000000..1bf1907da
--- /dev/null
+++ b/components/fpspreadsheet/examples/other/comments/comments_demo_write.pas
@@ -0,0 +1,31 @@
+program comments_demo_write;
+
+uses
+ fpspreadsheet, fpstypes, fpsallformats;
+
+const
+ FILE_NAME = 'test';
+
+var
+ workbook: TsWorkbook;
+ worksheet: TsWorksheet;
+
+begin
+ workbook := TsWorkbook.Create;
+ try
+ worksheet := workbook.AddWorksheet('Sheet 1');
+ worksheet.WriteText(0, 0, 'Angle');
+ worksheet.WriteNumber(0, 1, 30.0, nfFixed, 1);
+ worksheet.WriteComment(0, 1, 'Enter angle in degrees here.');
+ worksheet.WriteText(1, 0, 'sin(Angle)');
+ worksheet.WriteFormula(1, 1, '=sin(B1*pi()/180)');
+ workbook.WriteToFile(FILE_NAME + '.xlsx', sfOOXML, true);
+// workbook.WriteToFile(FILE_NAME + '8.xls', sfExcel8, true); // no BIFF8 writing support for comments so far.
+ workbook.WriteToFile(FILE_NAME + '5.xls', sfExcel5, true);
+ workbook.WriteToFile(FILE_NAME + '2.xls', sfExcel2, true);
+ workbook.WriteToFile(FILE_NAME + '.ods', sfOpenDocument, true);
+ finally
+ workbook.Free;
+ end;
+end.
+