sc/qa/unit/data/contentCSV/matrix2.csv | 1 + sc/qa/unit/data/ods/matrix.ods |binary sc/qa/unit/subsequent_filters-test.cxx | 11 ++++++++++- sc/source/filter/xml/xmlcelli.cxx | 24 +++++++++++++++++++----- 4 files changed, 30 insertions(+), 6 deletions(-)
New commits: commit 7c7bbed45a883d10002879914e0fcbe84a0b1100 Author: Daniel Bankston <daniel.e.banks...@gmail.com> Date: Thu Jul 19 17:26:35 2012 -0500 Display blank cell instead of zero in matrix cells with blank text result Change-Id: Id9d17403717e42b91b1f45b0a081e2fb5a27c06e diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx index ede4131..26d01aa 100644 --- a/sc/source/filter/xml/xmlcelli.cxx +++ b/sc/source/filter/xml/xmlcelli.cxx @@ -189,7 +189,8 @@ ScXMLTableRowCellContext::ScXMLTableRowCellContext( ScXMLImport& rImport, bIsEmpty = false; //if office:value="0", treat like text in case the formula - //result is "Err:###" or "#N/A" until we confirm otherwise + //result is "Err:###", "#N/A", or matrix reference cell with + //blank text result until we confirm otherwise. if(fValue == 0.0) bFormulaTextResult = true; } @@ -1109,9 +1110,21 @@ void ScXMLTableRowCellContext::AddFormulaCell( const ScAddress& rCellPos ) namespace{ -bool isErrOrNA(const rtl::OUString& rStr) +bool isSpecialValue(const rtl::OUString& rStr, sal_Int16& rnCellType) { - return (rStr.indexOf("Err:") > -1) || (rStr.indexOf("#N/A") > -1); + if( (rStr.indexOf("Err:") > -1) || (rStr.indexOf("#N/A") > -1) ) + return true; + //If a matrix formula has a matrix reference cell that is intended to have + //a blank text result, the matrix reference cell is actually saved(export) + //as a float cell with 0 as the value and empty <text:p/>. + //Import works around this by setting these cells as text cells so that + //the blank text is used for display instead of the number 0. + if( rStr.isEmpty() ) + { + rnCellType = util::NumberFormat::TEXT; + return true; + } + return false; } } @@ -1132,8 +1145,9 @@ void ScXMLTableRowCellContext::EndElement() } } - //if this is an "Err:###" or "#N/A" then use text:p value - if( bFormulaTextResult && pOUTextContent && isErrOrNA(*pOUTextContent) ) + //if this is a blank matrix formula result, "Err:###", or "#N/A" then + //use text:p string because of the way export saves these types of cells. + if( bFormulaTextResult && pOUTextContent && isSpecialValue(*pOUTextContent, nCellType) ) pOUTextValue.reset(*pOUTextContent); ScAddress aCellPos = rXMLImport.GetTables().GetCurrentCellPos(); commit 7ab3fe49b6a2fb4344e2452b1ff7b8566cbeb1d1 Author: Daniel Bankston <daniel.e.banks...@gmail.com> Date: Thu Jul 19 17:23:06 2012 -0500 Add test case for matrix reference cells with blank text result Change-Id: If00d424ebe0d82284c3281c3362f2a9e52ee384e diff --git a/sc/qa/unit/data/contentCSV/matrix2.csv b/sc/qa/unit/data/contentCSV/matrix2.csv index 955d345..2effd61 100644 --- a/sc/qa/unit/data/contentCSV/matrix2.csv +++ b/sc/qa/unit/data/contentCSV/matrix2.csv @@ -3,3 +3,4 @@ Err:502,Err:502,Err:502,,error result #N/A,#N/A,#N/A,,n/a TRUE,TRUE,TRUE,,Display TRUE instead of 1 FALSE,FALSE,FALSE,,Display FALSE instead of 0 +42,,42,,Display blank cell instead of 0 diff --git a/sc/qa/unit/data/ods/matrix.ods b/sc/qa/unit/data/ods/matrix.ods index 2a8c4ab..7d26c2f 100644 Binary files a/sc/qa/unit/data/ods/matrix.ods and b/sc/qa/unit/data/ods/matrix.ods differ diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx index 9a3c5dd..6688e0f 100644 --- a/sc/qa/unit/subsequent_filters-test.cxx +++ b/sc/qa/unit/subsequent_filters-test.cxx @@ -44,6 +44,7 @@ #include <editeng/borderline.hxx> #include <dbdata.hxx> #include "validat.hxx" +#include "cell.hxx" #include <com/sun/star/drawing/XDrawPageSupplier.hpp> #include <com/sun/star/drawing/XControlShape.hpp> @@ -423,9 +424,17 @@ void ScFiltersTest::testCachedMatrixFormulaResultsODS() rtl::OUString aCSVFileName; createCSVPath(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("matrix.")), aCSVFileName); testFile(aCSVFileName, pDoc, 0); - //test matrix with errors + //test matrices with special cases createCSVPath(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("matrix2.")), aCSVFileName); testFile(aCSVFileName, pDoc, 1); + //The above testFile() does not catch the below case. + //If a matrix formula has a matrix reference cell that is intended to have + //a blank text result, the matrix reference cell is actually saved(export) + //as a float cell with 0 as the value and an empty <text:p/>. + //Import works around this by setting these cells as text cells so that + //the blank text is used for display instead of the number 0. + //If this is working properly, the following cell should NOT have value data. + CPPUNIT_ASSERT(!pDoc->GetCell(ScAddress(3,5,1))->HasValueData()); xDocSh->DoClose(); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits