Kaydet (Commit) 95d2a62c authored tarafından Wang Lei's avatar Wang Lei

#i118954# Chart data will lost after copy to different file

üst f812f78d
...@@ -45,6 +45,7 @@ public: ...@@ -45,6 +45,7 @@ public:
static sal_uInt16 DoUpdateAllCharts( ScDocument* pDoc ); static sal_uInt16 DoUpdateAllCharts( ScDocument* pDoc );
static sal_uInt16 DoUpdateCharts( const ScAddress& rPos, ScDocument* pDoc ); //use this to replace ScDBFunc::DoUpdateCharts in future static sal_uInt16 DoUpdateCharts( const ScAddress& rPos, ScDocument* pDoc ); //use this to replace ScDBFunc::DoUpdateCharts in future
static void AdjustRangesOfChartsOnDestinationPage( ScDocument* pSrcDoc, ScDocument* pDestDoc, const SCTAB nSrcTab, const SCTAB nDestTab ); static void AdjustRangesOfChartsOnDestinationPage( ScDocument* pSrcDoc, ScDocument* pDestDoc, const SCTAB nSrcTab, const SCTAB nDestTab );
static void ScChartHelper::UpdateChartsOnDestinationPage( ScDocument* pDestDoc, const SCTAB nDestTab );
static ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument > GetChartFromSdrObject( SdrObject* pObject ); static ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument > GetChartFromSdrObject( SdrObject* pObject );
static void GetChartRanges( const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument >& xChartDoc, static void GetChartRanges( const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument >& xChartDoc,
::com::sun::star::uno::Sequence< rtl::OUString >& rRanges ); ::com::sun::star::uno::Sequence< rtl::OUString >& rRanges );
......
...@@ -131,6 +131,7 @@ void ScDocument::TransferDrawPage(ScDocument* pSrcDoc, SCTAB nSrcPos, SCTAB nDes ...@@ -131,6 +131,7 @@ void ScDocument::TransferDrawPage(ScDocument* pSrcDoc, SCTAB nSrcPos, SCTAB nDes
// #71726# make sure the data references of charts are adapted // #71726# make sure the data references of charts are adapted
// (this must be after InsertObject!) // (this must be after InsertObject!)
ScChartHelper::AdjustRangesOfChartsOnDestinationPage( pSrcDoc, this, nSrcPos, nDestPos ); ScChartHelper::AdjustRangesOfChartsOnDestinationPage( pSrcDoc, this, nSrcPos, nDestPos );
ScChartHelper::UpdateChartsOnDestinationPage(this, nDestPos);
} }
void ScDocument::InitDrawLayer( SfxObjectShell* pDocShell ) void ScDocument::InitDrawLayer( SfxObjectShell* pDocShell )
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include <svx/svdpage.hxx> #include <svx/svdpage.hxx>
#include <com/sun/star/chart2/data/XDataReceiver.hpp> #include <com/sun/star/chart2/data/XDataReceiver.hpp>
#include <com/sun/star/util/XModifiable.hpp>
using namespace com::sun::star; using namespace com::sun::star;
using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Reference;
...@@ -178,6 +179,34 @@ void ScChartHelper::AdjustRangesOfChartsOnDestinationPage( ScDocument* pSrcDoc, ...@@ -178,6 +179,34 @@ void ScChartHelper::AdjustRangesOfChartsOnDestinationPage( ScDocument* pSrcDoc,
} }
} }
//static
void ScChartHelper::UpdateChartsOnDestinationPage( ScDocument* pDestDoc, const SCTAB nDestTab )
{
if( !pDestDoc )
return;
ScDrawLayer* pDrawLayer = pDestDoc->GetDrawLayer();
if( !pDrawLayer )
return;
SdrPage* pDestPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nDestTab));
if( pDestPage )
{
SdrObjListIter aIter( *pDestPage, IM_FLAT );
SdrObject* pObject = aIter.Next();
while( pObject )
{
if( pObject->GetObjIdentifier() == OBJ_OLE2 && ((SdrOle2Obj*)pObject)->IsChart() )
{
String aChartName = ((SdrOle2Obj*)pObject)->GetPersistName();
Reference< chart2::XChartDocument > xChartDoc( pDestDoc->GetChartByName( aChartName ) );
Reference< util::XModifiable > xModif(xChartDoc, uno::UNO_QUERY_THROW);
xModif->setModified( sal_True);
}
pObject = aIter.Next();
}
}
}
//static //static
uno::Reference< chart2::XChartDocument > ScChartHelper::GetChartFromSdrObject( SdrObject* pObject ) uno::Reference< chart2::XChartDocument > ScChartHelper::GetChartFromSdrObject( SdrObject* pObject )
{ {
......
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