/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sc.hxx" //------------------------------------------------------------------------ #include #include #include #include #include "scerrors.hxx" #include "scextopt.hxx" #include "root.hxx" #include "excdoc.hxx" #include "exp_op.hxx" #include "xcl97esc.hxx" #include "document.hxx" #include "rangenam.hxx" #include "filtopt.hxx" #include "xltools.hxx" #include "xelink.hxx" #include #include ExportBiff5::ExportBiff5( XclExpRootData& rExpData, SvStream& rStrm ): ExportTyp( rStrm, &rExpData.mrDoc, rExpData.meTextEnc ), XclExpRoot( rExpData ) { // nur Teil der Root-Daten gebraucht pExcRoot = &GetOldRoot(); pExcRoot->pER = this; // ExcRoot -> XclExpRoot pExcRoot->eDateiTyp = Biff5; pExcDoc = new ExcDocument( *this ); } ExportBiff5::~ExportBiff5() { delete pExcDoc; } FltError ExportBiff5::Write() { SfxObjectShell* pDocShell = GetDocShell(); DBG_ASSERT( pDocShell, "ExportBiff5::Write - no document shell" ); SotStorageRef xRootStrg = GetRootStorage(); DBG_ASSERT( xRootStrg.Is(), "ExportBiff5::Write - no root storage" ); bool bWriteBasicCode = false; bool bWriteBasicStrg = false; if( GetBiff() == EXC_BIFF8 ) { if( SvtFilterOptions* pFilterOpt = SvtFilterOptions::Get() ) { bWriteBasicCode = pFilterOpt->IsLoadExcelBasicCode(); bWriteBasicStrg = pFilterOpt->IsLoadExcelBasicStorage(); } } if( pDocShell && xRootStrg.Is() && bWriteBasicStrg ) { SvxImportMSVBasic aBasicImport( *pDocShell, *xRootStrg, bWriteBasicCode, bWriteBasicStrg ); sal_uLong nErr = aBasicImport.SaveOrDelMSVBAStorage( sal_True, EXC_STORAGE_VBA_PROJECT ); if( nErr != ERRCODE_NONE ) pDocShell->SetError( nErr, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) ); } pExcDoc->ReadDoc(); // ScDoc -> ExcDoc pExcDoc->Write( aOut ); // wechstreamen if( pDocShell && xRootStrg.Is() ) { // #i88642# update doc info (revision etc) pDocShell->UpdateDocInfoForSave(); using namespace ::com::sun::star; uno::Reference xDPS( pDocShell->GetModel(), uno::UNO_QUERY_THROW); uno::Reference xDocProps = xDPS->getDocumentProperties(); if ( SvtFilterOptions::Get()->IsEnableCalcPreview() ) { ::boost::shared_ptr pMetaFile = pDocShell->GetPreviewMetaFile (sal_False); uno::Sequence metaFile( sfx2::convertMetaFile(pMetaFile.get())); sfx2::SaveOlePropertySet(xDocProps, xRootStrg, &metaFile); } else sfx2::SaveOlePropertySet(xDocProps, xRootStrg ); } //! TODO: separate warnings for columns and sheets const XclExpAddressConverter& rAddrConv = GetAddressConverter(); if( rAddrConv.IsColTruncated() || rAddrConv.IsRowTruncated() || rAddrConv.IsTabTruncated() ) return SCWARN_EXPORT_MAXROW; return eERR_OK; } ExportBiff8::ExportBiff8( XclExpRootData& rExpData, SvStream& rStrm ) : ExportBiff5( rExpData, rStrm ) { pExcRoot->eDateiTyp = Biff8; } ExportBiff8::~ExportBiff8() { } ExportXml2007::ExportXml2007( XclExpRootData& rExpData, SvStream& rStrm ) : ExportTyp( rStrm, &rExpData.mrDoc, rExpData.meTextEnc ) , XclExpRoot( rExpData ) { pExcRoot = &GetOldRoot(); pExcRoot->pER = this; pExcRoot->eDateiTyp = Biff8; pExcDoc = new ExcDocument( *this ); } ExportXml2007::~ExportXml2007() { delete pExcDoc; } FltError ExportXml2007::Write() { SfxObjectShell* pDocShell = GetDocShell(); DBG_ASSERT( pDocShell, "ExportXml2007::Write - no document shell" ); SotStorageRef xRootStrg = GetRootStorage(); DBG_ASSERT( xRootStrg.Is(), "ExportXml2007::Write - no root storage" ); bool bWriteBasicCode = false; bool bWriteBasicStrg = false; if( SvtFilterOptions* pFilterOpt = SvtFilterOptions::Get() ) { bWriteBasicCode = pFilterOpt->IsLoadExcelBasicCode(); bWriteBasicStrg = pFilterOpt->IsLoadExcelBasicStorage(); } if( pDocShell && xRootStrg.Is() && bWriteBasicStrg ) { SvxImportMSVBasic aBasicImport( *pDocShell, *xRootStrg, bWriteBasicCode, bWriteBasicStrg ); sal_uLong nErr = aBasicImport.SaveOrDelMSVBAStorage( sal_True, EXC_STORAGE_VBA_PROJECT ); if( nErr != ERRCODE_NONE ) pDocShell->SetError( nErr, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) ); } pExcDoc->ReadDoc(); // ScDoc -> ExcDoc pExcDoc->WriteXml( aOut ); // wechstreamen if( pDocShell && xRootStrg.Is() ) { using namespace ::com::sun::star; uno::Reference xDPS( pDocShell->GetModel(), uno::UNO_QUERY_THROW); uno::Reference xDocProps = xDPS->getDocumentProperties(); ::boost::shared_ptr pMetaFile = pDocShell->GetPreviewMetaFile (sal_False); uno::Sequence metaFile( sfx2::convertMetaFile(pMetaFile.get())); sfx2::SaveOlePropertySet(xDocProps, xRootStrg, &metaFile); } //! TODO: separate warnings for columns and sheets const XclExpAddressConverter& rAddrConv = GetAddressConverter(); if( rAddrConv.IsColTruncated() || rAddrConv.IsRowTruncated() || rAddrConv.IsTabTruncated() ) return SCWARN_EXPORT_MAXROW; return eERR_OK; }