summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorDaniel Rentz <dr@openoffice.org>2010-04-14 21:08:24 +0200
committerDaniel Rentz <dr@openoffice.org>2010-04-14 21:08:24 +0200
commitdbd1daa7f89f25ca26a526207690789a351828d4 (patch)
treea7519626aa4aa4b3d598e8e64a1bbe27de922af4 /oox
parent1110315ea427c77a9ca630fc80d1f9e15242f29e (diff)
npower13_objectmodules: load vba after applying workbook codename
Diffstat (limited to 'oox')
-rw-r--r--oox/inc/oox/xls/workbookfragment.hxx3
-rw-r--r--oox/inc/oox/xls/workbookhelper.hxx7
-rw-r--r--oox/source/xls/workbookfragment.cxx23
-rw-r--r--oox/source/xls/workbookhelper.cxx32
4 files changed, 29 insertions, 36 deletions
diff --git a/oox/inc/oox/xls/workbookfragment.hxx b/oox/inc/oox/xls/workbookfragment.hxx
index 0a4853748bf5..f9f0bb25c78f 100644
--- a/oox/inc/oox/xls/workbookfragment.hxx
+++ b/oox/inc/oox/xls/workbookfragment.hxx
@@ -92,9 +92,6 @@ private:
bool importSheetFragment(
ISegmentProgressBar& rProgressBar,
BiffFragmentType eFragment, sal_Int16 nCalcSheet );
-
-private:
- bool mbImportVbaProject; /// True = import VBA project at end of filter.
};
// ============================================================================
diff --git a/oox/inc/oox/xls/workbookhelper.hxx b/oox/inc/oox/xls/workbookhelper.hxx
index 8a6f436bbaaf..0ff8c0f9d3e5 100644
--- a/oox/inc/oox/xls/workbookhelper.hxx
+++ b/oox/inc/oox/xls/workbookhelper.hxx
@@ -30,7 +30,7 @@
#include <boost/shared_ptr.hpp>
#include <rtl/ref.hxx>
-//#include "oox/helper/storagebase.hxx"
+#include "oox/helper/storagebase.hxx"
#include "oox/xls/biffhelper.hxx"
namespace com { namespace sun { namespace star {
@@ -113,7 +113,6 @@ class UnitConverter;
class AddressConverter;
class ExcelChartConverter;
class PageSettingsConverter;
-class VbaProject;
class BiffCodecHelper;
/** Helper class to provice access to global workbook data.
@@ -151,6 +150,8 @@ public:
/** Sets the index of the current sheet in the Calc document. */
void setCurrentSheetIndex( sal_Int16 nSheet );
+ /** Sets the VBA project storage. */
+ void setVbaProjectStorage( const StorageRef& rxVbaPrjStrg );
/** Final conversion after importing the workbook. */
void finalizeWorkbookImport();
@@ -255,8 +256,6 @@ public:
ExcelChartConverter& getChartConverter() const;
/** Returns the page and print settings converter. */
PageSettingsConverter& getPageSettingsConverter() const;
- /** Returns the VBA project used to import/export VBA and attach events. */
- VbaProject& getVbaProject() const;
// OOX specific (MUST NOT be called in BIFF filter) -----------------------
diff --git a/oox/source/xls/workbookfragment.cxx b/oox/source/xls/workbookfragment.cxx
index b5eb9a11dd2c..d64abf268008 100644
--- a/oox/source/xls/workbookfragment.cxx
+++ b/oox/source/xls/workbookfragment.cxx
@@ -37,7 +37,6 @@
#include "oox/xls/biffinputstream.hxx"
#include "oox/xls/chartsheetfragment.hxx"
#include "oox/xls/connectionsfragment.hxx"
-#include "oox/xls/excelvbaproject.hxx"
#include "oox/xls/externallinkbuffer.hxx"
#include "oox/xls/externallinkfragment.hxx"
#include "oox/xls/pivotcachebuffer.hxx"
@@ -295,16 +294,13 @@ void OoxWorkbookFragment::finalizeImport()
aIt->clear();
}
- // import the VBA project (after loading the sheets, as they have imported the code names)
+ // open the VBA project storage
OUString aVbaFragmentPath = getFragmentPathFromFirstType( CREATE_MSOFFICE_RELATIONSTYPE( "vbaProject" ) );
if( aVbaFragmentPath.getLength() > 0 )
{
Reference< XInputStream > xInStrm = getBaseFilter().openInputStream( aVbaFragmentPath );
if( xInStrm.is() )
- {
- ::oox::ole::OleStorage aVbaStrg( getGlobalFactory(), xInStrm, false );
- getVbaProject().importVbaProject( aVbaStrg, getBaseFilter().getGraphicHelper() );
- }
+ setVbaProjectStorage( StorageRef( new ::oox::ole::OleStorage( getGlobalFactory(), xInStrm, false ) ) );
}
// final conversions, e.g. calculation settings and view settings
@@ -360,8 +356,7 @@ void OoxWorkbookFragment::importPivotCacheDefFragment( const OUString& rRelId, s
// ============================================================================
BiffWorkbookFragment::BiffWorkbookFragment( const WorkbookHelper& rHelper, const OUString& rStrmName ) :
- BiffWorkbookFragmentBase( rHelper, rStrmName ),
- mbImportVbaProject( false )
+ BiffWorkbookFragmentBase( rHelper, rStrmName )
{
}
@@ -389,13 +384,6 @@ bool BiffWorkbookFragment::importFragment()
sal_Int16 nCalcSheet = rWorksheets.getCalcSheetIndex( nWorksheet );
bNextSheet = importSheetFragment( *xSheetProgress, eSheetFragment, nCalcSheet );
}
- // import the VBA project (after loading the sheets, as they have imported the code names)
- if( mbImportVbaProject )
- {
- StorageRef xVbaStrg = getBaseFilter().openSubStorage( CREATE_OUSTRING( "_VBA_PROJECT_CUR" ), false );
- if( xVbaStrg.get() )
- getVbaProject().importVbaProject( *xVbaStrg, getBaseFilter().getGraphicHelper() );
- }
}
break;
@@ -646,8 +634,9 @@ bool BiffWorkbookFragment::importGlobalsFragment( ISegmentProgressBar& rProgress
bRet = mrStrm.startRecordByHandle( nEofHandle );
}
- // import the VBA project
- mbImportVbaProject = bHasVbaProject && !bEmptyVbaProject;
+ // open the VBA project storage
+ if( bHasVbaProject && !bEmptyVbaProject )
+ setVbaProjectStorage( getBaseFilter().openSubStorage( CREATE_OUSTRING( "_VBA_PROJECT_CUR" ), false ) );
// #i56376# missing EOF - rewind before worksheet BOF record (see above)
if( bRet && isBofRecord() )
diff --git a/oox/source/xls/workbookhelper.cxx b/oox/source/xls/workbookhelper.cxx
index 9794b58e6a1b..afeed95accca 100644
--- a/oox/source/xls/workbookhelper.cxx
+++ b/oox/source/xls/workbookhelper.cxx
@@ -136,6 +136,10 @@ public:
inline sal_Int16 getCurrentSheetIndex() const { return mnCurrSheet; }
/** Sets the index of the current sheet in the Calc document. */
inline void setCurrentSheetIndex( sal_Int16 nSheet ) { mnCurrSheet = nSheet; }
+ /** Returns the VBA project storage. */
+ inline StorageRef getVbaProjectStorage() const { return mxVbaPrjStrg; }
+ /** Sets the VBA project storage. */
+ inline void setVbaProjectStorage( const StorageRef& rxVbaPrjStrg ) { mxVbaPrjStrg = rxVbaPrjStrg; }
// document model ---------------------------------------------------------
@@ -201,8 +205,6 @@ public:
inline ExcelChartConverter& getChartConverter() const { return *mxChartConverter; }
/** Returns the page/print settings converter. */
inline PageSettingsConverter& getPageSettingsConverter() const { return *mxPageSettConverter; }
- /** Returns the VBA project used to import/export VBA and attach events. */
- inline VbaProject& getVbaProject() const { return *mxVbaProject; }
// OOX specific -----------------------------------------------------------
@@ -256,7 +258,6 @@ private:
typedef ::std::auto_ptr< AddressConverter > AddressConvPtr;
typedef ::std::auto_ptr< ExcelChartConverter > ExcelChartConvPtr;
typedef ::std::auto_ptr< PageSettingsConverter > PageSettConvPtr;
- typedef ::std::auto_ptr< VbaProject > VbaProjectPtr;
typedef ::std::auto_ptr< BiffCodecHelper > BiffCodecHelperPtr;
OUString maCellStyles; /// Style family name for cell styles.
@@ -268,6 +269,7 @@ private:
ExcelFilterBase& mrExcelBase; /// Base object for registration of this structure.
FilterType meFilterType; /// File type of the filter.
ProgressBarPtr mxProgressBar; /// The progress bar.
+ StorageRef mxVbaPrjStrg; /// Storage containing the VBA project.
sal_Int16 mnCurrSheet; /// Current sheet index in Calc dcument.
bool mbWorkbook; /// True = multi-sheet file.
@@ -292,7 +294,6 @@ private:
AddressConvPtr mxAddrConverter; /// Cell address and cell range address converter.
ExcelChartConvPtr mxChartConverter; /// Chart object converter.
PageSettConvPtr mxPageSettConverter; /// Page/print settings converter.
- VbaProjectPtr mxVbaProject; /// VBA project.
// OOX specific
XmlFilterBase* mpOoxFilter; /// Base OOX filter object.
@@ -549,7 +550,6 @@ void WorkbookData::initialize( bool bWorkbookFile )
mxAddrConverter.reset( new AddressConverter( *this ) );
mxChartConverter.reset( new ExcelChartConverter( *this ) );
mxPageSettConverter.reset( new PageSettingsConverter( *this ) );
- mxVbaProject.reset( new VbaProject( mrBaseFilter.getGlobalFactory(), mxDoc ) );
// set some document properties needed during import
if( mrBaseFilter.isImportFilter() )
@@ -659,6 +659,11 @@ void WorkbookHelper::setCurrentSheetIndex( sal_Int16 nSheet )
mrBookData.setCurrentSheetIndex( nSheet );
}
+void WorkbookHelper::setVbaProjectStorage( const StorageRef& rxVbaPrjStrg )
+{
+ mrBookData.setVbaProjectStorage( rxVbaPrjStrg );
+}
+
void WorkbookHelper::finalizeWorkbookImport()
{
// workbook settings, document and sheet view settings
@@ -681,8 +686,16 @@ void WorkbookHelper::finalizeWorkbookImport()
PropertySet aDefPageStyle( getStyleObject( CREATE_OUSTRING( "Default" ), true ) );
aDefPageStyle.setProperty< sal_Int16 >( PROP_FirstPageNumber, 0 );
- // attach VBA macros to document and sheet events
- getVbaProject().attachToEvents();
+ /* Import the VBA project (after finalizing workbook settings which
+ contains the workbook code name), and attach VBA macros to document and
+ sheet events. */
+ StorageRef xVbaPrjStrg = mrBookData.getVbaProjectStorage();
+ if( xVbaPrjStrg.get() && xVbaPrjStrg->isStorage() )
+ {
+ VbaProject aVbaProject( getGlobalFactory(), getDocument() );
+ aVbaProject.importVbaProject( *xVbaPrjStrg, getBaseFilter().getGraphicHelper() );
+ aVbaProject.attachToEvents();
+ }
}
// document model -------------------------------------------------------------
@@ -892,11 +905,6 @@ PageSettingsConverter& WorkbookHelper::getPageSettingsConverter() const
return mrBookData.getPageSettingsConverter();
}
-VbaProject& WorkbookHelper::getVbaProject() const
-{
- return mrBookData.getVbaProject();
-}
-
// OOX specific ---------------------------------------------------------------
XmlFilterBase& WorkbookHelper::getOoxFilter() const