summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@gmail.com>2017-12-07 21:58:16 -0500
committerKohei Yoshida <libreoffice@kohei.us>2017-12-18 02:32:56 +0100
commit599a23b17818bbeea85b6ab0b57401e4ff2cd5c0 (patch)
tree7d8646c1da5bdfe7da77f6e2c8a2149d19e9e4b4
parentd0197ae70a31e02f7ec3c251745470024b287418 (diff)
Take into account the fact that ScDocument already has one sheet.
ScDocument already has one sheet upon creation, so we need to avoid appending sheet when the request is for the first sheet. Change-Id: Ie5526d6791e545f5faa0bf3f16988351c09e94c8 Reviewed-on: https://gerrit.libreoffice.org/46658 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Kohei Yoshida <libreoffice@kohei.us>
-rw-r--r--sc/inc/documentimport.hxx1
-rw-r--r--sc/source/core/data/documentimport.cxx5
-rw-r--r--sc/source/filter/orcus/interface.cxx12
-rw-r--r--sc/source/filter/orcus/orcusfiltersimpl.cxx13
4 files changed, 23 insertions, 8 deletions
diff --git a/sc/inc/documentimport.hxx b/sc/inc/documentimport.hxx
index 00496cdaac2b..03f415c381cc 100644
--- a/sc/inc/documentimport.hxx
+++ b/sc/inc/documentimport.hxx
@@ -87,6 +87,7 @@ public:
SCTAB getSheetIndex(const OUString& rName) const;
SCTAB getSheetCount() const;
bool appendSheet(const OUString& rName);
+ void setSheetName(SCTAB nTab, const OUString& rName);
void setOriginDate(sal_uInt16 nYear, sal_uInt16 nMonth, sal_uInt16 nDay);
diff --git a/sc/source/core/data/documentimport.cxx b/sc/source/core/data/documentimport.cxx
index c46f1b09c95d..c41e134558bf 100644
--- a/sc/source/core/data/documentimport.cxx
+++ b/sc/source/core/data/documentimport.cxx
@@ -167,6 +167,11 @@ bool ScDocumentImport::appendSheet(const OUString& rName)
return true;
}
+void ScDocumentImport::setSheetName(SCTAB nTab, const OUString& rName)
+{
+ mpImpl->mrDoc.SetTabNameOnLoad(nTab, rName);
+}
+
void ScDocumentImport::setOriginDate(sal_uInt16 nYear, sal_uInt16 nMonth, sal_uInt16 nDay)
{
if (!mpImpl->mrDoc.pDocOptions)
diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx
index 4a2f5567f583..eff9570e66c3 100644
--- a/sc/source/filter/orcus/interface.cxx
+++ b/sc/source/filter/orcus/interface.cxx
@@ -85,9 +85,19 @@ ScOrcusFactory::ScOrcusFactory(ScDocument& rDoc) :
mnProgress(0) {}
orcus::spreadsheet::iface::import_sheet* ScOrcusFactory::append_sheet(
- orcus::spreadsheet::sheet_t /*sheet_index*/, const char* sheet_name, size_t sheet_name_length)
+ orcus::spreadsheet::sheet_t sheet_index, const char* sheet_name, size_t sheet_name_length)
{
OUString aTabName(sheet_name, sheet_name_length, RTL_TEXTENCODING_UTF8);
+
+ if (sheet_index == 0)
+ {
+ // The calc document initializes with one sheet already present.
+ assert(maDoc.getSheetCount() == 1);
+ maDoc.setSheetName(0, aTabName);
+ maSheets.push_back(o3tl::make_unique<ScOrcusSheet>(maDoc, 0, *this));
+ return maSheets.back().get();
+ }
+
if (!maDoc.appendSheet(aTabName))
return nullptr;
diff --git a/sc/source/filter/orcus/orcusfiltersimpl.cxx b/sc/source/filter/orcus/orcusfiltersimpl.cxx
index fbbdd0b64e53..8683749fdd7c 100644
--- a/sc/source/filter/orcus/orcusfiltersimpl.cxx
+++ b/sc/source/filter/orcus/orcusfiltersimpl.cxx
@@ -55,7 +55,7 @@ uno::Reference<task::XStatusIndicator> getStatusIndicator(const SfxMedium& rMedi
return xStatusIndicator;
}
-bool loadFileContent(ScDocument& rDoc, SfxMedium& rMedium, orcus::iface::import_filter& filter)
+bool loadFileContent(SfxMedium& rMedium, orcus::iface::import_filter& filter)
{
SvStream* pStream = rMedium.GetInStream();
pStream->Seek(0);
@@ -72,7 +72,6 @@ bool loadFileContent(ScDocument& rDoc, SfxMedium& rMedium, orcus::iface::import_
try
{
- rDoc.ClearTabs();
filter.read_stream(aBuffer.getStr(), aBuffer.getLength());
}
catch (const std::exception& e)
@@ -98,7 +97,7 @@ bool ScOrcusFiltersImpl::importCSV(ScDocument& rDoc, SfxMedium& rMedium) const
aFactory.setStatusIndicator(getStatusIndicator(rMedium));
orcus::orcus_csv filter(&aFactory);
- return loadFileContent(rDoc, rMedium, filter);
+ return loadFileContent(rMedium, filter);
}
bool ScOrcusFiltersImpl::importGnumeric(ScDocument& rDoc, SfxMedium& rMedium) const
@@ -107,7 +106,7 @@ bool ScOrcusFiltersImpl::importGnumeric(ScDocument& rDoc, SfxMedium& rMedium) co
aFactory.setStatusIndicator(getStatusIndicator(rMedium));
orcus::orcus_gnumeric filter(&aFactory);
- return loadFileContent(rDoc, rMedium, filter);
+ return loadFileContent(rMedium, filter);
}
bool ScOrcusFiltersImpl::importExcel2003XML(ScDocument& rDoc, SfxMedium& rMedium) const
@@ -116,7 +115,7 @@ bool ScOrcusFiltersImpl::importExcel2003XML(ScDocument& rDoc, SfxMedium& rMedium
aFactory.setStatusIndicator(getStatusIndicator(rMedium));
orcus::orcus_xls_xml filter(&aFactory);
- return loadFileContent(rDoc, rMedium, filter);
+ return loadFileContent(rMedium, filter);
}
bool ScOrcusFiltersImpl::importXLSX(ScDocument& rDoc, SfxMedium& rMedium) const
@@ -125,7 +124,7 @@ bool ScOrcusFiltersImpl::importXLSX(ScDocument& rDoc, SfxMedium& rMedium) const
aFactory.setStatusIndicator(getStatusIndicator(rMedium));
orcus::orcus_xlsx filter(&aFactory);
- return loadFileContent(rDoc, rMedium, filter);
+ return loadFileContent(rMedium, filter);
}
bool ScOrcusFiltersImpl::importODS(ScDocument& rDoc, SfxMedium& rMedium) const
@@ -134,7 +133,7 @@ bool ScOrcusFiltersImpl::importODS(ScDocument& rDoc, SfxMedium& rMedium) const
aFactory.setStatusIndicator(getStatusIndicator(rMedium));
orcus::orcus_ods filter(&aFactory);
- return loadFileContent(rDoc, rMedium, filter);
+ return loadFileContent(rMedium, filter);
}
bool ScOrcusFiltersImpl::importODS_Styles(ScDocument& rDoc, OUString& aPath) const