summaryrefslogtreecommitdiff
path: root/sc/source/core/data/document.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/core/data/document.cxx')
-rw-r--r--sc/source/core/data/document.cxx56
1 files changed, 18 insertions, 38 deletions
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index e21b87806..62e48c54d 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -1860,9 +1860,12 @@ void ScDocument::UndoToDocument(const ScRange& rRange,
pDestDoc->SetAutoCalc( bOldAutoCalc );
}
+// bUseRangeForVBA added for VBA api support to allow content of a specified
+// range to be copied ( e.g. don't use marked data but the just the range
+// specified by rClipParam
void ScDocument::CopyToClip(const ScClipParam& rClipParam,
ScDocument* pClipDoc, const ScMarkData* pMarks,
- bool bAllTabs, bool bKeepScenarioFlags, bool bIncludeObjects, bool bCloneNoteCaptions)
+ bool bAllTabs, bool bKeepScenarioFlags, bool bIncludeObjects, bool bCloneNoteCaptions, bool bUseRangeForVBA )
{
OSL_ENSURE( bAllTabs || pMarks, "CopyToClip: ScMarkData fails" );
@@ -1877,12 +1880,23 @@ void ScDocument::CopyToClip(const ScClipParam& rClipParam,
pClipDoc->aDocName = aDocName;
pClipDoc->SetClipParam(rClipParam);
- pClipDoc->ResetClip(this, pMarks);
-
ScRange aClipRange = rClipParam.getWholeRange();
+ SCTAB nTab = aClipRange.aStart.Tab();
+ SCTAB i = 0;
+ SCTAB nEndTab = static_cast<SCTAB>(maTabs.size());
+
+ if ( bUseRangeForVBA )
+ {
+ pClipDoc->ResetClip( this, nTab );
+ i = nTab;
+ nEndTab = nTab;
+ }
+ else
+ pClipDoc->ResetClip(this, pMarks);
+
CopyRangeNamesToClip(pClipDoc, aClipRange, pMarks, bAllTabs);
- for (SCTAB i = 0; i < static_cast<SCTAB>(maTabs.size()); ++i)
+ for ( ; i < nTab; ++i)
{
if (!maTabs[i] || i >= static_cast<SCTAB>(pClipDoc->maTabs.size()) || !pClipDoc->maTabs[i])
continue;
@@ -1905,40 +1919,6 @@ void ScDocument::CopyToClip(const ScClipParam& rClipParam,
pClipDoc->ExtendMerge(aClipRange, true);
}
-// Copy the content of the Range into clipboard. Adding this method for VBA API: Range.Copy().
-void ScDocument::CopyToClip4VBA(const ScClipParam& rClipParam, ScDocument* pClipDoc, bool bKeepScenarioFlags, bool bIncludeObjects, bool bCloneNoteCaptions)
-{
- if ( !bIsClip )
- {
- pClipDoc = pClipDoc ? pClipDoc : SC_MOD()->GetClipDoc();
- if ( !pClipDoc )
- {
- return;
- }
- ScRange aClipRange = rClipParam.getWholeRange();
- SCTAB nTab = aClipRange.aStart.Tab();
- pClipDoc->aDocName = aDocName;
- pClipDoc->SetClipParam( rClipParam );
- pClipDoc->ResetClip( this, nTab );
-
- CopyRangeNamesToClip( pClipDoc, aClipRange, nTab );
- if ( nTab < static_cast<SCTAB>(maTabs.size()) && nTab < static_cast<SCTAB>(pClipDoc->maTabs.size()) )
- if ( maTabs[nTab] && pClipDoc->maTabs[nTab] )
- {
- maTabs[nTab]->CopyToClip( rClipParam.maRanges, pClipDoc->maTabs[nTab], bKeepScenarioFlags, bCloneNoteCaptions );
- if ( pDrawLayer && bIncludeObjects )
- {
- // Also copy drawing objects.
- Rectangle aObjRect = GetMMRect( aClipRange.aStart.Col(), aClipRange.aStart.Row(), aClipRange.aEnd.Col(), aClipRange.aEnd.Row(), nTab );
- pDrawLayer->CopyToClip( pClipDoc, nTab, aObjRect );
- }
- }
-
- // Make sure to mark overlapped cells.
- pClipDoc->ExtendMerge( aClipRange, true );
- }
-}
-
void ScDocument::CopyTabToClip(SCCOL nCol1, SCROW nRow1,
SCCOL nCol2, SCROW nRow2,
SCTAB nTab, ScDocument* pClipDoc)