summaryrefslogtreecommitdiff
path: root/sc/source/core/data/documentimport.cxx
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@gmail.com>2013-05-17 16:39:15 -0400
committerKohei Yoshida <kohei.yoshida@gmail.com>2013-05-20 20:18:46 -0400
commit252a30609357a5b2691b7796cc8f3f4f1319f655 (patch)
tree0f8c23f89a8d9e3f98951dd3c6718b57fa77cd82 /sc/source/core/data/documentimport.cxx
parent430d81e1fd44f51a91b81da91504a004ab7373d8 (diff)
Keep track of column block positions in ScDocumentImport too.
This currently only affects document import via orcus, but it'll be good to put this in place. Change-Id: I8cc6d54aba6fab1f2774127f92c2a764f7b690fb
Diffstat (limited to 'sc/source/core/data/documentimport.cxx')
-rw-r--r--sc/source/core/data/documentimport.cxx55
1 files changed, 36 insertions, 19 deletions
diff --git a/sc/source/core/data/documentimport.cxx b/sc/source/core/data/documentimport.cxx
index c92688f1ada2..ced09363ccc4 100644
--- a/sc/source/core/data/documentimport.cxx
+++ b/sc/source/core/data/documentimport.cxx
@@ -15,24 +15,36 @@
#include "formulacell.hxx"
#include "docoptio.hxx"
#include "globalnames.hxx"
+#include "mtvelements.hxx"
-ScDocumentImport::ScDocumentImport(ScDocument& rDoc) : mrDoc(rDoc) {}
-ScDocumentImport::ScDocumentImport(const ScDocumentImport& r) : mrDoc(r.mrDoc) {}
+struct ScDocumentImportImpl
+{
+ ScDocument& mrDoc;
+ sc::ColumnBlockPositionSet maBlockPosSet;
+
+ ScDocumentImportImpl(ScDocument& rDoc) : mrDoc(rDoc), maBlockPosSet(rDoc) {}
+};
+
+ScDocumentImport::ScDocumentImport(ScDocument& rDoc) : mpImpl(new ScDocumentImportImpl(rDoc)) {}
+ScDocumentImport::~ScDocumentImport()
+{
+ delete mpImpl;
+}
ScDocument& ScDocumentImport::getDoc()
{
- return mrDoc;
+ return mpImpl->mrDoc;
}
const ScDocument& ScDocumentImport::getDoc() const
{
- return mrDoc;
+ return mpImpl->mrDoc;
}
SCTAB ScDocumentImport::getSheetIndex(const OUString& rName) const
{
SCTAB nTab = -1;
- if (!mrDoc.GetTable(rName, nTab))
+ if (!mpImpl->mrDoc.GetTable(rName, nTab))
return -1;
return nTab;
@@ -40,33 +52,34 @@ SCTAB ScDocumentImport::getSheetIndex(const OUString& rName) const
SCTAB ScDocumentImport::getSheetCount() const
{
- return mrDoc.maTabs.size();
+ return mpImpl->mrDoc.maTabs.size();
}
bool ScDocumentImport::appendSheet(const OUString& rName)
{
- SCTAB nTabCount = mrDoc.maTabs.size();
+ SCTAB nTabCount = mpImpl->mrDoc.maTabs.size();
if (!ValidTab(nTabCount))
return false;
- mrDoc.maTabs.push_back(new ScTable(&mrDoc, nTabCount, rName));
+ mpImpl->mrDoc.maTabs.push_back(new ScTable(&mpImpl->mrDoc, nTabCount, rName));
return true;
}
void ScDocumentImport::setOriginDate(sal_uInt16 nYear, sal_uInt16 nMonth, sal_uInt16 nDay)
{
- if (!mrDoc.pDocOptions)
- mrDoc.pDocOptions = new ScDocOptions;
+ if (!mpImpl->mrDoc.pDocOptions)
+ mpImpl->mrDoc.pDocOptions = new ScDocOptions;
- mrDoc.pDocOptions->SetDate(nDay, nMonth, nYear);
+ mpImpl->mrDoc.pDocOptions->SetDate(nDay, nMonth, nYear);
}
void ScDocumentImport::setAutoInput(const ScAddress& rPos, const OUString& rStr)
{
- if (!mrDoc.TableExists(rPos.Tab()))
+ if (!mpImpl->mrDoc.TableExists(rPos.Tab()))
return;
- mrDoc.maTabs[rPos.Tab()]->aCol[rPos.Col()].SetString(rPos.Row(), rPos.Tab(), rStr, mrDoc.GetAddressConvention());
+ mpImpl->mrDoc.maTabs[rPos.Tab()]->aCol[rPos.Col()].SetString(
+ rPos.Row(), rPos.Tab(), rStr, mpImpl->mrDoc.GetAddressConvention());
}
void ScDocumentImport::setNumericCell(const ScAddress& rPos, double fVal)
@@ -82,18 +95,18 @@ void ScDocumentImport::setStringCell(const ScAddress& rPos, const OUString& rStr
void ScDocumentImport::setFormulaCell(
const ScAddress& rPos, const OUString& rFormula, formula::FormulaGrammar::Grammar eGrammar)
{
- insertCell(rPos, new ScFormulaCell(&mrDoc, rPos, rFormula, eGrammar));
+ insertCell(rPos, new ScFormulaCell(&mpImpl->mrDoc, rPos, rFormula, eGrammar));
}
void ScDocumentImport::setFormulaCell(const ScAddress& rPos, const ScTokenArray& rArray)
{
- insertCell(rPos, new ScFormulaCell(&mrDoc, rPos, &rArray));
+ insertCell(rPos, new ScFormulaCell(&mpImpl->mrDoc, rPos, &rArray));
}
void ScDocumentImport::finalize()
{
// Populate the text width and script type arrays in all columns.
- ScDocument::TableContainer::iterator itTab = mrDoc.maTabs.begin(), itTabEnd = mrDoc.maTabs.end();
+ ScDocument::TableContainer::iterator itTab = mpImpl->mrDoc.maTabs.begin(), itTabEnd = mpImpl->mrDoc.maTabs.end();
for (; itTab != itTabEnd; ++itTab)
{
if (!*itTab)
@@ -119,14 +132,18 @@ void ScDocumentImport::finalize()
void ScDocumentImport::insertCell(const ScAddress& rPos, ScBaseCell* pCell)
{
- if (!mrDoc.TableExists(rPos.Tab()))
+ if (!mpImpl->mrDoc.TableExists(rPos.Tab()))
{
pCell->Delete();
return;
}
- ScColumn& rCol = mrDoc.maTabs[rPos.Tab()]->aCol[rPos.Col()];
- rCol.SetCell(rPos.Row(), pCell);
+ ScColumn& rCol = mpImpl->mrDoc.maTabs[rPos.Tab()]->aCol[rPos.Col()];
+ sc::ColumnBlockPosition* p = mpImpl->maBlockPosSet.getBlockPosition(rPos.Tab(), rPos.Col());
+ if (p)
+ rCol.SetCell(*p, rPos.Row(), pCell);
+ else
+ rCol.SetCell(rPos.Row(), pCell);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */