12 #include <tokenarray.hxx>
16 #include <osl/thread.hxx>
19 #include <sfx2/sfxsids.hrc>
21 #include <rtl/ustring.hxx>
24 #include <orcus/orcus_csv.hpp>
25 #include <orcus/orcus_gnumeric.hpp>
26 #include <orcus/orcus_xlsx.hpp>
27 #include <orcus/orcus_xls_xml.hpp>
28 #include <orcus/orcus_ods.hpp>
29 #include <orcus/orcus_import_ods.hpp>
30 #include <orcus/stream.hpp>
31 #include <com/sun/star/task/XStatusIndicator.hpp>
34 #include <boost/filesystem/operations.hpp>
44 uno::Reference<task::XStatusIndicator> getStatusIndicator(
const SfxMedium& rMedium)
46 uno::Reference<task::XStatusIndicator> xStatusIndicator;
52 xStatusIndicator.set(pItem->
GetValue(), uno::UNO_QUERY);
54 return xStatusIndicator;
57 bool loadFileContent(
SfxMedium& rMedium, orcus::iface::import_filter&
filter)
61 static const size_t nReadBuffer = 1024 * 32;
62 OStringBuffer
aBuffer((
int(nReadBuffer)));
66 char pData[nReadBuffer];
67 nRead = pStream->
ReadBytes(pData, nReadBuffer);
69 }
while (nRead == nReadBuffer);
75 catch (
const std::exception& e)
77 SAL_WARN(
"sc",
"Unable to load file via orcus filter! " << e.what());
90 orcus::orcus_csv filter(&aFactory);
91 return loadFileContent(rMedium, filter);
99 orcus::orcus_gnumeric filter(&aFactory);
100 return loadFileContent(rMedium, filter);
108 orcus::orcus_xls_xml filter(&aFactory);
109 return loadFileContent(rMedium, filter);
117 orcus::orcus_xlsx filter(&aFactory);
118 return loadFileContent(rMedium, filter);
126 orcus::orcus_ods filter(&aFactory);
127 return loadFileContent(rMedium, filter);
137 std::unique_ptr<orcus::file_content> content;
140 content = std::make_unique<orcus::file_content>(aPath8.getStr());
142 catch (
const boost::filesystem::filesystem_error&)
148 if (GetShortPathNameW(o3tl::toW(aPath.getStr()), buf, std::size(buf)) == 0)
151 content = std::make_unique<orcus::file_content>(aPath8.getStr());
154 auto content = std::make_unique<orcus::file_content>(aPath8.getStr());
158 orcus::import_ods::read_styles(content->data(), content->size(), &aStyles);
160 catch (
const std::exception& e)
162 SAL_WARN(
"sc",
"Unable to load styles from xml file! " << e.what());
170 const OUString& rPath)
const
172 return std::make_unique<ScOrcusXMLContextImpl>(rDoc, rPath);
std::unique_ptr< ContentProperties > pData
virtual std::unique_ptr< ScOrcusXMLContext > createXMLContext(ScDocument &rDoc, const OUString &rPath) const override
Create a context for XML file.
sal_uInt64 Seek(sal_uInt64 nPos)
const css::uno::Any & GetValue() const
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
virtual bool importXLSX(ScDocument &rDoc, SfxMedium &rMedium) const override
SfxItemSet * GetItemSet() const
virtual bool importODS(ScDocument &rDoc, SfxMedium &rMedium) const override
virtual bool importODS_Styles(ScDocument &rDoc, OUString &aFileName) const override
Used to import just the styles from an xml file.
virtual bool importExcel2003XML(ScDocument &rDoc, SfxMedium &rMedium) const override
std::size_t ReadBytes(void *pData, std::size_t nSize)
void setStatusIndicator(const css::uno::Reference< css::task::XStatusIndicator > &rIndicator)
std::unique_ptr< char[]> aBuffer
virtual bool importGnumeric(ScDocument &rDoc, SfxMedium &rMedium) const override
#define SAL_WARN(area, stream)
virtual bool importCSV(ScDocument &rDoc, SfxMedium &rMedium) const override
const SfxPoolItem * GetItem(sal_uInt16 nWhich, bool bSearchInParent=true) const