Kaydet (Commit) 7da06efd authored tarafından Muthu Subramanian's avatar Muthu Subramanian

n#819822: XLSX Chart import with internal data table.

When the import with xlsx ranges fail - try with
internal data table.
üst 00d8a407
...@@ -90,6 +90,9 @@ public: ...@@ -90,6 +90,9 @@ public:
converter object, that should be global per imported document. */ converter object, that should be global per imported document. */
virtual ::oox::drawingml::chart::ChartConverter* getChartConverter() = 0; virtual ::oox::drawingml::chart::ChartConverter* getChartConverter() = 0;
/** Helper to switch chart data table - specifically for xlsx imports */
virtual void useInternalChartDataTable( bool /*bInternal*/ ) { }
/** Has to be implemented by each filter to return the table style list. */ /** Has to be implemented by each filter to return the table style list. */
virtual const ::oox::drawingml::table::TableStyleListPtr getTableStyles() = 0; virtual const ::oox::drawingml::table::TableStyleListPtr getTableStyles() = 0;
......
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
#include <basegfx/polygon/b2dpolygon.hxx> #include <basegfx/polygon/b2dpolygon.hxx>
#include <basegfx/matrix/b2dhommatrix.hxx> #include <basegfx/matrix/b2dhommatrix.hxx>
#include <com/sun/star/document/XActionLockable.hpp> #include <com/sun/star/document/XActionLockable.hpp>
#include <com/sun/star/chart2/data/XDataReceiver.hpp>
using namespace ::oox::core; using namespace ::oox::core;
using namespace ::com::sun::star; using namespace ::com::sun::star;
...@@ -711,7 +712,21 @@ void Shape::finalizeXShape( XmlFilterBase& rFilter, const Reference< XShapes >& ...@@ -711,7 +712,21 @@ void Shape::finalizeXShape( XmlFilterBase& rFilter, const Reference< XShapes >&
if( !mxChartShapeInfo->mbEmbedShapes ) if( !mxChartShapeInfo->mbEmbedShapes )
xExternalPage = rxShapes; xExternalPage = rxShapes;
if( rFilter.getChartConverter() ) if( rFilter.getChartConverter() )
{
rFilter.getChartConverter()->convertFromModel( rFilter, aModel, xChartDoc, xExternalPage, mxShape->getPosition(), mxShape->getSize() ); rFilter.getChartConverter()->convertFromModel( rFilter, aModel, xChartDoc, xExternalPage, mxShape->getPosition(), mxShape->getSize() );
if( !xChartDoc->hasInternalDataProvider() )
{
Reference< chart2::data::XDataReceiver > xDataRec( xChartDoc, UNO_QUERY );
Reference< chart2::data::XDataSource > xData( xDataRec->getUsedData(), UNO_QUERY );
if( xData->getDataSequences()[0]->getValues()->getData().getLength() <= 0 )
{
rFilter.useInternalChartDataTable( true );
rFilter.getChartConverter()->convertFromModel( rFilter, aModel, xChartDoc, xExternalPage, mxShape->getPosition(), mxShape->getSize() );
rFilter.useInternalChartDataTable( false );
}
}
}
} }
catch( Exception& ) catch( Exception& )
{ {
......
...@@ -48,6 +48,7 @@ public: ...@@ -48,6 +48,7 @@ public:
virtual ::oox::vml::Drawing* getVmlDrawing(); virtual ::oox::vml::Drawing* getVmlDrawing();
virtual const ::oox::drawingml::table::TableStyleListPtr getTableStyles(); virtual const ::oox::drawingml::table::TableStyleListPtr getTableStyles();
virtual ::oox::drawingml::chart::ChartConverter* getChartConverter(); virtual ::oox::drawingml::chart::ChartConverter* getChartConverter();
virtual void useInternalChartDataTable( bool bInternal );
virtual sal_Bool SAL_CALL filter( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rDescriptor ) throw( ::com::sun::star::uno::RuntimeException ); virtual sal_Bool SAL_CALL filter( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rDescriptor ) throw( ::com::sun::star::uno::RuntimeException );
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
#include <rtl/ref.hxx> #include <rtl/ref.hxx>
#include "oox/helper/storagebase.hxx" #include "oox/helper/storagebase.hxx"
#include "oox/drawingml/chart/chartconverter.hxx"
#include "biffhelper.hxx" #include "biffhelper.hxx"
#include "rangenam.hxx" #include "rangenam.hxx"
...@@ -144,6 +145,7 @@ public: ...@@ -144,6 +145,7 @@ public:
void setCurrentSheetIndex( sal_Int16 nSheet ); void setCurrentSheetIndex( sal_Int16 nSheet );
/** Final conversion after importing the workbook. */ /** Final conversion after importing the workbook. */
void finalizeWorkbookImport(); void finalizeWorkbookImport();
void useInternalChartDataTable( bool bInternal );
// document model --------------------------------------------------------- // document model ---------------------------------------------------------
ScDocument& getScDocument() const; ScDocument& getScDocument() const;
...@@ -248,7 +250,7 @@ public: ...@@ -248,7 +250,7 @@ public:
/** Returns the converter for string to cell address/range conversion. */ /** Returns the converter for string to cell address/range conversion. */
AddressConverter& getAddressConverter() const; AddressConverter& getAddressConverter() const;
/** Returns the chart object converter. */ /** Returns the chart object converter. */
ExcelChartConverter* getChartConverter() const; oox::drawingml::chart::ChartConverter* getChartConverter() const;
/** Returns the page and print settings converter. */ /** Returns the page and print settings converter. */
PageSettingsConverter& getPageSettingsConverter() const; PageSettingsConverter& getPageSettingsConverter() const;
......
...@@ -149,6 +149,11 @@ const TableStyleListPtr ExcelFilter::getTableStyles() ...@@ -149,6 +149,11 @@ const TableStyleListPtr ExcelFilter::getTableStyles()
return WorkbookHelper( getWorkbookGlobals() ).getChartConverter(); return WorkbookHelper( getWorkbookGlobals() ).getChartConverter();
} }
void ExcelFilter::useInternalChartDataTable( bool bInternal )
{
return WorkbookHelper( getWorkbookGlobals() ).useInternalChartDataTable( bInternal );
}
GraphicHelper* ExcelFilter::implCreateGraphicHelper() const GraphicHelper* ExcelFilter::implCreateGraphicHelper() const
{ {
return new ExcelGraphicHelper( getWorkbookGlobals() ); return new ExcelGraphicHelper( getWorkbookGlobals() );
......
...@@ -178,6 +178,8 @@ public: ...@@ -178,6 +178,8 @@ public:
Reference< XDatabaseRange > createUnnamedDatabaseRangeObject( const CellRangeAddress& rRangeAddr ) const; Reference< XDatabaseRange > createUnnamedDatabaseRangeObject( const CellRangeAddress& rRangeAddr ) const;
/** Creates and returns a com.sun.star.style.Style object for cells or pages. */ /** Creates and returns a com.sun.star.style.Style object for cells or pages. */
Reference< XStyle > createStyleObject( OUString& orStyleName, bool bPageStyle ) const; Reference< XStyle > createStyleObject( OUString& orStyleName, bool bPageStyle ) const;
/** Helper to switch chart data table - specifically for xlsx imports */
void useInternalChartDataTable( bool bInternal );
// buffers ---------------------------------------------------------------- // buffers ----------------------------------------------------------------
...@@ -218,7 +220,7 @@ public: ...@@ -218,7 +220,7 @@ public:
/** Returns the converter for string to cell address/range conversion. */ /** Returns the converter for string to cell address/range conversion. */
inline AddressConverter& getAddressConverter() const { return *mxAddrConverter; } inline AddressConverter& getAddressConverter() const { return *mxAddrConverter; }
/** Returns the chart object converter. */ /** Returns the chart object converter. */
inline ExcelChartConverter* getChartConverter() const { return mxChartConverter.get(); } inline oox::drawingml::chart::ChartConverter* getChartConverter() const { return mxChartConverter.get(); }
/** Returns the page/print settings converter. */ /** Returns the page/print settings converter. */
inline PageSettingsConverter& getPageSettingsConverter() const { return *mxPageSettConverter; } inline PageSettingsConverter& getPageSettingsConverter() const { return *mxPageSettConverter; }
...@@ -262,7 +264,7 @@ private: ...@@ -262,7 +264,7 @@ private:
typedef ::std::auto_ptr< FormulaParser > FormulaParserPtr; typedef ::std::auto_ptr< FormulaParser > FormulaParserPtr;
typedef ::std::auto_ptr< UnitConverter > UnitConvPtr; typedef ::std::auto_ptr< UnitConverter > UnitConvPtr;
typedef ::std::auto_ptr< AddressConverter > AddressConvPtr; typedef ::std::auto_ptr< AddressConverter > AddressConvPtr;
typedef ::std::auto_ptr< ExcelChartConverter > ExcelChartConvPtr; typedef ::std::auto_ptr< oox::drawingml::chart::ChartConverter > ExcelChartConvPtr;
typedef ::std::auto_ptr< PageSettingsConverter > PageSettConvPtr; typedef ::std::auto_ptr< PageSettingsConverter > PageSettConvPtr;
typedef ::std::auto_ptr< BiffCodecHelper > BiffCodecHelperPtr; typedef ::std::auto_ptr< BiffCodecHelper > BiffCodecHelperPtr;
...@@ -506,6 +508,14 @@ Reference< XStyle > WorkbookGlobals::createStyleObject( OUString& orStyleName, b ...@@ -506,6 +508,14 @@ Reference< XStyle > WorkbookGlobals::createStyleObject( OUString& orStyleName, b
return xStyle; return xStyle;
} }
void WorkbookGlobals::useInternalChartDataTable( bool bInternal )
{
if( bInternal )
mxChartConverter.reset( new oox::drawingml::chart::ChartConverter() );
else
mxChartConverter.reset( new ExcelChartConverter( *this ) );
}
// BIFF specific -------------------------------------------------------------- // BIFF specific --------------------------------------------------------------
// private -------------------------------------------------------------------- // private --------------------------------------------------------------------
...@@ -896,11 +906,16 @@ AddressConverter& WorkbookHelper::getAddressConverter() const ...@@ -896,11 +906,16 @@ AddressConverter& WorkbookHelper::getAddressConverter() const
return mrBookGlob.getAddressConverter(); return mrBookGlob.getAddressConverter();
} }
ExcelChartConverter* WorkbookHelper::getChartConverter() const oox::drawingml::chart::ChartConverter* WorkbookHelper::getChartConverter() const
{ {
return mrBookGlob.getChartConverter(); return mrBookGlob.getChartConverter();
} }
void WorkbookHelper::useInternalChartDataTable( bool bInternal )
{
mrBookGlob.useInternalChartDataTable( bInternal );
}
PageSettingsConverter& WorkbookHelper::getPageSettingsConverter() const PageSettingsConverter& WorkbookHelper::getPageSettingsConverter() const
{ {
return mrBookGlob.getPageSettingsConverter(); return mrBookGlob.getPageSettingsConverter();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment