diff options
author | Kohei Yoshida <kohei.yoshida@gmail.com> | 2017-12-07 21:58:16 -0500 |
---|---|---|
committer | Kohei Yoshida <libreoffice@kohei.us> | 2017-12-18 02:32:56 +0100 |
commit | 599a23b17818bbeea85b6ab0b57401e4ff2cd5c0 (patch) | |
tree | 7d8646c1da5bdfe7da77f6e2c8a2149d19e9e4b4 | |
parent | d0197ae70a31e02f7ec3c251745470024b287418 (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.hxx | 1 | ||||
-rw-r--r-- | sc/source/core/data/documentimport.cxx | 5 | ||||
-rw-r--r-- | sc/source/filter/orcus/interface.cxx | 12 | ||||
-rw-r--r-- | sc/source/filter/orcus/orcusfiltersimpl.cxx | 13 |
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 |