diff --git a/components/fpspreadsheet/fpsregfileformats.pas b/components/fpspreadsheet/fpsregfileformats.pas
index d2b634c87..0f65473ee 100644
--- a/components/fpspreadsheet/fpsregfileformats.pas
+++ b/components/fpspreadsheet/fpsregfileformats.pas
@@ -253,14 +253,31 @@ end;
function TsSpreadFormatRegistry.GetAllExcelFilesMask(AExtSeparator: Char): String;
var
+ j: Integer;
L: TStrings;
+ data: TsSpreadFormatData;
+ ext: String;
begin
L := TStringList.Create;
try
+ // good old BIFF...
if (IndexOf(ord(sfExcel8)) <> -1) or
(IndexOf(ord(sfExcel5)) <> -1) or
(IndexOf(ord(sfExcel2)) <> -1) then L.Add('*.xls');
- if (IndexOf(ord(sfOOXML)) <> -1) then L.Add('*.xlsx');
+
+ // Excel 2007+
+ j := IndexOf(ord(sfOOXML));
+ if j <> -1 then
+ begin
+ data := TsSpreadFormatData(FList[j]);
+ for j:=0 to data.FileExtensionCount-1 do
+ begin
+ ext := data.FileExtension[j];
+ if L.IndexOf(ext) = -1 then
+ L.Add('*' + ext);
+ end;
+ end;
+
L.Delimiter := AExtSeparator;
L.StrictDelimiter := true;
Result := L.DelimitedText;
@@ -363,7 +380,7 @@ function TsSpreadFormatRegistry.GetFormatArrayFromFileName(
APriorityFormat: TsSpreadFormatID = sfidUnknown): TsSpreadFormatIDArray;
var
idx: Integer;
- i, n: Integer;
+ i, j, n: Integer;
ext: String;
data: TsSpreadFormatData;
begin
@@ -385,13 +402,15 @@ begin
faRead : if data.ReaderClass = nil then Continue;
faWrite : if data.WriterClass = nil then Continue;
end;
- if Lowercase(data.FileExtension[0]) = ext then
- begin
- Result[n] := data.FormatID;
- inc(n);
- end;
+ for j:=0 to data.FileExtensionCount-1 do
+ if Lowercase(data.FileExtension[j]) = ext then
+ begin
+ Result[n] := data.FormatID;
+ inc(n);
+ end;
end;
+
SetLength(Result, n);
if APriorityFormat <> sfidUnknown then
diff --git a/components/fpspreadsheet/laz_fpspreadsheet.lpk b/components/fpspreadsheet/laz_fpspreadsheet.lpk
index 301bd06be..dbbd2bc93 100644
--- a/components/fpspreadsheet/laz_fpspreadsheet.lpk
+++ b/components/fpspreadsheet/laz_fpspreadsheet.lpk
@@ -9,7 +9,6 @@
-
diff --git a/components/fpspreadsheet/xlsxooxml.pas b/components/fpspreadsheet/xlsxooxml.pas
index 28b2f6beb..d7fa20d44 100755
--- a/components/fpspreadsheet/xlsxooxml.pas
+++ b/components/fpspreadsheet/xlsxooxml.pas
@@ -2919,7 +2919,7 @@ begin
InitCell(lCell);
value := varNull;
styleCell := nil;
- Workbook.OnWriteCellData(Workbook, r, c, value, styleCell);
+ Workbook.OnWriteCellData(FWorkbook, r, c, value, styleCell);
if styleCell <> nil then
lCell := styleCell^;
lCell.Row := r;
@@ -4706,7 +4706,7 @@ initialization
// Registers this reader / writer on fpSpreadsheet
sfidOOXML := RegisterSpreadFormat(sfOOXML,
TsSpreadOOXMLReader, TsSpreadOOXMLWriter,
- STR_FILEFORMAT_EXCEL_XLSX, 'OOXML', [STR_OOXML_EXCEL_EXTENSION]
+ STR_FILEFORMAT_EXCEL_XLSX, 'OOXML', [STR_OOXML_EXCEL_EXTENSION, '.xlsm']
);
end.