[Libreoffice-commits] core.git: Branch 'private/kohei/excel-2003-xml-orcus-filter' - 2 commits - sc/inc sc/source

Kohei Yoshida kohei.yoshida at gmail.com
Fri Dec 8 03:25:34 UTC 2017


 sc/inc/document.hxx                         |    1 -
 sc/inc/documentimport.hxx                   |    1 +
 sc/source/core/data/document.cxx            |    9 ---------
 sc/source/core/data/documentimport.cxx      |    5 +++++
 sc/source/filter/orcus/interface.cxx        |   12 +++++++++++-
 sc/source/filter/orcus/orcusfiltersimpl.cxx |   13 ++++++-------
 6 files changed, 23 insertions(+), 18 deletions(-)

New commits:
commit 117b51101eaefc6ee14a193982927e812f60e803
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Thu Dec 7 22:24:12 2017 -0500

    Remove unused method.
    
    Change-Id: Idc7919f04898b0298d6448d2dd84222b211cf5db

diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 3096dc7aa5df..5c1b93763d1c 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -870,7 +870,6 @@ public:
                                             bool bNamesValid = false );
     SC_DLLPUBLIC bool           DeleteTabs( SCTAB nTab, SCTAB nSheets );
     SC_DLLPUBLIC bool           DeleteTab( SCTAB nTab );
-    SC_DLLPUBLIC void           ClearTabs();
     SC_DLLPUBLIC bool           RenameTab( SCTAB nTab, const OUString& rName,
                                            bool bExternalDocument = false );
     bool                        MoveTab( SCTAB nOldPos, SCTAB nNewPos, ScProgress* pProgress = nullptr );
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 2151269a1612..f286a88782ab 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -783,15 +783,6 @@ bool ScDocument::DeleteTab( SCTAB nTab )
     return bValid;
 }
 
-void ScDocument::ClearTabs()
-{
-    for (auto& it: maTabs)
-    {
-        delete it;
-    }
-    maTabs.clear();
-}
-
 bool ScDocument::DeleteTabs( SCTAB nTab, SCTAB nSheets )
 {
     bool bValid = false;
commit 86b0685583480714f6431b73ae1017fe31ec8d85
Author: Kohei Yoshida <kohei.yoshida at gmail.com>
Date:   Thu Dec 7 21:58:16 2017 -0500

    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

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 50b009cae3b9..d321954c7741 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


More information about the Libreoffice-commits mailing list