Kaydet (Commit) 2aea6d51 authored tarafından Jaskaran Singh's avatar Jaskaran Singh Kaydeden (comit) Markus Mohrhard

Add a method to import ODF styles via orcus

Change-Id: Id76593bbb9982ec6745737ade800ae669e8e4471
üst 7911f21c
...@@ -35,6 +35,12 @@ public: ...@@ -35,6 +35,12 @@ public:
virtual bool importODS(ScDocument& rDoc, SfxMedium& rMedium) const = 0; virtual bool importODS(ScDocument& rDoc, SfxMedium& rMedium) const = 0;
/**
* Used to import just the styles from an xml file.
*/
virtual bool importODS_Styles(ScDocument& rDoc, OUString& aFileName) const = 0;
/** /**
* Create a context for XML file. The context object stores session * Create a context for XML file. The context object stores session
* information for each unique XML file. You must create a new context * information for each unique XML file. You must create a new context
......
...@@ -25,6 +25,8 @@ public: ...@@ -25,6 +25,8 @@ public:
virtual bool importXLSX(ScDocument& rDoc, SfxMedium& rMedium) const override; virtual bool importXLSX(ScDocument& rDoc, SfxMedium& rMedium) const override;
virtual bool importODS(ScDocument& rDoc, SfxMedium& rMedium) const override; virtual bool importODS(ScDocument& rDoc, SfxMedium& rMedium) const override;
virtual bool importODS_Styles(ScDocument& rDoc, OUString& aFileName) const override;
virtual ScOrcusXMLContext* createXMLContext(ScDocument& rDoc, const OUString& rPath) const override; virtual ScOrcusXMLContext* createXMLContext(ScDocument& rDoc, const OUString& rPath) const override;
}; };
......
...@@ -17,14 +17,19 @@ ...@@ -17,14 +17,19 @@
#include <sfx2/frame.hxx> #include <sfx2/frame.hxx>
#include <sfx2/sfxsids.hrc> #include <sfx2/sfxsids.hrc>
#include <svl/itemset.hxx> #include <svl/itemset.hxx>
#include <rtl/bootstrap.hxx>
#include <rtl/ustring.hxx>
#include <comphelper/string.hxx>
#include <orcus/spreadsheet/import_interface.hpp> #include <orcus/spreadsheet/import_interface.hpp>
#include <orcus/orcus_csv.hpp> #include <orcus/orcus_csv.hpp>
#include <orcus/orcus_gnumeric.hpp> #include <orcus/orcus_gnumeric.hpp>
#include <orcus/orcus_xlsx.hpp> #include <orcus/orcus_xlsx.hpp>
#include <orcus/orcus_ods.hpp> #include <orcus/orcus_ods.hpp>
#include <orcus/orcus_import_ods.hpp>
#include <orcus/global.hpp> #include <orcus/global.hpp>
#include <orcus/stream.hpp>
#include <orcus/orcus_import_ods.hpp>
#include <com/sun/star/task/XStatusIndicator.hpp> #include <com/sun/star/task/XStatusIndicator.hpp>
#ifdef _WIN32 #ifdef _WIN32
...@@ -142,6 +147,39 @@ bool ScOrcusFiltersImpl::importODS(ScDocument& rDoc, SfxMedium& rMedium) const ...@@ -142,6 +147,39 @@ bool ScOrcusFiltersImpl::importODS(ScDocument& rDoc, SfxMedium& rMedium) const
return true; return true;
} }
bool ScOrcusFiltersImpl::importODS_Styles(ScDocument& rDoc, OUString& aFileName) const
{
OUString aPath("$BRAND_BASE_DIR/"); /* Read the comment below before changing this */
rtl::Bootstrap::expandMacros(aPath);
OUString aValidPath;
/* The Following loop trims 'file://' from start of string and
* '../' from the end of string. If you ever happen to change the above macro
* please consider changing the following range too, otherwise app would
* crash!!
*/
for (sal_Int32 i = 7; i < aPath.getLength() - 3; ++i)
aValidPath += OUString(aPath[i]);
aValidPath += aFileName;
OString aUrl = OUStringToOString(aValidPath, RTL_TEXTENCODING_UTF8);
const char* path = aUrl.getStr();
try
{
std::string content = orcus::load_file_content(path);
ScOrcusStyles styles(rDoc);
orcus::import_ods::read_styles(content.c_str(), content.size(), &styles);
}
catch (const std::exception& e)
{
SAL_WARN("sc", "Unable to load styles from xml file! " << e.what());
return false;
}
return true;
}
ScOrcusXMLContext* ScOrcusFiltersImpl::createXMLContext(ScDocument& rDoc, const OUString& rPath) const ScOrcusXMLContext* ScOrcusFiltersImpl::createXMLContext(ScDocument& rDoc, const OUString& rPath) const
{ {
return new ScOrcusXMLContextImpl(rDoc, rPath); return new ScOrcusXMLContextImpl(rDoc, rPath);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment