diff options
author | Eike Rathke <erack@redhat.com> | 2018-01-17 22:22:55 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-01-27 21:06:16 +0100 |
commit | 2bef4debcf7650f3b3922134dff0332d4a95da3f (patch) | |
tree | 3759176aba6af01d08db6d715c627fd300c5e88a /sc | |
parent | 74812a91ff29f6968dceba093250064985c0baa7 (diff) |
CheckLinkFormulaNeedingCheck() for .xls and .xlsx formula cells
This is a combination of 3 commits.
Move implementation to CheckLinkFormulaNeedingCheck() for further reuse
(cherry picked from commit 55e484c7bcd3ef218e08d3fd93f97bf98fd8cb7f)
CheckLinkFormulaNeedingCheck() for .xlsx cell formulas
(cherry picked from commit f96dbc3dd9c33202f75e29ef49d962386595995d)
CheckLinkFormulaNeedingCheck() for .xls cell formulas
(cherry picked from commit 6bc48275558c3f76c4da25eb8af3c48583ac5599)
a6dd195f7eb4d43483e87eeca59f651e7bf2dcb8
2587fbc4fec39b6f2c8e733331815a2953dee308
Change-Id: I541d2b6e12a88371c064b901b00e71206ee0c18e
Reviewed-on: https://gerrit.libreoffice.org/48143
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/document.hxx | 2 | ||||
-rw-r--r-- | sc/source/core/data/documen8.cxx | 10 | ||||
-rw-r--r-- | sc/source/core/data/formulacell.cxx | 3 | ||||
-rw-r--r-- | sc/source/filter/excel/excform.cxx | 1 | ||||
-rw-r--r-- | sc/source/filter/excel/excform8.cxx | 1 | ||||
-rw-r--r-- | sc/source/filter/excel/impop.cxx | 1 | ||||
-rw-r--r-- | sc/source/filter/oox/formulabuffer.cxx | 4 |
7 files changed, 20 insertions, 2 deletions
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index 30c15bcea696..fedd52423c53 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -1941,6 +1941,8 @@ public: bool HasLinkFormulaNeedingCheck() const { return bLinkFormulaNeedingCheck; } void SetLinkFormulaNeedingCheck(bool bSet) { bLinkFormulaNeedingCheck = bSet; } + /** Check token array and set link check if ocDde/ocWebservice is contained. */ + SC_DLLPUBLIC void CheckLinkFormulaNeedingCheck( const ScTokenArray& rCode ); void SetRangeOverflowType(sal_uInt32 nType) { nRangeOverflowType = nType; } bool HasRangeOverflow() const { return nRangeOverflowType != 0; } diff --git a/sc/source/core/data/documen8.cxx b/sc/source/core/data/documen8.cxx index 79eee1794b0e..9cf09ddb4c70 100644 --- a/sc/source/core/data/documen8.cxx +++ b/sc/source/core/data/documen8.cxx @@ -86,6 +86,7 @@ #include "stringutil.hxx" #include <documentlinkmgr.hxx> #include <scopetools.hxx> +#include <tokenarray.hxx> #include <memory> @@ -1151,6 +1152,15 @@ void ScDocument::UpdateRefAreaLinks( UpdateRefMode eUpdateRefMode, } } +void ScDocument::CheckLinkFormulaNeedingCheck( const ScTokenArray& rCode ) +{ + if (HasLinkFormulaNeedingCheck()) + return; + + if (rCode.HasOpCodeRPN(ocDde) || rCode.HasOpCodeRPN(ocWebservice)) + SetLinkFormulaNeedingCheck(true); +} + // TimerDelays etc. void ScDocument::KeyInput() { diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx index 444a66b33196..809a04de325d 100644 --- a/sc/source/core/data/formulacell.cxx +++ b/sc/source/core/data/formulacell.cxx @@ -1370,8 +1370,7 @@ void ScFormulaCell::CompileXML( sc::CompileFormulaContext& rCxt, ScProgress& rPr // After loading, it must be known if ocDde/ocWebservice is in any formula // (for external links warning, CompileXML is called at the end of loading XML file) - if (!pDocument->HasLinkFormulaNeedingCheck() && (pCode->HasOpCodeRPN(ocDde) || pCode->HasOpCodeRPN(ocWebservice))) - pDocument->SetLinkFormulaNeedingCheck(true); + pDocument->CheckLinkFormulaNeedingCheck(*pCode); //volatile cells must be added here for import if( pCode->IsRecalcModeAlways() || pCode->IsRecalcModeForced() || diff --git a/sc/source/filter/excel/excform.cxx b/sc/source/filter/excel/excform.cxx index 8ed97f50c82e..312f8ce153c5 100644 --- a/sc/source/filter/excel/excform.cxx +++ b/sc/source/filter/excel/excform.cxx @@ -157,6 +157,7 @@ void ImportExcel::Formula( { pCell = new ScFormulaCell(&rDoc.getDoc(), aScPos, *pResult); pCell->GetCode()->WrapReference(aScPos, EXC_MAXCOL8, EXC_MAXROW8); + rDoc.getDoc().CheckLinkFormulaNeedingCheck( *pCell->GetCode()); rDoc.getDoc().EnsureTable(aScPos.Tab()); rDoc.setFormulaCell(aScPos, pCell); SetLastFormula(aScPos.Col(), aScPos.Row(), fCurVal, nXF, pCell); diff --git a/sc/source/filter/excel/excform8.cxx b/sc/source/filter/excel/excform8.cxx index 089b6da9bcdb..b72d0c03bf2c 100644 --- a/sc/source/filter/excel/excform8.cxx +++ b/sc/source/filter/excel/excform8.cxx @@ -730,6 +730,7 @@ ConvErr ExcelToSc8::Convert( const ScTokenArray*& rpTokArray, XclImpStream& aIn, << nMerk0 << ocClose; aPool >> aStack; pExtName->CreateDdeData( GetDoc(), aApplic, aTopic ); + GetDoc().SetLinkFormulaNeedingCheck(true); } } break; diff --git a/sc/source/filter/excel/impop.cxx b/sc/source/filter/excel/impop.cxx index 51a401db0a26..804b3e23474b 100644 --- a/sc/source/filter/excel/impop.cxx +++ b/sc/source/filter/excel/impop.cxx @@ -862,6 +862,7 @@ void ImportExcel::Shrfmla() ScFormulaCell* pCell = new ScFormulaCell(pD, aPos, *pErgebnis); pCell->GetCode()->WrapReference(aPos, EXC_MAXCOL8, EXC_MAXROW8); + rDoc.getDoc().CheckLinkFormulaNeedingCheck( *pCell->GetCode()); rDoc.getDoc().EnsureTable(aPos.Tab()); rDoc.setFormulaCell(aPos, pCell); pCell->SetNeedNumberFormat(false); diff --git a/sc/source/filter/oox/formulabuffer.cxx b/sc/source/filter/oox/formulabuffer.cxx index e7dbc948c5aa..61026a8a34e6 100644 --- a/sc/source/filter/oox/formulabuffer.cxx +++ b/sc/source/filter/oox/formulabuffer.cxx @@ -213,6 +213,10 @@ void applyCellFormulas( continue; aCompiler.CompileTokenArray(); // Generate RPN tokens. + + // Check if ocDde/ocWebservice is in any formula for external links warning. + rDoc.getDoc().CheckLinkFormulaNeedingCheck(*pCode); + ScFormulaCell* pCell = new ScFormulaCell(&rDoc.getDoc(), aPos, pCode); rDoc.setFormulaCell(aPos, pCell); rCache.store(aPos, pCell); |