diff options
author | Daniel Rentz <dr@openoffice.org> | 2010-04-14 21:08:24 +0200 |
---|---|---|
committer | Daniel Rentz <dr@openoffice.org> | 2010-04-14 21:08:24 +0200 |
commit | dbd1daa7f89f25ca26a526207690789a351828d4 (patch) | |
tree | a7519626aa4aa4b3d598e8e64a1bbe27de922af4 /oox/source/xls | |
parent | 1110315ea427c77a9ca630fc80d1f9e15242f29e (diff) |
npower13_objectmodules: load vba after applying workbook codename
Diffstat (limited to 'oox/source/xls')
-rw-r--r-- | oox/source/xls/workbookfragment.cxx | 23 | ||||
-rw-r--r-- | oox/source/xls/workbookhelper.cxx | 32 |
2 files changed, 26 insertions, 29 deletions
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 |