diff --git a/filter/Configuration_filter.mk b/filter/Configuration_filter.mk index bd3d3486234e2..8a323e83fd544 100644 --- a/filter/Configuration_filter.mk +++ b/filter/Configuration_filter.mk @@ -477,6 +477,7 @@ $(eval $(call filter_Configuration_add_types,fcfg_langpack,fcfg_calc_types.xcu,f generic_Text \ calc_Gnumeric \ calc_Lotus \ + calc_Parquet \ calc_QPro \ calc_MS_Excel_40 \ calc_MS_Excel_40_VorlageTemplate \ @@ -535,6 +536,7 @@ $(eval $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_calc_filters.x calc_HTML_WebQuery \ calc_StarOffice_XML_Calc_Template \ calc_pdf_Export \ + calc_Parquet \ dBase \ calc8 \ calc8_template \ diff --git a/filter/source/config/fragments/filters/calc_Parquet.xcu b/filter/source/config/fragments/filters/calc_Parquet.xcu new file mode 100644 index 0000000000000..5b0fea8257bb6 --- /dev/null +++ b/filter/source/config/fragments/filters/calc_Parquet.xcu @@ -0,0 +1,19 @@ + + + IMPORT ALIEN PREFERRED + + + + Apache Parquet + + com.sun.star.sheet.SpreadsheetDocument + + Apache Parquet Spreadsheet + + diff --git a/filter/source/config/fragments/types/calc_Parquet.xcu b/filter/source/config/fragments/types/calc_Parquet.xcu new file mode 100644 index 0000000000000..6c29d886c92fe --- /dev/null +++ b/filter/source/config/fragments/types/calc_Parquet.xcu @@ -0,0 +1,17 @@ + + + com.sun.star.comp.sc.OrcusFilterDetect + + parquet + + true + Apache Parquet Spreadsheet + Apache Parquet + + diff --git a/sc/inc/orcusfilters.hxx b/sc/inc/orcusfilters.hxx index 6d17f3741ebb6..c49b6899ddec3 100644 --- a/sc/inc/orcusfilters.hxx +++ b/sc/inc/orcusfilters.hxx @@ -33,6 +33,8 @@ public: virtual bool importExcel2003XML(ScDocument& rDoc, SfxMedium& rMedium) const = 0; + virtual bool importParquet(ScDocument& rDoc, SfxMedium& rMedium) const = 0; + virtual bool importXLSX(ScDocument& rDoc, SfxMedium& rMedium) const = 0; virtual bool importODS(ScDocument& rDoc, SfxMedium& rMedium) const = 0; diff --git a/sc/source/filter/inc/orcusfiltersimpl.hxx b/sc/source/filter/inc/orcusfiltersimpl.hxx index 070d69aec03e0..93cffbaa81ee7 100644 --- a/sc/source/filter/inc/orcusfiltersimpl.hxx +++ b/sc/source/filter/inc/orcusfiltersimpl.hxx @@ -18,6 +18,7 @@ class ScOrcusFiltersImpl : public ScOrcusFilters public: virtual bool importCSV(ScDocument& rDoc, SfxMedium& rMedium) const override; virtual bool importGnumeric(ScDocument& rDoc, SfxMedium& rMedium) const override; + virtual bool importParquet(ScDocument& rDoc, SfxMedium& rMedium) const override; virtual bool importExcel2003XML(ScDocument& rDoc, SfxMedium& rMedium) const override; virtual bool importXLSX(ScDocument& rDoc, SfxMedium& rMedium) const override; virtual bool importODS(ScDocument& rDoc, SfxMedium& rMedium) const override; diff --git a/sc/source/filter/orcus/filterdetect.cxx b/sc/source/filter/orcus/filterdetect.cxx index 5750932e95d73..06f6015a8f0cf 100644 --- a/sc/source/filter/orcus/filterdetect.cxx +++ b/sc/source/filter/orcus/filterdetect.cxx @@ -90,6 +90,8 @@ OUString OrcusFormatDetect::detect(css::uno::Sequence return "Gnumeric XML"; case orcus::format_t::xls_xml: return "calc_MS_Excel_2003_XML"; + case orcus::format_t::parquet: + return "Apache Parquet"; default: ; } diff --git a/sc/source/filter/orcus/orcusfiltersimpl.cxx b/sc/source/filter/orcus/orcusfiltersimpl.cxx index 1d3bc9c462343..47d632fa8e5ad 100644 --- a/sc/source/filter/orcus/orcusfiltersimpl.cxx +++ b/sc/source/filter/orcus/orcusfiltersimpl.cxx @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -88,6 +89,15 @@ bool ScOrcusFiltersImpl::importGnumeric(ScDocument& rDoc, SfxMedium& rMedium) co return loadFileContent(rMedium, filter); } +bool ScOrcusFiltersImpl::importParquet(ScDocument& rDoc, SfxMedium& rMedium) const +{ + ScOrcusFactory aFactory(rDoc); + aFactory.setStatusIndicator(getStatusIndicator(rMedium)); + + orcus::orcus_parquet filter(&aFactory); + return loadFileContent(rMedium, filter); +} + bool ScOrcusFiltersImpl::importExcel2003XML(ScDocument& rDoc, SfxMedium& rMedium) const { ScOrcusFactory aFactory(rDoc); diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx index 2b568c5d8d549..4793313029a3b 100644 --- a/sc/source/ui/docshell/docsh.cxx +++ b/sc/source/ui/docshell/docsh.cxx @@ -1280,6 +1280,14 @@ bool ScDocShell::ConvertFrom( SfxMedium& rMedium ) bRet = pOrcus->importExcel2003XML(*m_pDocument, rMedium); } + else if (aFltName == "Apache Parquet Spreadsheet") + { + ScOrcusFilters* pOrcus = ScFormatFilter::Get().GetOrcusFilters(); + if (!pOrcus) + return false; + + bRet = pOrcus->importParquet(*m_pDocument, rMedium); + } else if (aFltName == SC_TEXT_CSV_FILTER_NAME) { ScAsciiOptions aOptions;