diff options
-rw-r--r-- | oox/inc/oox/xls/autofilterbuffer.hxx | 5 | ||||
-rw-r--r-- | oox/source/xls/autofilterbuffer.cxx | 18 |
2 files changed, 19 insertions, 4 deletions
diff --git a/oox/inc/oox/xls/autofilterbuffer.hxx b/oox/inc/oox/xls/autofilterbuffer.hxx index 869c2114b098..493c512b7b42 100644 --- a/oox/inc/oox/xls/autofilterbuffer.hxx +++ b/oox/inc/oox/xls/autofilterbuffer.hxx @@ -54,8 +54,9 @@ struct ApiFilterSettings explicit ApiFilterSettings(); - void appendField( bool bAnd, sal_Int32 nOperator, double fValue ); - void appendField( bool bAnd, sal_Int32 nOperator, const ::rtl::OUString& rValue ); + void appendField( bool bAnd, sal_Int32 nOperator, double fValue ); + void appendField( bool bAnd, sal_Int32 nOperator, const ::rtl::OUString& rValue ); + void appendField( bool bAnd, const std::vector<rtl::OUString>& rValues ); }; // ============================================================================ diff --git a/oox/source/xls/autofilterbuffer.cxx b/oox/source/xls/autofilterbuffer.cxx index dd3fc5acf31d..7a3e6fad0be0 100644 --- a/oox/source/xls/autofilterbuffer.cxx +++ b/oox/source/xls/autofilterbuffer.cxx @@ -189,6 +189,21 @@ void ApiFilterSettings::appendField( bool bAnd, sal_Int32 nOperator, const OUStr rFilterField.Values[0].StringValue = rValue; } +void ApiFilterSettings::appendField( bool bAnd, const std::vector<rtl::OUString>& rValues ) +{ + maFilterFields.resize( maFilterFields.size() + 1 ); + TableFilterField3& rFilterField = maFilterFields.back(); + rFilterField.Connection = bAnd ? FilterConnection_AND : FilterConnection_OR; + rFilterField.Operator = FilterOperator2::EQUAL; + size_t n = rValues.size(); + rFilterField.Values.realloc(n); + for (size_t i = 0; i < n; ++i) + { + rFilterField.Values[i].IsNumeric = false; + rFilterField.Values[i].StringValue = rValues[i]; + } +} + // ============================================================================ FilterSettingsBase::FilterSettingsBase( const WorkbookHelper& rHelper ) : @@ -276,8 +291,7 @@ ApiFilterSettings DiscreteFilter::finalizeImport( sal_Int32 nMaxCount ) aSettings.maFilterFields.reserve( maValues.size() ); // insert all filter values - for( FilterValueVector::iterator aIt = maValues.begin(), aEnd = maValues.end(); aIt != aEnd; ++aIt ) - aSettings.appendField( false, FilterOperator2::EQUAL, *aIt ); + aSettings.appendField( true, maValues ); // extra field for 'show empty' if( mbShowBlank ) |