summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/source/filter/orcus/orcusfiltersimpl.cxx16
1 files changed, 13 insertions, 3 deletions
diff --git a/sc/source/filter/orcus/orcusfiltersimpl.cxx b/sc/source/filter/orcus/orcusfiltersimpl.cxx
index 61cf0b488891..f96fb9f3373f 100644
--- a/sc/source/filter/orcus/orcusfiltersimpl.cxx
+++ b/sc/source/filter/orcus/orcusfiltersimpl.cxx
@@ -87,13 +87,23 @@ bool ScOrcusFiltersImpl::importGnumeric(ScDocument& rDoc, SfxMedium& rMedium) co
{
ScOrcusFactory aFactory(rDoc);
aFactory.setStatusIndicator(getStatusIndicator(rMedium));
- OString aSysPath = toSystemPath(rMedium.GetName());
- const char* path = aSysPath.getStr();
+ SvStream* pStream = rMedium.GetInStream();
+ pStream->Seek(0);
+ static const size_t nReadBuffer = 1024*32;
+ OStringBuffer aBuffer((int(nReadBuffer)));
+ size_t nRead = 0;
+ do
+ {
+ char pData[nReadBuffer];
+ nRead = pStream->ReadBytes(pData, nReadBuffer);
+ aBuffer.append(static_cast<sal_Char*>(pData), nRead);
+ }
+ while (nRead == nReadBuffer);
try
{
orcus::orcus_gnumeric filter(&aFactory);
- filter.read_file(path);
+ filter.read_stream(aBuffer.getStr(), aBuffer.getLength());
}
catch (const std::exception& e)
{