Kaydet (Commit) 599a23b1 authored tarafından Kohei Yoshida's avatar Kohei Yoshida Kaydeden (comit) Kohei Yoshida

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/46658Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarKohei Yoshida <libreoffice@kohei.us>
üst d0197ae7
......@@ -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);
......
......@@ -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)
......
......@@ -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;
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment