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:
static sal_uInt16 DoUpdateAllCharts( ScDocument* pDoc );
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 ScChartHelper::UpdateChartsOnDestinationPage( ScDocument* pDestDoc, const SCTAB nDestTab );
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,
::com::sun::star::uno::Sequence< rtl::OUString >& rRanges );
......
......@@ -131,6 +131,7 @@ void ScDocument::TransferDrawPage(ScDocument* pSrcDoc, SCTAB nSrcPos, SCTAB nDes
// #71726# make sure the data references of charts are adapted
// (this must be after InsertObject!)
ScChartHelper::AdjustRangesOfChartsOnDestinationPage( pSrcDoc, this, nSrcPos, nDestPos );
ScChartHelper::UpdateChartsOnDestinationPage(this, nDestPos);
}
void ScDocument::InitDrawLayer( SfxObjectShell* pDocShell )
......
......@@ -37,6 +37,7 @@
#include <svx/svdpage.hxx>
#include <com/sun/star/chart2/data/XDataReceiver.hpp>
#include <com/sun/star/util/XModifiable.hpp>
using namespace com::sun::star;
using ::com::sun::star::uno::Reference;
......@@ -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
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