summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2014-07-02 09:53:54 -0400
committerKohei Yoshida <kohei.yoshida@collabora.com>2014-07-02 20:56:31 -0400
commit6c4e21a234f12e1310ba06f9859e08b424acf8bf (patch)
tree043739400b16c923a30b45e5bc1eff4490ee410f
parent5e2b7e37a29edf45f829ccee2302a942b54568a1 (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. Change-Id: If4bc1f650bb024dcd1b1b36537f457fb38404a78
-rw-r--r--chart2/source/inc/InternalDataProvider.hxx8
-rw-r--r--chart2/source/tools/InternalDataProvider.cxx200
-rw-r--r--dbaccess/source/core/inc/DatabaseDataProvider.hxx6
-rw-r--r--dbaccess/source/core/misc/DatabaseDataProvider.cxx8
-rw-r--r--include/oox/drawingml/chart/chartconverter.hxx8
-rw-r--r--offapi/com/sun/star/chart2/data/XDataProvider.idl3
-rw-r--r--oox/source/drawingml/chart/chartconverter.cxx6
-rw-r--r--oox/source/drawingml/chart/datasourceconverter.cxx4
-rw-r--r--oox/source/drawingml/chart/seriesconverter.cxx2
-rw-r--r--sc/inc/chart2uno.hxx4
-rw-r--r--sc/source/filter/inc/excelchartconverter.hxx8
-rw-r--r--sc/source/filter/oox/excelchartconverter.cxx3
-rw-r--r--sc/source/ui/unoobj/chart2uno.cxx8
-rw-r--r--sw/inc/unochart.hxx5
-rw-r--r--sw/source/core/unocore/unochart.cxx8
15 files changed, 209 insertions, 72 deletions
diff --git a/chart2/source/inc/InternalDataProvider.hxx b/chart2/source/inc/InternalDataProvider.hxx
index 526ca2d04fd5..459ffb8adb85 100644
--- a/chart2/source/inc/InternalDataProvider.hxx
+++ b/chart2/source/inc/InternalDataProvider.hxx
@@ -134,6 +134,11 @@ public:
const OUString& aRangeRepresentation )
throw (::com::sun::star::lang::IllegalArgumentException,
::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+ 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, std::exception) SAL_OVERRIDE;
@@ -230,6 +235,9 @@ private:
::com::sun::star::chart2::data::XDataSequence >
createDataSequenceAndAddToMap( const OUString & rRangeRepresentation );
+ css::uno::Reference<css::chart2::data::XDataSequence>
+ createDataSequenceFromArray( const OUString& rArrayStr, const OUString& rRole );
+
void deleteMapReferences( const OUString & rRangeRepresentation );
void adaptMapReferences(
diff --git a/chart2/source/tools/InternalDataProvider.cxx b/chart2/source/tools/InternalDataProvider.cxx
index 20886fa97c4f..ee2dcfe9a5e4 100644
--- a/chart2/source/tools/InternalDataProvider.cxx
+++ b/chart2/source/tools/InternalDataProvider.cxx
@@ -491,79 +491,155 @@ void InternalDataProvider::decreaseMapReferences(
Reference< chart2::data::XDataSequence > InternalDataProvider::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));
+ 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));
+ 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));
+ 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));
+ 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));
+ addDataSequenceToMap(aRangeRep, xSeq);
}
}
- Reference< chart2::data::XDataSequence > xSeq(
- new UncachedDataSequence( this, aRangeRepresentation ));
- addDataSequenceToMap( aRangeRepresentation, xSeq );
return xSeq;
}
@@ -764,6 +840,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, std::exception)
+{
+ return createDataSequenceFromArray(aRangeRepresentation, aRole);
+}
+
Reference< sheet::XRangeSelection > SAL_CALL InternalDataProvider::getRangeSelection()
throw (uno::RuntimeException, std::exception)
{
diff --git a/dbaccess/source/core/inc/DatabaseDataProvider.hxx b/dbaccess/source/core/inc/DatabaseDataProvider.hxx
index 20c954e74ac0..665cebe4baf4 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, std::exception) SAL_OVERRIDE;
virtual sal_Bool SAL_CALL createDataSequenceByRangeRepresentationPossible(const OUString & aRangeRepresentation) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
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, std::exception) SAL_OVERRIDE;
+
+ virtual css::uno::Reference<css::chart2::data::XDataSequence> SAL_CALL
+ createDataSequenceByValueArray(
+ const OUString& aRole, const OUString & aRangeRepresentation)
+ throw (css::uno::RuntimeException, css::lang::IllegalArgumentException, std::exception) SAL_OVERRIDE;
+
virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XRangeSelection > SAL_CALL getRangeSelection() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
// ::com::sun::star::chart2::data::XRangeXMLConversion:
diff --git a/dbaccess/source/core/misc/DatabaseDataProvider.cxx b/dbaccess/source/core/misc/DatabaseDataProvider.cxx
index 11d08cf3121e..19e800ce1840 100644
--- a/dbaccess/source/core/misc/DatabaseDataProvider.cxx
+++ b/dbaccess/source/core/misc/DatabaseDataProvider.cxx
@@ -301,6 +301,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, std::exception)
+{
+ return uno::Reference<chart2::data::XDataSequence>();
+}
+
uno::Sequence< uno::Sequence< OUString > > SAL_CALL DatabaseDataProvider::getComplexRowDescriptions() throw (uno::RuntimeException, std::exception)
{
return m_xComplexDescriptionAccess->getComplexRowDescriptions();
diff --git a/include/oox/drawingml/chart/chartconverter.hxx b/include/oox/drawingml/chart/chartconverter.hxx
index 4807655bd25e..bbfe0ed4290f 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 2d198f007324..bfa9d5ca6fb4 100644
--- a/oox/source/drawingml/chart/chartconverter.cxx
+++ b/oox/source/drawingml/chart/chartconverter.cxx
@@ -114,7 +114,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() )
@@ -134,7 +136,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 96a20383a1a3..8b1725f4dea5 100644
--- a/oox/source/drawingml/chart/datasourceconverter.cxx
+++ b/oox/source/drawingml/chart/datasourceconverter.cxx
@@ -74,9 +74,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 9f6737dd72d7..23899675497c 100644
--- a/oox/source/drawingml/chart/seriesconverter.cxx
+++ b/oox/source/drawingml/chart/seriesconverter.cxx
@@ -513,7 +513,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 cb386f3cac7f..ab0b7baff280 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, std::exception) SAL_OVERRIDE;
+ 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, std::exception) SAL_OVERRIDE;
diff --git a/sc/source/filter/inc/excelchartconverter.hxx b/sc/source/filter/inc/excelchartconverter.hxx
index 383c1d561dc3..c4afd77e6953 100644
--- a/sc/source/filter/inc/excelchartconverter.hxx
+++ b/sc/source/filter/inc/excelchartconverter.hxx
@@ -37,10 +37,10 @@ public:
const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument >& rxChartDoc ) SAL_OVERRIDE;
/** Creates a data sequence from the passed 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 ::oox::drawingml::chart::DataSequenceModel& rDataSeq ) SAL_OVERRIDE;
+ virtual css::uno::Reference<css::chart2::data::XDataSequence>
+ createDataSequence(
+ const css::uno::Reference<css::chart2::data::XDataProvider>& rxDataProvider,
+ const oox::drawingml::chart::DataSequenceModel& rDataSeq, const OUString& rRole ) SAL_OVERRIDE;
};
} // namespace xls
diff --git a/sc/source/filter/oox/excelchartconverter.cxx b/sc/source/filter/oox/excelchartconverter.cxx
index fe2293402ba8..24fe4a286e60 100644
--- a/sc/source/filter/oox/excelchartconverter.cxx
+++ b/sc/source/filter/oox/excelchartconverter.cxx
@@ -64,7 +64,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 41a18192d53c..55d4c542d091 100644
--- a/sc/source/ui/unoobj/chart2uno.cxx
+++ b/sc/source/ui/unoobj/chart2uno.cxx
@@ -2098,6 +2098,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, std::exception)
{
diff --git a/sw/inc/unochart.hxx b/sw/inc/unochart.hxx
index be1a674a39a8..a3689555468d 100644
--- a/sw/inc/unochart.hxx
+++ b/sw/inc/unochart.hxx
@@ -172,6 +172,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, std::exception) SAL_OVERRIDE;
virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XRangeSelection > SAL_CALL getRangeSelection( ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+ 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,
diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx
index af47cb7928b0..0a34baf37207 100644
--- a/sw/source/core/unocore/unochart.cxx
+++ b/sw/source/core/unocore/unochart.cxx
@@ -1432,6 +1432,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, std::exception)
{