diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-07-02 09:53:54 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-07-02 22:50:37 -0400 |
commit | 7554f619f03e1fcadd333f2792913f412c0a7031 (patch) | |
tree | 05e27cff79361271474bfa5b93d024a6d0f95755 | |
parent | 732076e974291a07f29cddfbb4e0763ddce5fc8c (diff) |
bnc#812796: Correctly handle static value array for OOXML charts.
We need to pass the role of the data sequence in order to avoid unreliable
guess work when importing static value array.
Also, not all Excel's scatter plots have real numeric X values; some have
textural X values in which case Excel switch to generating 1, 2, 3, ... as
X values. When importing to our chart implementation, using "categories" role
in such cases instead of "values-x" results in a more faithful chart rendering.
(cherry picked from commit 6c4e21a234f12e1310ba06f9859e08b424acf8bf)
Conflicts:
chart2/source/inc/InternalDataProvider.hxx
chart2/source/tools/InternalDataProvider.cxx
Conflicts:
chart2/source/inc/InternalDataProvider.hxx
dbaccess/source/core/inc/DatabaseDataProvider.hxx
dbaccess/source/core/misc/DatabaseDataProvider.cxx
sc/source/filter/inc/excelchartconverter.hxx
Change-Id: If4bc1f650bb024dcd1b1b36537f457fb38404a78
-rw-r--r-- | chart2/source/inc/InternalDataProvider.hxx | 8 | ||||
-rw-r--r-- | chart2/source/tools/InternalDataProvider.cxx | 200 | ||||
-rw-r--r-- | dbaccess/source/core/inc/DatabaseDataProvider.hxx | 6 | ||||
-rw-r--r-- | dbaccess/source/core/misc/DatabaseDataProvider.cxx | 8 | ||||
-rw-r--r-- | include/oox/drawingml/chart/chartconverter.hxx | 8 | ||||
-rw-r--r-- | offapi/com/sun/star/chart2/data/XDataProvider.idl | 3 | ||||
-rw-r--r-- | oox/source/drawingml/chart/chartconverter.cxx | 6 | ||||
-rw-r--r-- | oox/source/drawingml/chart/datasourceconverter.cxx | 4 | ||||
-rw-r--r-- | oox/source/drawingml/chart/seriesconverter.cxx | 2 | ||||
-rw-r--r-- | sc/inc/chart2uno.hxx | 4 | ||||
-rw-r--r-- | sc/source/filter/inc/excelchartconverter.hxx | 2 | ||||
-rw-r--r-- | sc/source/filter/oox/excelchartconverter.cxx | 3 | ||||
-rw-r--r-- | sc/source/ui/unoobj/chart2uno.cxx | 8 | ||||
-rw-r--r-- | sw/inc/unochart.hxx | 5 | ||||
-rw-r--r-- | sw/source/core/unocore/unochart.cxx | 8 |
15 files changed, 206 insertions, 69 deletions
diff --git a/chart2/source/inc/InternalDataProvider.hxx b/chart2/source/inc/InternalDataProvider.hxx index 9c03b23b8afb..6ddcded338bc 100644 --- a/chart2/source/inc/InternalDataProvider.hxx +++ b/chart2/source/inc/InternalDataProvider.hxx @@ -135,6 +135,11 @@ public: const OUString& aRangeRepresentation ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); + + virtual css::uno::Reference<css::chart2::data::XDataSequence> SAL_CALL + createDataSequenceByValueArray( const OUString& aRole, const OUString& aRangeRepresentation ) + throw (css::lang::IllegalArgumentException, css::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XRangeSelection > SAL_CALL getRangeSelection() throw (::com::sun::star::uno::RuntimeException); @@ -233,6 +238,9 @@ private: void lcl_deleteMapReferences( const OUString & rRangeRepresentation ); + css::uno::Reference<css::chart2::data::XDataSequence> + createDataSequenceFromArray( const OUString& rArrayStr, const OUString& rRole ); + void lcl_adaptMapReferences( const OUString & rOldRangeRepresentation, const OUString & rNewRangeRepresentation ); diff --git a/chart2/source/tools/InternalDataProvider.cxx b/chart2/source/tools/InternalDataProvider.cxx index fe70d7c59066..842dd632506a 100644 --- a/chart2/source/tools/InternalDataProvider.cxx +++ b/chart2/source/tools/InternalDataProvider.cxx @@ -492,79 +492,155 @@ void InternalDataProvider::lcl_decreaseMapReferences( Reference< chart2::data::XDataSequence > InternalDataProvider::lcl_createDataSequenceAndAddToMap( const OUString & rRangeRepresentation ) { - OUString aRangeRepresentation = rRangeRepresentation; - if( aRangeRepresentation.indexOf('{') >= 0 ) - { - ::std::vector< double > aNewData; - ::std::vector< uno::Any > aNewLabels; - OUString aToken; - sal_Int32 nCategories = 0; - sal_Int32 nIndex = 0; - bool bValues = true; - bool bLabelSet = false; - OUString str = aRangeRepresentation.replace('{',' ').replace('}',' '); - - m_aInternalData.clearDefaultData(); - sal_Int32 n = m_aInternalData.getColumnCount(); - if( n ) - n = n - 1; - - do + Reference<chart2::data::XDataSequence> xSeq = createDataSequenceFromArray(rRangeRepresentation, OUString()); + if (xSeq.is()) + return xSeq; + + xSeq.set(new UncachedDataSequence(this, rRangeRepresentation)); + lcl_addDataSequenceToMap(rRangeRepresentation, xSeq); + return xSeq; +} + +uno::Reference<chart2::data::XDataSequence> +InternalDataProvider::createDataSequenceFromArray( const OUString& rArrayStr, const OUString& rRole ) +{ + if (rArrayStr.indexOf('{') != 0 || rArrayStr[rArrayStr.getLength()-1] != '}') + { + // Not an array string. + return uno::Reference<chart2::data::XDataSequence>(); + } + + bool bAllNumeric = true; + uno::Reference<chart2::data::XDataSequence> xSeq; + + const sal_Unicode* p = rArrayStr.getStr(); + const sal_Unicode* pEnd = p + rArrayStr.getLength(); + const sal_Unicode* pElem = NULL; + OUString aElem; + + std::vector<OUString> aRawElems; + ++p; // Skip the first '{'. + --pEnd; // Skip the last '}'. + bool bInQuote = false; + for (; p != pEnd; ++p) + { + if (*p == '"') { - // TODO: This will be problematic if ';' is used in label names - // '"' character also needs to be considered in such cases - aToken = str.getToken(0,';',nIndex); - if( aToken.isEmpty() ) - break; - if( aToken.indexOf('"') < 0 ) + bInQuote = !bInQuote; + if (bInQuote) { - aNewData.push_back( aToken.toDouble() ); + // Opening quote. + bAllNumeric = false; + ++p; + if (p == pEnd) + break; + pElem = p; } else { - aNewLabels.push_back( uno::makeAny(aToken.replace('"', ' ').trim()) ); - if( !nCategories && - ( !m_aInternalData.getComplexColumnLabel(n).size() || - !m_aInternalData.getComplexColumnLabel(n).front().hasValue() ) ) - { - m_aInternalData.setComplexColumnLabel( n, aNewLabels ); - bLabelSet = true; - } - else - { - m_aInternalData.setComplexRowLabel(nCategories, aNewLabels); - if(nCategories==1 && bLabelSet) - { - ::std::vector< uno::Any > aLabels; - m_aInternalData.setComplexRowLabel( 0, m_aInternalData.getComplexColumnLabel( n ) ); - m_aInternalData.setComplexColumnLabel( n, aLabels ); - } - } - aNewLabels.pop_back(); - nCategories++; - bValues = false; + // Closing quote. + if (pElem) + aElem = OUString(pElem, p-pElem); + aRawElems.push_back(aElem); + pElem = NULL; + aElem = OUString(); + + ++p; // Skip '"'. + if (p == pEnd) + break; } - } while( nIndex >= 0 ); - - if( bValues ) + } + else if (bInQuote) + { + // Do nothing. + } + else if (*p == ';') { - m_aInternalData.insertColumn( n ); - m_aInternalData.setColumnValues( n, aNewData ); - aRangeRepresentation = OUString::number( n ); + // element separator. + if (pElem) + aElem = OUString(pElem, p-pElem); + aRawElems.push_back(aElem); + pElem = NULL; + aElem = OUString(); } - else if( nCategories > 1 ) + else if (!pElem) + pElem = p; + } + + if (pElem) + { + aElem = OUString(pElem, p-pElem); + aRawElems.push_back(aElem); + } + + if (rRole == "values-y" || rRole == "values-first" || rRole == "values-last" || + rRole == "values-min" || rRole == "values-max") + { + // Column values. Append a new data column and populate it. + + std::vector<double> aValues; + aValues.reserve(aRawElems.size()); + for (size_t i = 0; i < aRawElems.size(); ++i) + aValues.push_back(aRawElems[i].toDouble()); + sal_Int32 n = m_aInternalData.appendColumn(); + + m_aInternalData.setColumnValues(n, aValues); + + OUString aRangeRep = OUString::number(n); + xSeq.set(new UncachedDataSequence(this, aRangeRep)); + lcl_addDataSequenceToMap(aRangeRep, xSeq); + } + else if (rRole == "values-x") + { + std::vector<double> aValues; + aValues.reserve(aRawElems.size()); + if (bAllNumeric) { - aRangeRepresentation = lcl_aCategoriesRangeName; + for (size_t i = 0; i < aRawElems.size(); ++i) + aValues.push_back(aRawElems[i].toDouble()); } else { - aRangeRepresentation = lcl_aLabelRangePrefix+OUString::number( n ); + for (size_t i = 0; i < aRawElems.size(); ++i) + aValues.push_back(i+1); + } + + sal_Int32 n = m_aInternalData.appendColumn(); + m_aInternalData.setColumnValues(n, aValues); + + OUString aRangeRep = OUString::number(n); + xSeq.set(new UncachedDataSequence(this, aRangeRep)); + lcl_addDataSequenceToMap(aRangeRep, xSeq); + } + else if (rRole == "categories") + { + // Category labels. + + for (size_t i = 0; i < aRawElems.size(); ++i) + { + std::vector<uno::Any> aLabels(1, uno::makeAny(aRawElems[i])); + m_aInternalData.setComplexRowLabel(i, aLabels); + } + + xSeq.set(new UncachedDataSequence(this, lcl_aCategoriesRangeName)); + lcl_addDataSequenceToMap(lcl_aCategoriesRangeName, xSeq); + } + else if (rRole == "label") + { + // Data series label. There should be only one element. This always + // goes to the last data column. + sal_Int32 nColSize = m_aInternalData.getColumnCount(); + if (!aRawElems.empty() && nColSize) + { + std::vector<uno::Any> aLabels(1, uno::makeAny(aRawElems[0])); + m_aInternalData.setComplexColumnLabel(nColSize-1, aLabels); + + OUString aRangeRep = lcl_aLabelRangePrefix + OUString::number(nColSize-1); + xSeq.set(new UncachedDataSequence(this, aRangeRep)); + lcl_addDataSequenceToMap(aRangeRep, xSeq); } } - Reference< chart2::data::XDataSequence > xSeq( - new UncachedDataSequence( this, aRangeRepresentation )); - lcl_addDataSequenceToMap( aRangeRepresentation, xSeq ); return xSeq; } @@ -765,6 +841,14 @@ Reference< chart2::data::XDataSequence > SAL_CALL InternalDataProvider::createDa return Reference< chart2::data::XDataSequence >(); } +Reference<chart2::data::XDataSequence> SAL_CALL +InternalDataProvider::createDataSequenceByValueArray( + const OUString& aRole, const OUString& aRangeRepresentation ) + throw (lang::IllegalArgumentException, uno::RuntimeException) +{ + return createDataSequenceFromArray(aRangeRepresentation, aRole); +} + Reference< sheet::XRangeSelection > SAL_CALL InternalDataProvider::getRangeSelection() throw (uno::RuntimeException) { diff --git a/dbaccess/source/core/inc/DatabaseDataProvider.hxx b/dbaccess/source/core/inc/DatabaseDataProvider.hxx index c19dc81c6e67..3d928167e4e9 100644 --- a/dbaccess/source/core/inc/DatabaseDataProvider.hxx +++ b/dbaccess/source/core/inc/DatabaseDataProvider.hxx @@ -81,6 +81,12 @@ private: virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL detectArguments(const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSource > & xDataSource) throw (::com::sun::star::uno::RuntimeException); virtual ::sal_Bool SAL_CALL createDataSequenceByRangeRepresentationPossible(const OUString & aRangeRepresentation) throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSequence > SAL_CALL createDataSequenceByRangeRepresentation(const OUString & aRangeRepresentation) throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::IllegalArgumentException); + + virtual css::uno::Reference<css::chart2::data::XDataSequence> SAL_CALL + createDataSequenceByValueArray( + const OUString& aRole, const OUString & aRangeRepresentation) + throw (css::uno::RuntimeException, css::lang::IllegalArgumentException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XRangeSelection > SAL_CALL getRangeSelection() throw (::com::sun::star::uno::RuntimeException); // ::com::sun::star::chart2::data::XRangeXMLConversion: diff --git a/dbaccess/source/core/misc/DatabaseDataProvider.cxx b/dbaccess/source/core/misc/DatabaseDataProvider.cxx index 0666f609a8cf..085c61e6ed74 100644 --- a/dbaccess/source/core/misc/DatabaseDataProvider.cxx +++ b/dbaccess/source/core/misc/DatabaseDataProvider.cxx @@ -302,6 +302,14 @@ uno::Reference< chart2::data::XDataSequence > SAL_CALL DatabaseDataProvider::cre return xData; } +uno::Reference<chart2::data::XDataSequence> +SAL_CALL DatabaseDataProvider::createDataSequenceByValueArray( + const OUString& /*aRole*/, const OUString& /*aRangeRepresentation*/ ) + throw (uno::RuntimeException, lang::IllegalArgumentException) +{ + return uno::Reference<chart2::data::XDataSequence>(); +} + uno::Sequence< uno::Sequence< OUString > > SAL_CALL DatabaseDataProvider::getComplexRowDescriptions() throw (uno::RuntimeException) { return m_xComplexDescriptionAccess->getComplexRowDescriptions(); diff --git a/include/oox/drawingml/chart/chartconverter.hxx b/include/oox/drawingml/chart/chartconverter.hxx index eefc11c8b3a8..360c930c47a5 100644 --- a/include/oox/drawingml/chart/chartconverter.hxx +++ b/include/oox/drawingml/chart/chartconverter.hxx @@ -83,10 +83,10 @@ public: /** Creates a data sequence from a formula. Dummy implementation. Derived classes have to override this function to actually parse the formula. */ - virtual ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSequence > - createDataSequence( - const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataProvider >& rxDataProvider, - const DataSequenceModel& rDataSeq ); + virtual css::uno::Reference<css::chart2::data::XDataSequence> + createDataSequence( + const css::uno::Reference<css::chart2::data::XDataProvider>& rxDataProvider, + const DataSequenceModel& rDataSeq, const OUString& rRole ); private: ChartConverter( const ChartConverter& ); diff --git a/offapi/com/sun/star/chart2/data/XDataProvider.idl b/offapi/com/sun/star/chart2/data/XDataProvider.idl index 3ed73e2c4062..6ab3fd4aaadd 100644 --- a/offapi/com/sun/star/chart2/data/XDataProvider.idl +++ b/offapi/com/sun/star/chart2/data/XDataProvider.idl @@ -126,6 +126,9 @@ interface XDataProvider : ::com::sun::star::uno::XInterface [in] string aRangeRepresentation ) raises( com::sun::star::lang::IllegalArgumentException ); + XDataSequence createDataSequenceByValueArray( [in] string aRole, [in] string aValueArray ) + raises( com::sun::star::lang::IllegalArgumentException ); + /** Returns a component that is able to change a given range representation to another one. This usually is a controller-component that uses the GUI to allow a user to diff --git a/oox/source/drawingml/chart/chartconverter.cxx b/oox/source/drawingml/chart/chartconverter.cxx index 03eff1b50f06..234d063c310e 100644 --- a/oox/source/drawingml/chart/chartconverter.cxx +++ b/oox/source/drawingml/chart/chartconverter.cxx @@ -120,7 +120,9 @@ void ChartConverter::createDataProvider( const Reference< XChartDocument >& rxCh } } -Reference< XDataSequence > ChartConverter::createDataSequence( const Reference< XDataProvider >& rxDataProvider, const DataSequenceModel& rDataSeq ) +Reference< XDataSequence > ChartConverter::createDataSequence( + const Reference< XDataProvider >& rxDataProvider, const DataSequenceModel& rDataSeq, + const OUString& rRole ) { Reference< XDataSequence > xDataSeq; if( rxDataProvider.is() ) @@ -140,7 +142,7 @@ Reference< XDataSequence > ChartConverter::createDataSequence( const Reference< if( !aRangeRep.isEmpty() ) try { // create the data sequence - xDataSeq = rxDataProvider->createDataSequenceByRangeRepresentation( aRangeRep ); + xDataSeq = rxDataProvider->createDataSequenceByValueArray(rRole, aRangeRep); return xDataSeq; } catch( Exception& ) diff --git a/oox/source/drawingml/chart/datasourceconverter.cxx b/oox/source/drawingml/chart/datasourceconverter.cxx index ea22348c3cc0..28ec95fb55be 100644 --- a/oox/source/drawingml/chart/datasourceconverter.cxx +++ b/oox/source/drawingml/chart/datasourceconverter.cxx @@ -78,9 +78,9 @@ Reference< XDataSequence > DataSequenceConverter::createDataSequence( const OUSt mrModel.maData.insert(std::make_pair<sal_Int32, Any>(1, Any(aTitle.makeStringAndClear()))); } } - xDataSeq = getChartConverter()->createDataSequence( getChartDocument()->getDataProvider(), mrModel ); + xDataSeq = getChartConverter()->createDataSequence(getChartDocument()->getDataProvider(), mrModel, rRole); - // set sequen ce role + // set sequence role PropertySet aSeqProp( xDataSeq ); aSeqProp.setProperty( PROP_Role, rRole ); } diff --git a/oox/source/drawingml/chart/seriesconverter.cxx b/oox/source/drawingml/chart/seriesconverter.cxx index 83761e1e58b4..dbd3201a3c98 100644 --- a/oox/source/drawingml/chart/seriesconverter.cxx +++ b/oox/source/drawingml/chart/seriesconverter.cxx @@ -531,7 +531,7 @@ SeriesConverter::~SeriesConverter() Reference< XLabeledDataSequence > SeriesConverter::createCategorySequence( const OUString& rRole ) { - return createLabeledDataSequence( SeriesModel::CATEGORIES, rRole, false ); + return createLabeledDataSequence(SeriesModel::CATEGORIES, rRole, false); } Reference< XLabeledDataSequence > SeriesConverter::createValueSequence( const OUString& rRole ) diff --git a/sc/inc/chart2uno.hxx b/sc/inc/chart2uno.hxx index 4f54357985e9..165d3f8afa6c 100644 --- a/sc/inc/chart2uno.hxx +++ b/sc/inc/chart2uno.hxx @@ -97,6 +97,10 @@ public: const OUString& aRangeRepresentation ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); + virtual css::uno::Reference<css::chart2::data::XDataSequence> SAL_CALL + createDataSequenceByValueArray( const OUString& aRole, const OUString& aRangeRepresentation ) + throw (css::lang::IllegalArgumentException, css::uno::RuntimeException, std::exception) SAL_OVERRIDE; + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XRangeSelection > SAL_CALL getRangeSelection() throw (::com::sun::star::uno::RuntimeException); diff --git a/sc/source/filter/inc/excelchartconverter.hxx b/sc/source/filter/inc/excelchartconverter.hxx index ca2377ad0215..979cdabf4d9d 100644 --- a/sc/source/filter/inc/excelchartconverter.hxx +++ b/sc/source/filter/inc/excelchartconverter.hxx @@ -42,7 +42,7 @@ public: virtual ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSequence > createDataSequence( const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataProvider >& rxDataProvider, - const ::oox::drawingml::chart::DataSequenceModel& rDataSeq ); + const ::oox::drawingml::chart::DataSequenceModel& rDataSeq, const OUString& rRole ); }; // ============================================================================ diff --git a/sc/source/filter/oox/excelchartconverter.cxx b/sc/source/filter/oox/excelchartconverter.cxx index 59870a44cdce..c2f1535e194f 100644 --- a/sc/source/filter/oox/excelchartconverter.cxx +++ b/sc/source/filter/oox/excelchartconverter.cxx @@ -68,7 +68,8 @@ void ExcelChartConverter::createDataProvider( const Reference< XChartDocument >& } Reference< XDataSequence > ExcelChartConverter::createDataSequence( - const Reference< XDataProvider >& rxDataProvider, const DataSequenceModel& rDataSeq ) + const Reference< XDataProvider >& rxDataProvider, const DataSequenceModel& rDataSeq, + const OUString& /*rRole*/ ) { Reference< XDataSequence > xDataSeq; if (!rxDataProvider.is()) diff --git a/sc/source/ui/unoobj/chart2uno.cxx b/sc/source/ui/unoobj/chart2uno.cxx index 10e47d0d1ad3..5d19efbbabab 100644 --- a/sc/source/ui/unoobj/chart2uno.cxx +++ b/sc/source/ui/unoobj/chart2uno.cxx @@ -2076,6 +2076,14 @@ uno::Reference< chart2::data::XDataSequence > SAL_CALL return xResult; } +uno::Reference<chart2::data::XDataSequence> SAL_CALL +ScChart2DataProvider::createDataSequenceByValueArray( + const OUString& /*aRole*/, const OUString& /*aRangeRepresentation*/ ) + throw (css::lang::IllegalArgumentException, css::uno::RuntimeException, std::exception) +{ + return uno::Reference<chart2::data::XDataSequence>(); +} + uno::Reference< sheet::XRangeSelection > SAL_CALL ScChart2DataProvider::getRangeSelection() throw (uno::RuntimeException) { diff --git a/sw/inc/unochart.hxx b/sw/inc/unochart.hxx index 753035d33f00..40b374f0cf77 100644 --- a/sw/inc/unochart.hxx +++ b/sw/inc/unochart.hxx @@ -178,6 +178,11 @@ public: virtual ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSequence > SAL_CALL createDataSequenceByRangeRepresentation( const OUString& aRangeRepresentation ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XRangeSelection > SAL_CALL getRangeSelection( ) throw (::com::sun::star::uno::RuntimeException); + virtual css::uno::Reference<css::chart2::data::XDataSequence> + SAL_CALL createDataSequenceByValueArray( + const OUString& aRole, const OUString& aRangeRepresentation ) + throw (css::lang::IllegalArgumentException, css::uno::RuntimeException, std::exception) SAL_OVERRIDE; + // XRangeXMLConversion virtual OUString SAL_CALL convertRangeToXML( const OUString& aRangeRepresentation ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); virtual OUString SAL_CALL convertRangeFromXML( const OUString& aXMLRange ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx index 965c332a94e1..7919a8d879c0 100644 --- a/sw/source/core/unocore/unochart.cxx +++ b/sw/source/core/unocore/unochart.cxx @@ -1453,6 +1453,14 @@ uno::Reference< sheet::XRangeSelection > SAL_CALL SwChartDataProvider::getRangeS return uno::Reference< sheet::XRangeSelection >(); } +uno::Reference<css::chart2::data::XDataSequence> SAL_CALL + SwChartDataProvider::createDataSequenceByValueArray( + const OUString& /*aRole*/, const OUString& /*aRangeRepresentation*/ ) + throw (lang::IllegalArgumentException, uno::RuntimeException, std::exception) +{ + return uno::Reference<css::chart2::data::XDataSequence>(); +} + void SAL_CALL SwChartDataProvider::dispose( ) throw (uno::RuntimeException) { |