basctl/inc/basidesh.hrc | 1 basctl/source/basicide/basidesh.cxx | 6 basctl/source/basicide/basidesh.src | 4 include/oox/ole/vbaexport.hxx | 14 +- include/svtools/sfxecode.hxx | 1 officecfg/registry/schema/org/openoffice/Office/Calc.xcs | 8 + oox/source/ole/vbaexport.cxx | 95 +++++++++------ sc/source/filter/excel/expop2.cxx | 38 +++++- sc/source/filter/excel/xestream.cxx | 8 + sfx2/source/doc/guisaveas.cxx | 35 ----- uui/source/iahndl.cxx | 25 --- uui/source/ids.hrc | 1 uui/source/ids.src | 5 13 files changed, 126 insertions(+), 115 deletions(-)
New commits: commit 9d8670a740710fa8856b26e76c10569fc0265439 Author: Markus Mohrhard <[email protected]> Date: Tue Aug 25 00:14:02 2015 +0200 handle different callers for vba export code This now integrates it correctly with the XLS code, the XLSX one requires a bit more work to copy the stream to the OOXML file. Change-Id: Ic853ce795fc2ac2941083a76fd0a8cad7c6add09 diff --git a/include/oox/ole/vbaexport.hxx b/include/oox/ole/vbaexport.hxx index 8c3094b..69d34b1 100644 --- a/include/oox/ole/vbaexport.hxx +++ b/include/oox/ole/vbaexport.hxx @@ -16,6 +16,8 @@ #include <oox/dllapi.h> +class SotStorage; + namespace com { namespace sun { namespace star { namespace container { class XNameContainer; } namespace frame { class XModel; } @@ -27,7 +29,7 @@ class OOX_DLLPUBLIC VbaExport public: VbaExport(css::uno::Reference<css::frame::XModel> xModel); - void exportVBA(); + void exportVBA(SotStorage* pRootStorage); bool containsVBAProject(); diff --git a/oox/source/ole/vbaexport.cxx b/oox/source/ole/vbaexport.cxx index b4d1d6d..fb77a50 100644 --- a/oox/source/ole/vbaexport.cxx +++ b/oox/source/ole/vbaexport.cxx @@ -611,15 +611,10 @@ void exportDirStream(SvStream& rStrm) } -void VbaExport::exportVBA() +void VbaExport::exportVBA(SotStorage* pRootStorage) { // start here with the VBA export - - const OUString aVbaStreamLocation("/tmp/vba_out.bin"); - SvFileStream aVbaStream(aVbaStreamLocation, STREAM_READWRITE); - - tools::SvRef<SotStorage> aStorage(new SotStorage(aVbaStream)); - SotStorage* pVBAStream = aStorage->OpenSotStorage("VBA", STREAM_READWRITE); + SotStorage* pVBAStream = pRootStorage->OpenSotStorage("VBA", STREAM_READWRITE); SotStorageStream* pDirStream = pVBAStream->OpenSotStream("dir", STREAM_READWRITE); // export @@ -638,7 +633,7 @@ void VbaExport::exportVBA() } pDirStream->Commit(); pVBAStream->Commit(); - aStorage->Commit(); + pRootStorage->Commit(); } css::uno::Reference<css::script::XLibraryContainer> VbaExport::getLibraryContainer() diff --git a/sc/source/filter/excel/expop2.cxx b/sc/source/filter/excel/expop2.cxx index 6833576..68898e9 100644 --- a/sc/source/filter/excel/expop2.cxx +++ b/sc/source/filter/excel/expop2.cxx @@ -97,7 +97,10 @@ FltError ExportBiff5::Write() { VbaExport aExport(pDocShell->GetModel()); if (aExport.containsVBAProject()) - aExport.exportVBA(); + { + SotStorage* pVBARoot = xRootStrg->OpenSotStorage("_VBA_PROJECT_CUR"); + aExport.exportVBA(pVBARoot); + } } else if( pDocShell && xRootStrg.Is() && eVbaExportMode == VBAExportMode::REEXPORT_STREAM ) { diff --git a/sc/source/filter/excel/xestream.cxx b/sc/source/filter/excel/xestream.cxx index b307ede..363339f 100644 --- a/sc/source/filter/excel/xestream.cxx +++ b/sc/source/filter/excel/xestream.cxx @@ -1094,7 +1094,12 @@ bool XclExpXmlStream::exportDocument() VbaExport aExport(getModel()); if (aExport.containsVBAProject()) - aExport.exportVBA(); + { + const OUString aVbaStreamLocation("/tmp/vba_out.bin"); + SvFileStream aVbaStream(aVbaStreamLocation, STREAM_READWRITE); + tools::SvRef<SotStorage> pVBAStorage(new SotStorage(aVbaStream)); + aExport.exportVBA(pVBAStorage); + } // destruct at the end of the block { commit b96ddefef144ad5679b052e80930680a1ccd2cfe Author: Markus Mohrhard <[email protected]> Date: Mon Aug 24 23:56:54 2015 +0200 introduce mode to save vba stream also to xls files Change-Id: Ic1066fa9492090e42d37ec487c2e9e8234de4375 diff --git a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs index bb74d74..35bc578 100644 --- a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs @@ -1629,6 +1629,14 @@ <info> <desc>Specifies how VBA macros are treated in Excel files.</desc> </info> + <prop oor:name="UseExport" oor:type="xs:boolean" oor:nillable="false"> + <!-- UIHints: Tools Options - Filter Settings Microsoft Office [Section] Microsoft Excel 97/2000 --> + <info> + <desc>Indicates whether VBA macros are exported through the vba export code.</desc> + <label>Export VBA</label> + </info> + <value>true</value> + </prop> <prop oor:name="Load" oor:type="xs:boolean" oor:nillable="false"> <!-- OldPath: Filter/MS_Office/Basic/Excel --> <!-- OldLocation: soffice.cfg --> diff --git a/sc/source/filter/excel/expop2.cxx b/sc/source/filter/excel/expop2.cxx index f9726f6..6833576 100644 --- a/sc/source/filter/excel/expop2.cxx +++ b/sc/source/filter/excel/expop2.cxx @@ -23,6 +23,8 @@ #include <sfx2/docinf.hxx> #include <filter/msfilter/svxmsbas.hxx> +#include <oox/ole/vbaexport.hxx> + #include "scerrors.hxx" #include "scextopt.hxx" @@ -38,9 +40,22 @@ #include "xltools.hxx" #include "xelink.hxx" +#include <officecfg/Office/Calc.hxx> + #include <com/sun/star/document/XDocumentProperties.hpp> #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp> +namespace { + +enum class VBAExportMode +{ + NONE, + REEXPORT_STREAM, + FULL_EXPORT +}; + +} + ExportBiff5::ExportBiff5( XclExpRootData& rExpData, SvStream& rStrm ): ExportTyp( rStrm, &rExpData.mrDoc, rExpData.meTextEnc ), XclExpRoot( rExpData ) @@ -65,14 +80,26 @@ FltError ExportBiff5::Write() tools::SvRef<SotStorage> xRootStrg = GetRootStorage(); OSL_ENSURE( xRootStrg.Is(), "ExportBiff5::Write - no root storage" ); - bool bWriteBasicStrg = false; + VBAExportMode eVbaExportMode = VBAExportMode::NONE; if( GetBiff() == EXC_BIFF8 ) { - const SvtFilterOptions& rFilterOpt = SvtFilterOptions::Get(); - bWriteBasicStrg = rFilterOpt.IsLoadExcelBasicStorage(); + if (officecfg::Office::Calc::Filter::Import::VBA::UseExport::get()) + eVbaExportMode = VBAExportMode::FULL_EXPORT; + else + { + const SvtFilterOptions& rFilterOpt = SvtFilterOptions::Get(); + if (rFilterOpt.IsLoadExcelBasicStorage()) + eVbaExportMode = VBAExportMode::REEXPORT_STREAM; + } } - if( pDocShell && xRootStrg.Is() && bWriteBasicStrg ) + if ( pDocShell && xRootStrg.Is() && eVbaExportMode == VBAExportMode::FULL_EXPORT) + { + VbaExport aExport(pDocShell->GetModel()); + if (aExport.containsVBAProject()) + aExport.exportVBA(); + } + else if( pDocShell && xRootStrg.Is() && eVbaExportMode == VBAExportMode::REEXPORT_STREAM ) { SvxImportMSVBasic aBasicImport( *pDocShell, *xRootStrg ); sal_uLong nErr = aBasicImport.SaveOrDelMSVBAStorage( true, EXC_STORAGE_VBA_PROJECT ); commit 36be0d31b5df39fc5444277c7acadcbeaa839d3b Author: Markus Mohrhard <[email protected]> Date: Mon Aug 24 23:48:45 2015 +0200 remove more warnings about vba export Change-Id: I8d0e6f69dd4d51d195422e6e934fedc406caec16 diff --git a/include/svtools/sfxecode.hxx b/include/svtools/sfxecode.hxx index 5246f5a..4968f0e 100644 --- a/include/svtools/sfxecode.hxx +++ b/include/svtools/sfxecode.hxx @@ -77,7 +77,6 @@ #define ERRCODE_SFX_INCOMPLETE_ENCRYPTION (ERRCODE_WARNING_MASK | ERRCODE_AREA_SFX | ERRCODE_CLASS_NONE | 55) #define ERRCODE_SFX_DOCUMENT_MACRO_DISABLED_MAC (ERRCODE_WARNING_MASK | ERRCODE_AREA_SFX | ERRCODE_CLASS_NONE | 56) #define ERRCODE_SFX_FORMAT_ROWCOL (ERRCODE_AREA_SFX | ERRCODE_CLASS_NONE | 57) -#define ERRCODE_SFX_VBASIC_CANTSAVE_STORAGE (ERRCODE_WARNING_MASK | ERRCODE_AREA_SFX | ERRCODE_CLASS_NONE | 58) //Dies und das diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx index 306202f..2de33c4 100644 --- a/sfx2/source/doc/guisaveas.cxx +++ b/sfx2/source/doc/guisaveas.cxx @@ -803,41 +803,6 @@ sal_Int8 ModelData_Impl::CheckFilter( const OUString& aFilterName ) if ( !aPreusedFilterName.equals( aFilterName ) && !aUIName.equals( aDefUIName ) ) { - // is it possible to get these names from somewhere and not just - // hardcode them? - OUString sXLSXFilter("Calc MS Excel 2007 XML"); - OUString sOtherXLSXFilter("Calc Office Open XML"); - bool bHasMacros = hasMacros( GetModel() ); - if ( bHasMacros && ( aFilterName == sXLSXFilter || aFilterName == sOtherXLSXFilter ) ) - { - uno::Reference< task::XInteractionHandler > xHandler; - GetMediaDescr()[ OUString( "InteractionHandler" ) ] >>= xHandler; - if ( xHandler.is() ) - { - bool bResult = false; - try - { - task::ErrorCodeRequest aErrorCode; - aErrorCode.ErrCode = ERRCODE_SFX_VBASIC_CANTSAVE_STORAGE; - - uno::Any aRequest = uno::makeAny( aErrorCode ); - uno::Sequence< uno::Reference< task::XInteractionContinuation > > aContinuations( 2 ); - - ::rtl::Reference< ::comphelper::OInteractionApprove > pApprove( new ::comphelper::OInteractionApprove ); - aContinuations[ 0 ] = pApprove.get(); - - ::rtl::Reference< ::comphelper::OInteractionAbort > pAbort( new ::comphelper::OInteractionAbort ); - aContinuations[ 1 ] = pAbort.get(); - xHandler->handle(::framework::InteractionRequest::CreateRequest (aRequest,aContinuations)); - bResult = pApprove->wasSelected(); - } - catch( const uno::Exception& ) - { - } - if ( !bResult ) - return STATUS_SAVEAS; - } - } if ( !SfxStoringHelper::WarnUnacceptableFormat( GetModel(), aUIName, aDefUIName, aDefExtension, true, (bool)( nDefFiltFlags & SfxFilterFlags::ALIEN ) ) ) return STATUS_SAVEAS_STANDARDNAME; diff --git a/uui/source/iahndl.cxx b/uui/source/iahndl.cxx index d16935b..4c98ee6 100644 --- a/uui/source/iahndl.cxx +++ b/uui/source/iahndl.cxx @@ -747,26 +747,11 @@ UUIInteractionHelper::handleRequest_impl( task::ErrorCodeRequest aErrorCodeRequest; if (aAnyRequest >>= aErrorCodeRequest) { - // Sucky special handling for xlsx macro filter warning - if ( (sal_uInt32)ERRCODE_SFX_VBASIC_CANTSAVE_STORAGE == (sal_uInt32)aErrorCodeRequest.ErrCode) - { - std::vector< OUString > aArguments; - handleErrorHandlerRequest( task::InteractionClassification_WARNING, - ERRCODE_UUI_IO_WARN_CANTSAVE_MACROS, - aArguments, - rRequest->getContinuations(), - bObtainErrorStringOnly, - bHasErrorString, - rErrorString); - } - else - { - handleGenericErrorRequest( aErrorCodeRequest.ErrCode, - rRequest->getContinuations(), - bObtainErrorStringOnly, - bHasErrorString, - rErrorString); - } + handleGenericErrorRequest( aErrorCodeRequest.ErrCode, + rRequest->getContinuations(), + bObtainErrorStringOnly, + bHasErrorString, + rErrorString); return true; } diff --git a/uui/source/ids.hrc b/uui/source/ids.hrc index 9ff94d8..e70c7a8 100644 --- a/uui/source/ids.hrc +++ b/uui/source/ids.hrc @@ -133,7 +133,6 @@ #define ERRCODE_UUI_LOCKING_NOT_LOCKED (ERRCODE_AREA_UUI + 61) #define ERRCODE_UUI_LOCKING_LOCK_EXPIRED (ERRCODE_AREA_UUI + 62) #define ERRCODE_UUI_CANNOT_ACTIVATE_FACTORY (ERRCODE_AREA_UUI + 63) -#define ERRCODE_UUI_IO_WARN_CANTSAVE_MACROS (ERRCODE_WARNING_MASK | ( ERRCODE_AREA_UUI + 64)) #define ERRCODE_AREA_UUI_UNKNOWNAUTH 25000 #define SSLWARN_TYPE_DOMAINMISMATCH 10 #define SSLWARN_TYPE_EXPIRED 20 diff --git a/uui/source/ids.src b/uui/source/ids.src index 13e2bab..d7ae643 100644 --- a/uui/source/ids.src +++ b/uui/source/ids.src @@ -397,11 +397,6 @@ Resource RID_UUI_ERRHDL Text [ en-US ] = "Component cannot be loaded, possibly broken or incomplete installation.\nFull error message:\n\n $(ARG1)."; }; - String (ERRCODE_UUI_IO_WARN_CANTSAVE_MACROS & ERRCODE_RES_MASK) - { - Text [ en-US ] = "You are saving to a macro-free document format, the macros contained in this document will not be saved.\nDo you wish to continue?"; - }; - }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit f056dc1e744b0246e20fbda2989ddb3602095180 Author: Markus Mohrhard <[email protected]> Date: Mon Aug 24 12:52:55 2015 +0200 no need to warn anymore as we can save VBA now Well we will be able when this feature hits master. Change-Id: I5547863e9002bfe16119a26059fa5281bd9e9070 diff --git a/basctl/inc/basidesh.hrc b/basctl/inc/basidesh.hrc index 3403c79..df9f997 100644 --- a/basctl/inc/basidesh.hrc +++ b/basctl/inc/basidesh.hrc @@ -61,7 +61,6 @@ #define RID_STR_OPEN ( RID_BASICIDE_START + 20 ) #define RID_STR_SAVE ( RID_BASICIDE_START + 21 ) #define RID_STR_RUNTIMEERROR ( RID_BASICIDE_START + 22 ) -#define RID_STR_CANNOTSAVEVBA ( RID_BASICIDE_START + 23 ) #define RID_STR_STDDIALOGNAME ( RID_BASICIDE_START + 24 ) #define RID_STR_STDMODULENAME ( RID_BASICIDE_START + 27 ) diff --git a/basctl/source/basicide/basidesh.cxx b/basctl/source/basicide/basidesh.cxx index 79e352e..11374b7 100644 --- a/basctl/source/basicide/basidesh.cxx +++ b/basctl/source/basicide/basidesh.cxx @@ -257,14 +257,8 @@ Shell::~Shell() void Shell::onDocumentCreated( const ScriptDocument& /*_rDocument*/ ) { if (pCurWin) - { pCurWin->OnNewDocument(); - // for VBA documents, show a warning that we can save them only in ODF - if (pCurWin->GetDocument().isInVBAMode()) - GetViewFrame()->AppendInfoBar("vba_save", IDE_RESSTR(RID_STR_CANNOTSAVEVBA)); - } - UpdateWindows(); } diff --git a/basctl/source/basicide/basidesh.src b/basctl/source/basicide/basidesh.src index 3b2d243..65c7066 100644 --- a/basctl/source/basicide/basidesh.src +++ b/basctl/source/basicide/basidesh.src @@ -211,10 +211,6 @@ String RID_STR_CANNOTCLOSE { Text [ en-US ] = "The window cannot be closed while BASIC is running." ; }; -String RID_STR_CANNOTSAVEVBA -{ - Text [ en-US ] = "You are editing a VBA macro. Changes can be saved only in OpenDocument Format." ; -}; String RID_STR_REPLACESTDLIB { Text [ en-US ] = "The default library cannot be replaced." ; commit 364f0c5b0eefd231ff5ac5361d21485db274ca47 Author: Markus Mohrhard <[email protected]> Date: Mon Aug 24 12:50:54 2015 +0200 we don't need that code anymore Change-Id: I77b5816a4e7743494444b0ac2366164a3bc5d13d diff --git a/oox/source/ole/vbaexport.cxx b/oox/source/ole/vbaexport.cxx index cd5a5b7..b4d1d6d 100644 --- a/oox/source/ole/vbaexport.cxx +++ b/oox/source/ole/vbaexport.cxx @@ -655,12 +655,6 @@ css::uno::Reference<css::container::XNameContainer> VbaExport::getBasicLibrary() try { css::uno::Reference<css::script::XLibraryContainer> xLibContainer = getLibraryContainer(); - css::uno::Sequence<OUString> aElementNames = xLibContainer->getElementNames(); - sal_Int32 n = aElementNames.getLength(); - for (sal_Int32 i = 0; i < n; ++i) - { - SAL_DEBUG(aElementNames[i]); - } OUString aProjectName = getProjectName(); xLibrary.set( xLibContainer->getByName(aProjectName), css::uno::UNO_QUERY_THROW ); } commit 1c57558ccd36dd91363981808804bd1d0855dca0 Author: Markus Mohrhard <[email protected]> Date: Mon Aug 24 12:46:00 2015 +0200 get correct vba project name Change-Id: I48efd62ca1df00b8a0cbecb01b394814ca40c2e9 diff --git a/include/oox/ole/vbaexport.hxx b/include/oox/ole/vbaexport.hxx index 3217e1b..8c3094b 100644 --- a/include/oox/ole/vbaexport.hxx +++ b/include/oox/ole/vbaexport.hxx @@ -19,6 +19,7 @@ namespace com { namespace sun { namespace star { namespace container { class XNameContainer; } namespace frame { class XModel; } + namespace script { class XLibraryContainer; } } } } class OOX_DLLPUBLIC VbaExport @@ -28,14 +29,19 @@ public: void exportVBA(); + bool containsVBAProject(); + private: css::uno::Reference<css::container::XNameContainer> getBasicLibrary(); - css::uno::Reference<css::frame::XModel> mxModel; + css::uno::Reference<css::script::XLibraryContainer> + getLibraryContainer(); - OUString maProjectName; + OUString getProjectName(); + + css::uno::Reference<css::frame::XModel> mxModel; }; class VBACompressionChunk diff --git a/oox/source/ole/vbaexport.cxx b/oox/source/ole/vbaexport.cxx index dbcc256..cd5a5b7 100644 --- a/oox/source/ole/vbaexport.cxx +++ b/oox/source/ole/vbaexport.cxx @@ -13,6 +13,7 @@ #include <com/sun/star/script/XLibraryContainer.hpp> #include <com/sun/star/script/vba/XVBAModuleInfo.hpp> +#include <com/sun/star/script/vba/XVBACompatibility.hpp> #include <com/sun/star/frame/XModel.hpp> #include <oox/helper/binaryoutputstream.hxx> @@ -313,8 +314,6 @@ void VBACompression::write() VbaExport::VbaExport(css::uno::Reference<css::frame::XModel> xModel): mxModel(xModel) { - // TODO: how do we get the correct project name - maProjectName = "VBAProject"; } namespace { @@ -642,20 +641,28 @@ void VbaExport::exportVBA() aStorage->Commit(); } +css::uno::Reference<css::script::XLibraryContainer> VbaExport::getLibraryContainer() +{ + oox::PropertySet aDocProp(mxModel); + css::uno::Reference<css::script::XLibraryContainer> xLibContainer(aDocProp.getAnyProperty(oox::PROP_BasicLibraries), css::uno::UNO_QUERY_THROW); + + return xLibContainer; +} + css::uno::Reference<css::container::XNameContainer> VbaExport::getBasicLibrary() { css::uno::Reference<css::container::XNameContainer> xLibrary; try { - oox::PropertySet aDocProp(mxModel); - css::uno::Reference<css::script::XLibraryContainer> xLibContainer(aDocProp.getAnyProperty(oox::PROP_BasicLibraries), css::uno::UNO_QUERY_THROW); + css::uno::Reference<css::script::XLibraryContainer> xLibContainer = getLibraryContainer(); css::uno::Sequence<OUString> aElementNames = xLibContainer->getElementNames(); sal_Int32 n = aElementNames.getLength(); for (sal_Int32 i = 0; i < n; ++i) { SAL_DEBUG(aElementNames[i]); } - xLibrary.set( xLibContainer->getByName(maProjectName), css::uno::UNO_QUERY_THROW ); + OUString aProjectName = getProjectName(); + xLibrary.set( xLibContainer->getByName(aProjectName), css::uno::UNO_QUERY_THROW ); } catch(...) { @@ -664,4 +671,25 @@ css::uno::Reference<css::container::XNameContainer> VbaExport::getBasicLibrary() return xLibrary; } +bool VbaExport::containsVBAProject() +{ + css::uno::Reference<css::script::XLibraryContainer> xLibContainer = getLibraryContainer(); + css::uno::Reference<css::script::vba::XVBACompatibility> xVbaCompatibility (xLibContainer, css::uno::UNO_QUERY); + if (!xVbaCompatibility.is()) + return false; + + bool bVBACompatibilty = xVbaCompatibility->getVBACompatibilityMode(); + + return bVBACompatibilty; +} + +OUString VbaExport::getProjectName() +{ + css::uno::Reference<css::script::vba::XVBACompatibility> xVbaCompatibility(getLibraryContainer(), css::uno::UNO_QUERY); + if (xVbaCompatibility.is()) + return xVbaCompatibility->getProjectName(); + + return OUString(); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/excel/xestream.cxx b/sc/source/filter/excel/xestream.cxx index 2c4f0d7..b307ede 100644 --- a/sc/source/filter/excel/xestream.cxx +++ b/sc/source/filter/excel/xestream.cxx @@ -1093,7 +1093,8 @@ bool XclExpXmlStream::exportDocument() "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" ) ); VbaExport aExport(getModel()); - aExport.exportVBA(); + if (aExport.containsVBAProject()) + aExport.exportVBA(); // destruct at the end of the block { commit 762c6269d86eed8927863d703926776058616bc6 Author: Markus Mohrhard <[email protected]> Date: Sun Aug 23 19:37:48 2015 +0200 small refactoring in the vba export code Change-Id: I68a7c7700b8405f4fe2b75516deff684f21e256c diff --git a/oox/source/ole/vbaexport.cxx b/oox/source/ole/vbaexport.cxx index 619c820..dbcc256 100644 --- a/oox/source/ole/vbaexport.cxx +++ b/oox/source/ole/vbaexport.cxx @@ -30,6 +30,8 @@ #define CODEPAGE RTL_TEXTENCODING_MS_1252 #endif +#define VBA_EXPORT_DEBUG 1 + namespace { void exportString(SvStream& rStrm, const OUString& rString) @@ -582,11 +584,30 @@ void writePROJECTMODULES(SvStream& rStrm) // section 2.3.4.2 void exportDirStream(SvStream& rStrm) { - writePROJECTINFORMATION(rStrm); - writePROJECTREFERENCES(rStrm); - writePROJECTMODULES(rStrm); - rStrm.WriteUInt16(0x0010); // terminator - rStrm.WriteUInt32(0x00000000); // reserved + SvMemoryStream aDirStream(4096, 4096); + + writePROJECTINFORMATION(aDirStream); + writePROJECTREFERENCES(aDirStream); + writePROJECTMODULES(aDirStream); + aDirStream.WriteUInt16(0x0010); // terminator + aDirStream.WriteUInt32(0x00000000); // reserved + + aDirStream.Seek(0); + +#if VBA_EXPORT_DEBUG + const OUString aDirFileName("/tmp/vba_dir_out.bin"); + SvFileStream aDirStreamDebug(aDirFileName, STREAM_READWRITE); + + aDirStreamDebug.WriteStream(aDirStream); + aDirStream.Seek(0); +#endif + + // the stream for the compression + SvMemoryStream aMemoryStream(4096, 4096); + aMemoryStream.WriteStream(aDirStream); + + VBACompression aCompression(rStrm, aDirStream); + aCompression.write(); } } @@ -602,19 +623,8 @@ void VbaExport::exportVBA() SotStorage* pVBAStream = aStorage->OpenSotStorage("VBA", STREAM_READWRITE); SotStorageStream* pDirStream = pVBAStream->OpenSotStream("dir", STREAM_READWRITE); - const OUString aDirFileName("/tmp/vba_dir_out.bin"); - SvFileStream aDirStream(aDirFileName, STREAM_READWRITE); - // export - exportDirStream(aDirStream); - - aDirStream.Seek(0); - - SvMemoryStream aMemoryStream(4096, 4096); - aMemoryStream.WriteStream(aDirStream); - - VBACompression aCompression(*pDirStream, aMemoryStream); - aCompression.write(); + exportDirStream(*pDirStream); css::uno::Reference<css::container::XNameContainer> xNameContainer = getBasicLibrary(); css::uno::Sequence<OUString> aElementNames = xNameContainer->getElementNames(); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
