Skip to content

Commit

Permalink
Support loading of Apache Parquet files into Calc
Browse files Browse the repository at this point in the history
Change-Id: I9f8820998b7b0667d1e7cd532c32b1c7e55ca999
  • Loading branch information
kohei-us committed Sep 29, 2023
1 parent 3880f54 commit ae13909
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 0 deletions.
2 changes: 2 additions & 0 deletions filter/Configuration_filter.mk
Expand Up @@ -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 \
Expand Down Expand Up @@ -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 \
Expand Down
19 changes: 19 additions & 0 deletions filter/source/config/fragments/filters/calc_Parquet.xcu
@@ -0,0 +1,19 @@
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
-->
<node oor:name="Apache Parquet Spreadsheet" oor:op="replace">
<prop oor:name="Flags"><value>IMPORT ALIEN PREFERRED</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"/>
<prop oor:name="Type"><value>Apache Parquet</value></prop>
<prop oor:name="TemplateName"/>
<prop oor:name="DocumentService"><value>com.sun.star.sheet.SpreadsheetDocument</value></prop>
<prop oor:name="UIName">
<value xml:lang="en-US">Apache Parquet Spreadsheet</value>
</prop>
</node>
17 changes: 17 additions & 0 deletions filter/source/config/fragments/types/calc_Parquet.xcu
@@ -0,0 +1,17 @@
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
-->
<node oor:name="Apache Parquet" oor:op="replace" >
<prop oor:name="DetectService"><value>com.sun.star.comp.sc.OrcusFilterDetect</value></prop>
<prop oor:name="URLPattern"/>
<prop oor:name="Extensions"><value>parquet</value></prop>
<prop oor:name="MediaType"/>
<prop oor:name="Preferred"><value>true</value></prop>
<prop oor:name="PreferredFilter"><value>Apache Parquet Spreadsheet</value></prop>
<prop oor:name="UIName"><value xml:lang="en-US">Apache Parquet</value></prop>
<prop oor:name="ClipboardFormat"/>
</node>
2 changes: 2 additions & 0 deletions sc/inc/orcusfilters.hxx
Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions sc/source/filter/inc/orcusfiltersimpl.hxx
Expand Up @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions sc/source/filter/orcus/filterdetect.cxx
Expand Up @@ -90,6 +90,8 @@ OUString OrcusFormatDetect::detect(css::uno::Sequence<css::beans::PropertyValue>
return "Gnumeric XML";
case orcus::format_t::xls_xml:
return "calc_MS_Excel_2003_XML";
case orcus::format_t::parquet:
return "Apache Parquet";
default:
;
}
Expand Down
10 changes: 10 additions & 0 deletions sc/source/filter/orcus/orcusfiltersimpl.cxx
Expand Up @@ -24,6 +24,7 @@
#include <orcus/orcus_xlsx.hpp>
#include <orcus/orcus_xls_xml.hpp>
#include <orcus/orcus_ods.hpp>
#include <orcus/orcus_parquet.hpp>
#include <orcus/orcus_import_ods.hpp>
#include <orcus/stream.hpp>
#include <com/sun/star/task/XStatusIndicator.hpp>
Expand Down Expand Up @@ -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);
Expand Down
8 changes: 8 additions & 0 deletions sc/source/ui/docshell/docsh.cxx
Expand Up @@ -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;
Expand Down

0 comments on commit ae13909

Please sign in to comment.