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.