diff options
author | Daniel Rentz <dr@openoffice.org> | 2001-06-08 13:55:10 +0000 |
---|---|---|
committer | Daniel Rentz <dr@openoffice.org> | 2001-06-08 13:55:10 +0000 |
commit | 5a7bfce77e3f643d87a18ec0481b822c6d86ec31 (patch) | |
tree | aafeb4ccc85c9402b9e599864ce40dd49917adf0 | |
parent | 8a1020938cb15879a1e69b231bf75b4e297fd524 (diff) |
#81094# OLE conversion on excel import
-rw-r--r-- | sc/inc/scextopt.hxx | 24 | ||||
-rw-r--r-- | sc/source/filter/excel/colrowst.cxx | 22 | ||||
-rw-r--r-- | sc/source/filter/excel/impop.cxx | 41 | ||||
-rw-r--r-- | sc/source/filter/excel/read.cxx | 6 | ||||
-rw-r--r-- | sc/source/filter/inc/imp_op.hxx | 5 | ||||
-rw-r--r-- | sc/source/ui/docshell/docsh.cxx | 10 | ||||
-rw-r--r-- | sc/source/ui/view/tabvwsh4.cxx | 9 | ||||
-rw-r--r-- | sc/source/ui/view/viewdata.cxx | 12 |
8 files changed, 101 insertions, 28 deletions
diff --git a/sc/inc/scextopt.hxx b/sc/inc/scextopt.hxx index 7e53c137cc74..39d041972abe 100644 --- a/sc/inc/scextopt.hxx +++ b/sc/inc/scextopt.hxx @@ -2,9 +2,9 @@ * * $RCSfile: scextopt.hxx,v $ * - * $Revision: 1.3 $ + * $Revision: 1.4 $ * - * last change: $Author: dr $ $Date: 2001-05-10 17:22:51 $ + * last change: $Author: dr $ $Date: 2001-06-08 14:51:06 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -146,10 +146,14 @@ private: String* pCodenameWB; CodenameList* pCodenames; + + BOOL bChanged; // for import: copy data only first time to doc + public: UINT32 nLinkCnt; // Zaehlt die Rekursionstufe beim Laden // von externen Dokumenten UINT16 nActTab; // aktuelle Tabelle + ScRange* pOleSize; // visible range if embedded UINT16 nSelTabs; // count of selected sheets Color* pGridCol; // Farbe Grid und Row-/Col-Heading UINT16 nZoom; // in % @@ -167,12 +171,17 @@ public: void SetGridCol( const Color& rColor ); void SetActTab( UINT16 nTab ); + void SetOleSize( USHORT nFirstCol, USHORT nFirstRow, USHORT nLastCol, USHORT nLastRow ); void SetCursor( UINT16 nCol, UINT16 nRow ); void SetZoom( UINT16 nZaehler, UINT16 nNenner ); + inline void SetChanged( BOOL bChg ) { bChanged = bChg; } + inline BOOL IsChanged() const { return bChanged; } void Add( const ColRowSettings& rCRS ); inline const ScExtTabOptions* GetExtTabOptions( const UINT16 nTabNum ) const; + inline ScExtTabOptions* GetExtTabOptions( const UINT16 nTabNum ); + inline const ScRange* GetOleSize() const { return pOleSize; } inline const String* GetCodename( void ) const; // for Workbook globals inline CodenameList* GetCodenames( void ); // for tables @@ -265,10 +274,13 @@ inline void ScExtTabOptions::operator =( const ScExtTabOptions& rCpy ) inline const ScExtTabOptions* ScExtDocOptions::GetExtTabOptions( const UINT16 nTab ) const { - if( nTab <= MAXTAB ) - return ppExtTabOpts[ nTab ]; - else - return NULL; + return (nTab <= MAXTAB) ? ppExtTabOpts[ nTab ] : NULL; +} + + +inline ScExtTabOptions* ScExtDocOptions::GetExtTabOptions( const UINT16 nTab ) +{ + return (nTab <= MAXTAB) ? ppExtTabOpts[ nTab ] : NULL; } diff --git a/sc/source/filter/excel/colrowst.cxx b/sc/source/filter/excel/colrowst.cxx index bb509ff66750..0705ffbf8e8f 100644 --- a/sc/source/filter/excel/colrowst.cxx +++ b/sc/source/filter/excel/colrowst.cxx @@ -2,9 +2,9 @@ * * $RCSfile: colrowst.cxx,v $ * - * $Revision: 1.8 $ + * $Revision: 1.9 $ * - * last change: $Author: dr $ $Date: 2001-05-11 09:19:40 $ + * last change: $Author: dr $ $Date: 2001-06-08 14:52:01 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -921,6 +921,7 @@ ScExtDocOptions::ScExtDocOptions( void ) { pGridCol = NULL; nActTab = nSelTabs = nCurCol = nCurRow = 0; + pOleSize = NULL; nLinkCnt = 0; // -> 'Root'-Dokument nZoom = 100; @@ -930,6 +931,7 @@ ScExtDocOptions::ScExtDocOptions( void ) pCodenameWB = NULL; pCodenames = NULL; + bChanged = TRUE; fColScale = 0.0; } @@ -939,6 +941,8 @@ ScExtDocOptions::~ScExtDocOptions() { if( pGridCol ) delete pGridCol; + if( pOleSize ) + delete pOleSize; for( UINT16 nCnt = 0 ; nCnt <= MAXTAB ; nCnt++ ) { @@ -1004,6 +1008,8 @@ ScExtDocOptions& ScExtDocOptions::operator =( const ScExtDocOptions& rCpy ) if( rCpy.pCodenames ) pCodenames = new CodenameList( *rCpy.pCodenames ); + bChanged = rCpy.bChanged; + fColScale = rCpy.fColScale; return *this; @@ -1033,6 +1039,18 @@ void ScExtDocOptions::SetActTab( UINT16 nTab ) } +void ScExtDocOptions::SetOleSize( USHORT nFirstCol, USHORT nFirstRow, USHORT nLastCol, USHORT nLastRow ) +{ + if( pOleSize ) + { + pOleSize->aStart.Set( nFirstCol, nFirstRow, 0 ); + pOleSize->aEnd.Set( nLastCol, nLastRow, 0 ); + } + else + pOleSize = new ScRange( nFirstCol, nFirstRow, 0, nLastCol, nLastRow, 0 ); +} + + void ScExtDocOptions::SetCursor( UINT16 nCol, UINT16 nRow ) { nCurCol = ( nCol <= MAXCOL )? nCol : MAXCOL; diff --git a/sc/source/filter/excel/impop.cxx b/sc/source/filter/excel/impop.cxx index 6f76e9994128..965199f23d01 100644 --- a/sc/source/filter/excel/impop.cxx +++ b/sc/source/filter/excel/impop.cxx @@ -2,9 +2,9 @@ * * $RCSfile: impop.cxx,v $ * - * $Revision: 1.18 $ + * $Revision: 1.19 $ * - * last change: $Author: er $ $Date: 2001-05-16 09:59:38 $ + * last change: $Author: dr $ $Date: 2001-06-08 14:52:01 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -87,6 +87,11 @@ #include <sfx2/printer.hxx> #include <svtools/zforlist.hxx> +#include <so3/embobj.hxx> +#include <sfx2/objsh.hxx> +#include <com/sun/star/frame/XModel.hpp> +#include "docuno.hxx" + #if defined( WNT ) || defined( WIN ) #include <math.h> #else @@ -124,6 +129,7 @@ #include "excform.hxx" #include "flttools.hxx" +using namespace ::com::sun::star; const double ImportExcel::fExcToTwips = @@ -215,6 +221,7 @@ ImportExcel::ImportExcel( SvStream& aStream, ScDocument* pDoc ): pExcRoot->pExtDocOpt = new ScExtDocOptions; if( pDoc->GetExtDocOptions() ) *pExcRoot->pExtDocOpt = *pDoc->GetExtDocOptions(); + pExcRoot->pExtDocOpt->SetChanged( TRUE ); pExcRoot->pProgress = NULL; pExcRoot->pEdEng = NULL; pExcRoot->pEdEngHF = NULL; @@ -1624,6 +1631,16 @@ void ImportExcel::Rstring( void ) } +void ImportExcel::Olesize( void ) +{ + aIn.Ignore( 2 ); + UINT16 nFirstRow, nLastRow; + UINT8 nFirstCol, nLastCol; + aIn >> nFirstRow >> nLastRow >> nFirstCol >> nLastCol; + pExcRoot->pExtDocOpt->SetOleSize( nFirstCol, nFirstRow, nLastCol, nLastRow ); +} + + void ImportExcel::XF5( void ) { UINT16 nAttr0, nAlign, nIndexFormat, nIndexFont, nFillCol, @@ -2742,6 +2759,26 @@ void ImportExcel::PostDocLoad( void ) aDocOpt.SetFormulaRegexEnabled( FALSE ); // regular expressions? what's that? pD->SetDocOptions( aDocOpt ); + // visible area if embedded OLE + SfxObjectShell* pShell = pD->GetDocumentShell(); + if( pShell ) + { + uno::Reference< frame::XModel > xModel( pShell->GetModel() ); + ScModelObj* pDocObj = ScModelObj::getImplementation( xModel ); + if( pDocObj ) + { + SvEmbeddedObject* pEmbObj = pDocObj->GetEmbeddedObject(); + const ScRange* pOleSize = pExcRoot->pExtDocOpt->GetOleSize(); + if( pEmbObj && pOleSize ) + { + pEmbObj->SetVisArea( pD->GetMMRect( + pOleSize->aStart.Col(), pOleSize->aStart.Row(), + pOleSize->aEnd.Col(), pOleSize->aEnd.Row(), pExcRoot->pExtDocOpt->nActTab ) ); + pD->SetVisibleTab( pExcRoot->pExtDocOpt->nActTab ); + } + } + } + pExcRoot->pExtDocOpt->fColScale = pExcRoot->fColScale; pD->SetExtDocOptions( pExcRoot->pExtDocOpt ); pExcRoot->pExtDocOpt = NULL; diff --git a/sc/source/filter/excel/read.cxx b/sc/source/filter/excel/read.cxx index 181a49ef5491..dbd1a2da17de 100644 --- a/sc/source/filter/excel/read.cxx +++ b/sc/source/filter/excel/read.cxx @@ -2,9 +2,9 @@ * * $RCSfile: read.cxx,v $ * - * $Revision: 1.9 $ + * $Revision: 1.10 $ * - * last change: $Author: gt $ $Date: 2001-05-28 13:44:50 $ + * last change: $Author: dr $ $Date: 2001-06-08 14:52:01 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -600,6 +600,7 @@ FltError ImportExcel::Read( void ) case 0x8D: Hideobj(); break; // HIDEOBJ [ 345] case 0x92: Palette(); break; // PALETTE [ 345] case 0x99: Standardwidth(); break; // STANDARDWIDTH[ 45] + case 0xDE: Olesize(); break; case 0xE0: XF5(); break; // XF [ 5] case 0x0218: Name34(); break; // NAME [ 34 ] case 0x0225: Defrowheight345();break;//DEFAULTROWHEI[ 345] @@ -1125,6 +1126,7 @@ FltError ImportExcel8::Read( void ) case 0x99: Standardwidth(); break; // STANDARDWIDTH[ 45 ] case 0xD3: bHasBasic = TRUE; break; case 0xD5: SXIdStm(); break; // SXIDSTM ##++## + case 0xDE: Olesize(); break; case 0xE0: Xf(); break; // XF [ 5 ] case 0xE3: SXVs(); break; // SXVS ##++## case 0xEB: Msodrawinggroup(); break; diff --git a/sc/source/filter/inc/imp_op.hxx b/sc/source/filter/inc/imp_op.hxx index 09c7ae9b6e3d..e3d96504755f 100644 --- a/sc/source/filter/inc/imp_op.hxx +++ b/sc/source/filter/inc/imp_op.hxx @@ -2,9 +2,9 @@ * * $RCSfile: imp_op.hxx,v $ * - * $Revision: 1.6 $ + * $Revision: 1.7 $ * - * last change: $Author: dr $ $Date: 2001-04-12 08:44:16 $ + * last change: $Author: dr $ $Date: 2001-06-08 14:53:19 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -246,6 +246,7 @@ protected: void Mulrk( void ); // 0xBD void Mulblank( void ); // 0xBE void Rstring( void ); // 0xD6 + void Olesize( void ); // 0xDE void XF5( void ); // 0xE0 void Blank34( void ); // 0x0201 void Number34( void ); // 0x0203 diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx index f0c9865a2c30..9a06c6536aeb 100644 --- a/sc/source/ui/docshell/docsh.cxx +++ b/sc/source/ui/docshell/docsh.cxx @@ -2,9 +2,9 @@ * * $RCSfile: docsh.cxx,v $ * - * $Revision: 1.30 $ + * $Revision: 1.31 $ * - * last change: $Author: sab $ $Date: 2001-06-01 10:08:16 $ + * last change: $Author: dr $ $Date: 2001-06-08 14:54:15 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -1698,14 +1698,14 @@ BOOL __EXPORT ScDocShell::ConvertTo( SfxMedium &rMed ) { WaitObject aWait( GetDialogParent() ); - ScExtDocOptions* pExtDocOpt = NULL; ScTabViewShell* pViewShell = GetBestViewShell(); if( pViewShell ) { - pExtDocOpt = new ScExtDocOptions; + ScExtDocOptions* pExtDocOpt = aDocument.GetExtDocOptions(); + if( !pExtDocOpt ) + aDocument.SetExtDocOptions( pExtDocOpt = new ScExtDocOptions ); pViewShell->GetViewData()->WriteExtOptions( *pExtDocOpt ); } - aDocument.SetExtDocOptions( pExtDocOpt ); BOOL bFake97 = ( aFltName.EqualsAscii(pFilterExcel97) || aFltName.EqualsAscii(pFilterEx97Temp) ); FltError eError = ScExportExcel5( rMed, &aDocument, bFake97, RTL_TEXTENCODING_MS_1252 ); diff --git a/sc/source/ui/view/tabvwsh4.cxx b/sc/source/ui/view/tabvwsh4.cxx index bd38d15ed034..0675c1673270 100644 --- a/sc/source/ui/view/tabvwsh4.cxx +++ b/sc/source/ui/view/tabvwsh4.cxx @@ -2,9 +2,9 @@ * * $RCSfile: tabvwsh4.cxx,v $ * - * $Revision: 1.11 $ + * $Revision: 1.12 $ * - * last change: $Author: nn $ $Date: 2001-06-08 12:44:08 $ + * last change: $Author: dr $ $Date: 2001-06-08 14:55:10 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -122,7 +122,7 @@ #include "dpobject.hxx" #include "prevwsh.hxx" #include "tpprint.hxx" - +#include "scextopt.hxx" void ActivateOlk( ScViewData* pViewData ); void DeActivateOlk( ScViewData* pViewData ); @@ -1583,11 +1583,12 @@ void ScTabViewShell::Construct() pDoc->MakeTable(i); } - const ScExtDocOptions* pExtOpt = pDoc->GetExtDocOptions(); + ScExtDocOptions* pExtOpt = pDoc->GetExtDocOptions(); if (pExtOpt) { GetViewData()->ReadExtOptions(*pExtOpt); // Excel-View Optionen SetTabNo( GetViewData()->GetTabNo(), TRUE ); + pExtOpt->SetChanged( FALSE ); //! alles von ReadUserData auch hier } diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx index d7a8d170a261..c22059245bb2 100644 --- a/sc/source/ui/view/viewdata.cxx +++ b/sc/source/ui/view/viewdata.cxx @@ -2,9 +2,9 @@ * * $RCSfile: viewdata.cxx,v $ * - * $Revision: 1.16 $ + * $Revision: 1.17 $ * - * last change: $Author: nn $ $Date: 2001-06-06 09:14:46 $ + * last change: $Author: dr $ $Date: 2001-06-08 14:55:10 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -2013,7 +2013,10 @@ void ScViewData::WriteExtOptions(ScExtDocOptions& rOpt) ScViewDataTable* pViewTab = pTabData[ nTab ]; if( pViewTab ) { - ScExtTabOptions* pTabOpt = new ScExtTabOptions; + ScExtTabOptions* pTabOpt = rOpt.GetExtTabOptions( nTab ); + if( !pTabOpt ) + rOpt.SetExtTabOptions( nTab, pTabOpt = new ScExtTabOptions ); + pTabOpt->nTabNum = nTab; pTabOpt->bSelected = GetMarkData().GetTableSelect( nTab ); if( pTabOpt->bSelected ) @@ -2058,8 +2061,6 @@ void ScViewData::WriteExtOptions(ScExtDocOptions& rOpt) pTabOpt->aLastSel.aStart.Set( pViewTab->nCurX, pViewTab->nCurY, nTab ); pTabOpt->aLastSel.aEnd = pTabOpt->aLastSel.aStart; - - rOpt.SetExtTabOptions( nTab, pTabOpt ); } } } @@ -2067,6 +2068,7 @@ void ScViewData::WriteExtOptions(ScExtDocOptions& rOpt) void ScViewData::ReadExtOptions( const ScExtDocOptions& rOpt ) { // for Excel import + if( !rOpt.IsChanged() ) return; USHORT nTabCount = pDoc->GetTableCount(); for (USHORT nTab=0; nTab<nTabCount; nTab++) |