summaryrefslogtreecommitdiff
path: root/sc/source/filter/excel/excimp8.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/filter/excel/excimp8.cxx')
-rw-r--r--sc/source/filter/excel/excimp8.cxx343
1 files changed, 187 insertions, 156 deletions
diff --git a/sc/source/filter/excel/excimp8.cxx b/sc/source/filter/excel/excimp8.cxx
index 9174fcefbc16..5fd21973a8f4 100644
--- a/sc/source/filter/excel/excimp8.cxx
+++ b/sc/source/filter/excel/excimp8.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: excimp8.cxx,v $
*
- * $Revision: 1.79 $
+ * $Revision: 1.80 $
*
- * last change: $Author: jmarmion $ $Date: 2002-12-10 14:07:24 $
+ * last change: $Author: hr $ $Date: 2003-03-26 18:04:31 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -96,7 +96,6 @@
#include <svx/flditem.hxx>
#include <svx/xflclit.hxx>
#include <svx/svxmsbas.hxx>
-#include <svx/unoapi.hxx>
#include <vcl/graph.hxx>
#include <vcl/bmpacc.hxx>
@@ -106,7 +105,7 @@
#include <tools/string.hxx>
#include <tools/urlobj.hxx>
-#include <tools/solmath.hxx>
+#include <rtl/math.hxx>
#ifndef _UNOTOOLS_LOCALEDATAWRAPPER_HXX
#include <unotools/localedatawrapper.hxx>
@@ -128,7 +127,13 @@
#include "markdata.hxx"
#include "rangenam.hxx"
#include "docoptio.hxx"
+#ifndef SC_DETFUNC_HXX
+#include "detfunc.hxx"
+#endif
+#ifndef SC_XLOCX_HXX
+#include "xlocx.hxx"
+#endif
#ifndef SC_XILINK_HXX
#include "xilink.hxx"
#endif
@@ -138,11 +143,9 @@
#include "excimp8.hxx"
#include "excform.hxx"
-#include "fltprgrs.hxx"
#include "flttools.hxx"
#include "scextopt.hxx"
#include "stlpool.hxx"
-#include "scmsocximexp.hxx"
using namespace com::sun::star;
@@ -274,9 +277,10 @@ void ExcCondForm::ReadCf( XclImpStream& rIn, ExcelToSc& rConv )
default: nPosF = 0; nPosL = 0; nPosP = 0;
}
- SfxItemSet& rStyleItemSet = rDoc.GetStyleSheetPool()->Make(
- aStyle, SFX_STYLE_FAMILY_PARA,
- SFXSTYLEBIT_USERDEF ).GetItemSet();
+ SfxStyleSheetBase* pStyleSheet = rDoc.GetStyleSheetPool()->Find( aStyle, SFX_STYLE_FAMILY_PARA );
+ SfxItemSet& rStyleItemSet = pStyleSheet ? pStyleSheet->GetItemSet() :
+ rDoc.GetStyleSheetPool()->Make( aStyle, SFX_STYLE_FAMILY_PARA, SFXSTYLEBIT_USERDEF ).GetItemSet();
+ rStyleItemSet.ClearItem();
const XclImpPalette& rPalette = GetPalette();
@@ -340,42 +344,40 @@ void ExcCondForm::ReadCf( XclImpStream& rIn, ExcelToSc& rConv )
if( nPosL ) // line
{
- UINT8 nLineH, nLineV;
- UINT16 nColH, nColV;
+ sal_uInt16 nLine, nColor1, nColor2;
rIn.Seek( nPosL );
-
- rIn >> nLineV >> nLineH >> nColV >> nColH;
-
- UINT8 nLineL = nLineV & 0x0F;
- UINT16 nColL = nColV & 0x007F;
- UINT8 nLineR = nLineV >> 4;
- UINT16 nColR = ( nColV >> 7 ) & 0x007F;
- UINT8 nLineT = nLineH & 0x0F;
- UINT16 nColT = nColH & 0x007F;
- UINT8 nLineB = nLineH >> 4;
- UINT16 nColB = ( nColH >> 7 ) & 0x007F;
-
- XclImpXF::SetBorder( rStyleItemSet, rPalette,
- nLineL, nColL, nLineR, nColR, nLineT, nColT, nLineB, nColB );
+ rIn >> nLine >> nColor1 >> nColor2;
+
+ XclImpXFBorder aBorder;
+ ::extract_value( aBorder.mnLeftLine, nLine, 0, 4 );
+ ::extract_value( aBorder.mnRightLine, nLine, 4, 4 );
+ ::extract_value( aBorder.mnTopLine, nLine, 8, 4 );
+ ::extract_value( aBorder.mnBottomLine, nLine, 12, 4 );
+ ::extract_value( aBorder.mnLeftColor, nColor1, 0, 7 );
+ ::extract_value( aBorder.mnRightColor, nColor1, 7, 7 );
+ ::extract_value( aBorder.mnTopColor, nColor2, 0, 7 );
+ ::extract_value( aBorder.mnBottomColor, nColor2, 7, 7 );
+ XclImpXF::SetBorder( rStyleItemSet, rPalette, aBorder );
}
if( nPosP ) // pattern (fill)
{
- UINT16 nPatt;
- UINT16 nCol;
-
+ sal_uInt16 nPattern, nColor;
rIn.Seek( nPosP );
- rIn >> nPatt >> nCol;
+ rIn >> nPattern >> nColor;
- UINT8 nF = nCol & 0x007F;
- UINT8 nB = ( nCol >> 7 ) & 0x007F;
- UINT8 nP = (UINT8)((nPatt >> 10) & 0x003F);
- if( nP <= 1 )
+ XclImpXFArea aArea;
+ ::extract_value( aArea.mnForeColor, nColor, 0, 7 );
+ ::extract_value( aArea.mnBackColor, nColor, 7, 7 );
+ ::extract_value( aArea.mnPattern, nPattern, 10, 6 );
+ if( (aArea.mnPattern == EXC_PATT_NONE) || (aArea.mnPattern == EXC_PATT_SOLID) )
{
- nP = nB; nB = nF; nF = nP; nP = 1;
+ // overwrite a cell style with "no fill"
+ // EXC_PATT_SOLID forces creation of a brush item in SetArea()
+ ::std::swap( aArea.mnForeColor, aArea.mnBackColor );
+ aArea.mnPattern = EXC_PATT_SOLID;
}
-
- XclImpXF::SetArea( rStyleItemSet, rPalette, nP, nF, nB );
+ XclImpXF::SetArea( rStyleItemSet, rPalette, aArea );
}
// convert formulas
@@ -448,7 +450,7 @@ void ExcCondForm::Apply( void )
if( nR2 > MAXROW )
nR2 = MAXROW;
- GetDoc().ApplyPatternAreaTab( nC1, nR1, nC2, nR2, GetScTab(), aPat );
+ GetDoc().ApplyPatternAreaTab( nC1, nR1, nC2, nR2, p->aStart.Tab(), aPat );
p = pRangeList->Next();
}
@@ -484,8 +486,7 @@ void ExcCondFormList::Apply( void )
ImportExcel8::ImportExcel8( SvStorage* pStorage, SvStream& rStream, ScDocument* pDoc, const String& rBasePath, SvStorage* pPivotCache ) :
- ImportExcel( rStream, pDoc, rBasePath ),
- aObjManager( *pExcRoot )
+ ImportExcel( rStream, pDoc, rBasePath )
{
delete pFormConv;
@@ -597,20 +598,30 @@ void ImportExcel8::Horizontalpagebreaks( void )
void ImportExcel8::Note( void )
{
- UINT16 nCol, nRow, nId;
+ UINT16 nCol, nRow, nFlags, nId;
- aIn >> nRow >> nCol;
- aIn.Ignore( 2 );
- aIn >> nId;
+ aIn >> nRow >> nCol >> nFlags >> nId;
if( nRow <= MAXROW && nCol <= MAXCOL )
{
if( nId )
{
- const XclImpEscherNote* pObj = aObjManager.GetObjNote( nId, GetScTab() );
+ const XclImpEscherNote* pObj = GetObjectManager().GetObjNote( nId, GetScTab() );
const String* pText = pObj ? pObj->GetText() : NULL;
if( pText )
- pD->SetNote( nCol, nRow, GetScTab(), ScPostIt( *pText ) );
+ {
+ bool bVisible = ::get_flag( nFlags, EXC_NOTE_VISIBLE );
+ ScPostIt aNote( *pText );
+ aNote.SetShown( bVisible );
+ GetDoc().SetNote( nCol, nRow, GetScTab(), aNote );
+ if( bVisible )
+ {
+ ScDocument *pDoc = GetDocPtr();
+ ScDetectiveFunc( pDoc, GetScTab() ).ShowComment( nCol, nRow, TRUE );
+
+ // ScDetectiveFunc( GetDocPtr(), GetScTab() ).ShowComment( nCol, nRow, TRUE );
+ }
+ }
}
}
else
@@ -623,7 +634,7 @@ void ImportExcel8::Note( void )
void ImportExcel8::Cont( void )
{
if( bObjSection )
- aObjManager.ReadMsodrawing( aIn );
+ GetObjectManager().ReadMsodrawing( aIn );
}
@@ -648,14 +659,14 @@ void ImportExcel8::Dconref( void )
aTabName = aUrl;
aUrl.Erase();
}
- ScfTools::ConvertName( aTabName );
+ ScfTools::ConvertToScSheetName( aTabName );
pCurrPivotCache->SetSource( nC1, nR1, nC2, nR2, aUrl, aTabName, bSelf );
}
void ImportExcel8::Obj()
{
- aObjManager.ReadObj( aIn );
+ GetObjectManager().ReadObj( maStrm );
}
@@ -669,7 +680,7 @@ void ImportExcel8::Boundsheet( void )
String aName( aIn.ReadUniString( nLen ) );
- ScfTools::ConvertName( aName );
+ ScfTools::ConvertToScSheetName( aName );
*pExcRoot->pTabNameBuff << aName;
if( nBdshtTab > 0 )
@@ -730,19 +741,19 @@ void ImportExcel8::Cellmerging( void )
void ImportExcel8::Msodrawinggroup( void )
{
- aObjManager.ReadMsodrawinggroup( aIn );
+ GetObjectManager().ReadMsodrawinggroup( maStrm );
}
void ImportExcel8::Msodrawing( void )
{
- aObjManager.ReadMsodrawing( aIn );
+ GetObjectManager().ReadMsodrawing( maStrm );
}
void ImportExcel8::Msodrawingselection( void )
{
- aObjManager.ReadMsodrawingselection( aIn );
+ GetObjectManager().ReadMsodrawingselection( maStrm );
}
void ImportExcel8::Condfmt( void )
@@ -842,7 +853,7 @@ void ImportExcel8::Label( void )
void ImportExcel8::Txo( void )
{
- aObjManager.ReadTxo( aIn );
+ GetObjectManager().ReadTxo( maStrm );
}
@@ -923,11 +934,18 @@ void ImportExcel8::Name( void )
const BOOL bExtract = bBuiltIn && ( cFirstChar == EXC_BUILTIN_EXTRACT );
BOOL bAppendTabNum = FALSE;
BOOL bSkip = FALSE;
+ RangeType eNameType = RT_ABSAREA;
if( bBuiltIn )
XclTools::GetBuiltInName( aName, cFirstChar, nSheet );
else
- ScfTools::ConvertName( aName );
+ ScfTools::ConvertToScDefinedName( aName );
+
+ if(bPrintArea)
+ eNameType = RT_PRINTAREA;
+ if(bCriteria)
+ eNameType = RT_CRITERIA;
+
pFormConv->Reset();
if( nOpt & (EXC_NAME_VB | EXC_NAME_PROC | EXC_NAME_BIG) )
@@ -962,7 +980,12 @@ void ImportExcel8::Name( void )
else if( bCriteria )
pAutoFilterBuffer->AddAdvancedRange( aRange );
else if( bExtract )
- pAutoFilterBuffer->AddExtractPos( aRange );
+ {
+ if( pErgebnis->IsValidReference( aRange ) )
+ pAutoFilterBuffer->AddExtractPos( aRange );
+ else
+ eNameType = RT_NAME;
+ }
}
}
}
@@ -973,7 +996,7 @@ void ImportExcel8::Name( void )
pExcRoot->pRNameBuff->Store( aName, NULL, nSheet );
else
// ohne hidden
- pExcRoot->pRNameBuff->Store( aName, pErgebnis, nSheet, bPrintArea );
+ pExcRoot->pRNameBuff->Store( aName, pErgebnis, nSheet, eNameType );
}
@@ -997,28 +1020,18 @@ void ImportExcel8::PostDocLoad( void )
pCondFormList->Apply();
if( pAutoFilterBuffer )
pAutoFilterBuffer->Apply();
- GetWebQueryBuffer().Apply();
+ GetWebQueryBuffer().Apply(); //! test if extant
UINT32 nChartCnt = 0;
- SfxObjectShell* pShell = pD->GetDocumentShell();
- if( aObjManager.HasEscherStream() )
+ SfxObjectShell* pShell = GetDocShell();
+ XclImpObjectManager& rObjManager = GetObjectManager();
+
+ if( pShell && rObjManager.HasEscherStream() )
{
- Biff8MSDffManager* pDffMan = new Biff8MSDffManager( *pExcRoot, aObjManager,
+ Biff8MSDffManager* pDffMan = new Biff8MSDffManager( *pExcRoot, rObjManager,
0, 0, pD->GetDrawLayer(), 1440 );
- const String aStrName( _STRING( "Ctls" ) );
- SvStorage& rStrg = *pExcRoot->pRootStorage;
- const BOOL bHasCtrls = rStrg.IsContained( aStrName ) && rStrg.IsStream( aStrName );
- ScMSConvertControls* pCtrlConv;
- SvStorageStreamRef xStStream;
-
- if( bHasCtrls && pShell )
- {
- pCtrlConv = new ScMSConvertControls( pShell );
- xStStream = pExcRoot->pRootStorage->OpenStream( aStrName, STREAM_READ | STREAM_SHARE_DENYALL );
- }
-
const XclImpAnchorData* pAnch;
const SvxMSDffShapeInfos* pShpInf = pDffMan->GetShapeInfos();
@@ -1045,6 +1058,8 @@ void ImportExcel8::PostDocLoad( void )
nOLEImpFlags |= OLE_POWERPOINT_2_STARIMPRESS;
}
+ XclImpOcxConverter aOcxConverter( *this );
+
for( n = 0 ; n < nMax ; n++ )
{
p = pShpInf->GetObject( ( UINT16 ) n );
@@ -1052,7 +1067,7 @@ void ImportExcel8::PostDocLoad( void )
nShapeId = p->nShapeId;
- XclImpEscherObj* pObj = aObjManager.GetObjFromStream( p->nFilePos );
+ XclImpEscherObj* pObj = rObjManager.GetObjFromStream( p->nFilePos );
if( pObj && !pObj->GetSdrObj() )
{
pMSDffImportData = new SvxMSDffImportData;
@@ -1060,7 +1075,7 @@ void ImportExcel8::PostDocLoad( void )
if( pObj->GetSdrObj() )
{
- pAnch = aObjManager.GetAnchorData( p->nFilePos );
+ pAnch = rObjManager.GetAnchorData( p->nFilePos );
// *** find all objects to ignore ***
bIgnoreObj = false;
@@ -1074,7 +1089,7 @@ void ImportExcel8::PostDocLoad( void )
}
// other objects
if( !bIgnoreObj )
- bIgnoreObj = IsIgnoreObject( pObj->GetId() );
+ bIgnoreObj = rObjManager.IsIgnoreObject( pObj->GetId() );
if( bIgnoreObj )
pObj->SetSdrObj( NULL ); // delete SdrObject
@@ -1086,17 +1101,7 @@ void ImportExcel8::PostDocLoad( void )
((XclImpEscherOle*)pObj)->CreateSdrOle( *pDffMan, nOLEImpFlags );
break;
case otCtrl:
- if( bHasCtrls )
- {
- ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >
- xShapeRef = GetXShapeForSdrObject( ( SdrObject* ) pObj->GetSdrObj() );
- if( pCtrlConv->ReadOCXExcelKludgeStream( xStStream, &xShapeRef, TRUE ) )
- {
- SdrObject* pNewObj = GetSdrObjectFromXShape( xShapeRef );
- if( pNewObj )
- pObj->SetSdrObj( pNewObj );
- }
- }
+ aOcxConverter.ReadControl( static_cast< XclImpEscherOle& >( *pObj ) );
break;
}
}
@@ -1106,25 +1111,11 @@ void ImportExcel8::PostDocLoad( void )
}
}
- if( bHasCtrls )
- delete pCtrlConv;
-
delete pDffMan;
}
- aObjManager.Apply();
+ rObjManager.Apply();
- // controls
-/*
- ScMSConvertControls aCtrlConverter( pShell );
- String aStrName( String::CreateFromAscii( "Ctls" ) );
- com::sun::star::uno::Reference< com::sun::star::drawing::XShape >* pShapeRef = NULL;
-
- SvStorageStreamRef xStStream = pExcRoot->pRootStorage->OpenStream(
- aStrName, STREAM_READ | STREAM_SHARE_DENYALL );
- aCtrlConverter.ReadOCXExcelKludgeStream( xStStream, pShapeRef, TRUE );
- // BOOL bFloatingCtrl
-*/
ImportExcel::PostDocLoad();
// Scenarien bemachen! ACHTUNG: Hier wird Tabellen-Anzahl im Dokument erhoeht!!
@@ -1175,45 +1166,6 @@ void ImportExcel8::PostDocLoad( void )
-void ImportExcel8::CreateTmpCtrlStorage( void )
-{
-// if( pExcRoot->pCtrlStorage )
- if( pExcRoot->xCtrlStorage.Is() )
- return; // already done
-
- SvStorageStream* pContrIn = pExcRoot->pRootStorage->OpenStream( _STRINGCONST( "Ctls" ), STREAM_STD_READ );
- if( pContrIn )
- {
- SvStorageRef xStrg( new SvStorage( new SvMemoryStream(), TRUE ) );
- pExcRoot->xCtrlStorage = SvStorageRef( new SvStorage( new SvMemoryStream(), TRUE ) );
-// SvStorage* pStrg = new SvStorage( new SvMemoryStream(), TRUE );
-
-// SvStorageStreamRef xTemp = pStrg->OpenStream( _STRINGCONST( "contents" ) );
- SvStorageStreamRef xTemp = xStrg->OpenStream( _STRINGCONST( "contents" ) );
- if ( xTemp.Is() && ( xTemp->GetError() == SVSTREAM_OK ) )
- {
- pContrIn->Seek( 16 ); // no need for class id at this point
- *xTemp << *pContrIn;
-
- SvGlobalName aName( 0xD7053240, 0xCE69, 0x11CD, 0xA7, 0x77,
- 0x00, 0xDD, 0x01, 0x14, 0x3C, 0x57 );
- UINT32 nClip = SotExchange::RegisterFormatName( _STRING( "Embedded Object" ) );
-// pStrg->SetClass( aName, nClip, _STRING( "Microsoft Forms 2.0 CommandButton" ) );
- xStrg->SetClass( aName, nClip, _STRING( "Microsoft Forms 2.0 CommandButton" ) );
-
- pExcRoot->xCtrlStorage = xStrg;
- }
-/* else
- {
- delete pStrg;
- pStrg = NULL;
- }*/
-
-// pExcRoot->pCtrlStorage = pStrg;
- }
-}
-
-
void ImportExcel8::EndAllChartObjects( void )
{
}
@@ -1335,6 +1287,17 @@ void ImportExcel8::SXVdex( void )
void ImportExcel8::FilterMode( void )
{
+ // The FilterMode record exists: if either the AutoFilter
+ // record exists or an Advanced Filter is saved and stored
+ // in the sheet. Thus if the FilterMode records only exists
+ // then the latter is true..
+ if( !pAutoFilterBuffer ) return;
+
+ pAutoFilterBuffer->IncrementActiveAF();
+
+ XclImpAutoFilterData* pData = pAutoFilterBuffer->GetByTab( GetScTab() );
+ if( pData )
+ pData->SetAutoOrAdvanced();
}
void ImportExcel8::AutoFilterInfo( void )
@@ -1362,10 +1325,14 @@ void ImportExcel8::AutoFilter( void )
XclImpAutoFilterData::XclImpAutoFilterData( RootData* pRoot, const ScRange& rRange, const String& rName ) :
ExcRoot( pRoot ),
+ pCurrDBData(NULL),
nFirstEmpty( 0 ),
bActive( FALSE ),
bHasDropDown( FALSE ),
- bHasConflict( FALSE )
+ bHasConflict( FALSE ),
+ bCriteria( FALSE ),
+ bAutoOrAdvanced(FALSE),
+ aFilterName(rName)
{
aParam.nCol1 = rRange.aStart.Col();
aParam.nRow1 = rRange.aStart.Row();
@@ -1373,21 +1340,18 @@ XclImpAutoFilterData::XclImpAutoFilterData( RootData* pRoot, const ScRange& rRan
aParam.nCol2 = rRange.aEnd.Col();
aParam.nRow2 = rRange.aEnd.Row();
- ScDBCollection& rColl = *pRoot->pDoc->GetDBCollection();
+ // Excel defaults to always in place regardless
+ // of whether an extract record exists. The user
+ // must choose to explicity set the Copy To in the UI.
+ aParam.bInplace = TRUE;
- pCurrDBData = rColl.GetDBAtArea( Tab(), StartCol(), StartRow(), EndCol(), EndRow() );
- if( !pCurrDBData )
- {
- pCurrDBData = new ScDBData( rName, Tab(), StartCol(), StartRow(), EndCol(), EndRow() );
- if( pCurrDBData )
- rColl.Insert( pCurrDBData );
- }
}
void XclImpAutoFilterData::CreateFromDouble( String& rStr, double fVal )
{
- SolarMath::DoubleToString( rStr, fVal, 'A', INT_MAX,
- ScGlobal::pLocaleData->getNumDecimalSep().GetChar(0), TRUE );
+ rStr += String( ::rtl::math::doubleToUString( fVal,
+ rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max,
+ ScGlobal::pLocaleData->getNumDecimalSep().GetChar(0), TRUE));
}
void XclImpAutoFilterData::SetCellAttribs()
@@ -1563,8 +1527,13 @@ void XclImpAutoFilterData::ReadAutoFilter( XclImpStream& rStrm )
void XclImpAutoFilterData::SetAdvancedRange( const ScRange* pRange )
{
- if( pCurrDBData )
- pCurrDBData->SetAdvancedQuerySource( pRange );
+ if (pRange)
+ {
+ aCriteriaRange = *pRange;
+ bCriteria = TRUE;
+ }
+ else
+ bCriteria = FALSE;
}
void XclImpAutoFilterData::SetExtractPos( const ScAddress& rAddr )
@@ -1572,12 +1541,14 @@ void XclImpAutoFilterData::SetExtractPos( const ScAddress& rAddr )
aParam.nDestCol = rAddr.Col();
aParam.nDestRow = rAddr.Row();
aParam.nDestTab = rAddr.Tab();
- aParam.bInplace = FALSE;
aParam.bDestPers = TRUE;
+
}
-void XclImpAutoFilterData::Apply()
+void XclImpAutoFilterData::Apply( const BOOL bUseUnNamed )
{
+ CreateScDBData(bUseUnNamed);
+
if( bActive )
{
InsertQueryParam();
@@ -1593,8 +1564,68 @@ void XclImpAutoFilterData::Apply()
}
}
+void XclImpAutoFilterData::CreateScDBData( const BOOL bUseUnNamed )
+{
+
+ // Create the ScDBData() object if the AutoFilter is activated
+ // or if we need to create the Advanced Filter.
+ if( bActive || bCriteria)
+ {
+ ScDBCollection& rColl = *pExcRoot->pDoc->GetDBCollection();
+ pCurrDBData = rColl.GetDBAtArea( Tab(), StartCol(), StartRow(), EndCol(), EndRow() );
+ if( !pCurrDBData )
+ {
+ AmendAFName(bUseUnNamed);
+
+ pCurrDBData = new ScDBData( aFilterName, Tab(), StartCol(), StartRow(), EndCol(), EndRow() );
+
+ if( pCurrDBData )
+ {
+ if(bCriteria)
+ {
+ EnableRemoveFilter();
+
+ pCurrDBData->SetQueryParam( aParam );
+ pCurrDBData->SetAdvancedQuerySource(&aCriteriaRange);
+ }
+ else
+ pCurrDBData->SetAdvancedQuerySource(NULL);
+ rColl.Insert( pCurrDBData );
+ }
+ }
+ }
+
+}
+
+void XclImpAutoFilterData::EnableRemoveFilter()
+{
+ // only if this is a saved Advanced filter
+ if( !bActive && bAutoOrAdvanced )
+ {
+ ScQueryEntry& aEntry = aParam.GetEntry( nFirstEmpty );
+ aEntry.bDoQuery = TRUE;
+ ++nFirstEmpty;
+ }
+ // TBD: force the automatic activation of the
+ // "Remove Filter" by setting a virtual mouse click
+ // inside the advanced range
+}
+void XclImpAutoFilterData::AmendAFName(const BOOL bUseUnNamed)
+{
+ // If-and-only-if we have one AF filter then
+ // use the Calc "unnamed" range name. Calc
+ // only supports one in total while Excel
+ // supports one per sheet.
+ if( bUseUnNamed && bAutoOrAdvanced )
+ aFilterName = ScGlobal::GetRscString(STR_DB_NONAME);
+}
+
+XclImpAutoFilterBuffer::XclImpAutoFilterBuffer() :
+ nAFActiveCount( 0 )
+{
+}
XclImpAutoFilterBuffer::~XclImpAutoFilterBuffer()
{
@@ -1626,7 +1657,7 @@ void XclImpAutoFilterBuffer::AddExtractPos( const ScRange& rRange )
void XclImpAutoFilterBuffer::Apply()
{
for( XclImpAutoFilterData* pData = _First(); pData; pData = _Next() )
- pData->Apply();
+ pData->Apply(UseUnNamed());
}
XclImpAutoFilterData* XclImpAutoFilterBuffer::GetByTab( UINT16 nTab )