Index: source/filter/inc/excimp8.hxx =================================================================== RCS file: /cvs/sc/sc/source/filter/inc/excimp8.hxx,v retrieving revision 1.42.2.2 diff -u -r1.42.2.2 excimp8.hxx --- source/filter/inc/excimp8.hxx 14 Feb 2003 15:00:11 -0000 1.42.2.2 +++ source/filter/inc/excimp8.hxx 21 Feb 2003 15:33:38 -0000 @@ -259,6 +259,7 @@ void CreateFromDouble( String& rStr, double fVal ); void SetCellAttribs(); void InsertQueryParam(); + void AmendAFName(const BOOL bUseUnNamed); protected: public: @@ -280,8 +281,8 @@ void SetAdvancedRange( const ScRange* pRange ); void SetExtractPos( const ScAddress& rAddr ); inline void SetAutoOrAdvanced() { bAutoOrAdvanced = TRUE; } - void Apply(); - void CreateScDBData(); + void Apply( const BOOL bUseUnNamed = FALSE ); + void CreateScDBData( const BOOL bUseUnNamed ); void EnableRemoveFilter(); }; @@ -289,14 +290,17 @@ class XclImpAutoFilterBuffer : private List { private: - inline XclImpAutoFilterData* _First() { return (XclImpAutoFilterData*) List::First(); } + UINT16 nAFActiveCount; + + inline XclImpAutoFilterData* _First() { return (XclImpAutoFilterData*) List::First(); } inline XclImpAutoFilterData* _Next() { return (XclImpAutoFilterData*) List::Next(); } inline void Append( XclImpAutoFilterData* pData ) { List::Insert( pData, LIST_APPEND ); } protected: public: - virtual ~XclImpAutoFilterBuffer(); + XclImpAutoFilterBuffer(); + virtual ~XclImpAutoFilterBuffer(); void Insert( RootData* pRoot, const ScRange& rRange, const String& rName ); @@ -306,6 +310,8 @@ XclImpAutoFilterData* GetByTab( UINT16 nTab ); BOOL HasDropDown( UINT16 nCol, UINT16 nRow, UINT16 nTab ); + inline void IncrementActiveAF() { nAFActiveCount++; } + inline BOOL UseUnNamed() { return nAFActiveCount == 1; } }; Index: source/filter/excel/excimp8.cxx =================================================================== RCS file: /cvs/sc/sc/source/filter/excel/excimp8.cxx,v retrieving revision 1.74.4.1.2.4 diff -u -r1.74.4.1.2.4 excimp8.cxx --- source/filter/excel/excimp8.cxx 17 Feb 2003 11:36:11 -0000 1.74.4.1.2.4 +++ source/filter/excel/excimp8.cxx 21 Feb 2003 15:33:51 -0000 @@ -1278,6 +1278,8 @@ // then the latter is true.. if( !pAutoFilterBuffer ) return; + pAutoFilterBuffer->IncrementActiveAF(); + XclImpAutoFilterData* pData = pAutoFilterBuffer->GetByTab( GetScTab() ); if( pData ) pData->SetAutoOrAdvanced(); @@ -1528,9 +1530,9 @@ } -void XclImpAutoFilterData::Apply() +void XclImpAutoFilterData::Apply( const BOOL bUseUnNamed ) { - CreateScDBData(); + CreateScDBData(bUseUnNamed); if( bActive ) { @@ -1547,7 +1549,7 @@ } } -void XclImpAutoFilterData::CreateScDBData() +void XclImpAutoFilterData::CreateScDBData( const BOOL bUseUnNamed ) { // Create the ScDBData() object if the AutoFilter is activated @@ -1558,6 +1560,8 @@ pCurrDBData = rColl.GetDBAtArea( Tab(), StartCol(), StartRow(), EndCol(), EndRow() ); if( !pCurrDBData ) { + AmendAFName(bUseUnNamed); + pCurrDBData = new ScDBData( aFilterName, Tab(), StartCol(), StartRow(), EndCol(), EndRow() ); if( pCurrDBData ) @@ -1593,6 +1597,24 @@ // 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 ) + { + rtl::OUString sOUNoName (ScGlobal::GetRscString(STR_DB_NONAME)); + aFilterName = sOUNoName; + } +} + +XclImpAutoFilterBuffer::XclImpAutoFilterBuffer() : + nAFActiveCount( 0 ) +{ +} + XclImpAutoFilterBuffer::~XclImpAutoFilterBuffer() { for( XclImpAutoFilterData* pData = _First(); pData; pData = _Next() ) @@ -1623,7 +1645,7 @@ void XclImpAutoFilterBuffer::Apply() { for( XclImpAutoFilterData* pData = _First(); pData; pData = _Next() ) - pData->Apply(); + pData->Apply(UseUnNamed()); } XclImpAutoFilterData* XclImpAutoFilterBuffer::GetByTab( UINT16 nTab ) Index: source/filter/excel/excrecds.cxx =================================================================== RCS file: /cvs/sc/sc/source/filter/excel/excrecds.cxx,v retrieving revision 1.54.4.2.2.2.18.1 diff -u -r1.54.4.2.2.2.18.1 excrecds.cxx --- source/filter/excel/excrecds.cxx 20 Feb 2003 10:39:21 -0000 1.54.4.2.2.2.18.1 +++ source/filter/excel/excrecds.cxx 21 Feb 2003 15:34:09 -0000 @@ -100,6 +100,7 @@ #include #include "global.hxx" +#include "globstr.hrc" #include "docpool.hxx" #include "patattr.hxx" #include "cell.hxx" @@ -1867,7 +1868,8 @@ BOOL ExcName::IsBuiltInAFName( const String& rName, UINT8 nKey ) { - if( XclTools::IsBuiltInName( nTabNum, rName, nKey ) ) + if( XclTools::IsBuiltInName( nTabNum, rName, nKey ) || + (rName == ScGlobal::GetRscString( STR_DB_NONAME ))) { bDummy = TRUE; return TRUE;