筛选
预设信息
@univerjs/preset-sheets-filter
需要服务端支持
否
筛选功能允许用户对电子表格中的数据进行筛选,以便快速查找和分析特定信息。它支持多种筛选条件和操作,帮助用户更高效地处理数据。
预设模式
安装
npm install @univerjs/preset-sheets-filter
使用
import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'
import UniverPresetSheetsCoreZhCN from '@univerjs/preset-sheets-core/locales/zh-CN'
import { UniverSheetsFilterPreset } from '@univerjs/preset-sheets-filter'
import UniverPresetSheetsFilterZhCN from '@univerjs/preset-sheets-filter/locales/zh-CN'
import { createUniver, LocaleType, merge } from '@univerjs/presets'
import '@univerjs/preset-sheets-core/lib/index.css'
import '@univerjs/preset-sheets-filter/lib/index.css'
const { univerAPI } = createUniver({
locale: LocaleType.ZH_CN,
locales: {
[LocaleType.ZH_CN]: merge(
{},
UniverPresetSheetsCoreZhCN,
UniverPresetSheetsFilterZhCN,
),
},
presets: [
UniverSheetsCorePreset(),
UniverSheetsFilterPreset(),
],
})
插件模式
安装
npm install @univerjs/sheets-filter @univerjs/sheets-filter-ui
使用
import { LocaleType, merge, Univer } from '@univerjs/core'
import { UniverSheetsFilterPlugin } from '@univerjs/sheets-filter'
import { UniverSheetsFilterUIPlugin } from '@univerjs/sheets-filter-ui'
import SheetsFilterUIZhCN from '@univerjs/sheets-filter-ui/locale/zh-CN'
import '@univerjs/sheets-filter-ui/lib/index.css'
import '@univerjs/sheets-filter/facade'
const univer = new Univer({
locale: LocaleType.ZH_CN,
locales: {
[LocaleType.ZH_CN]: merge(
{},
SheetsFilterUIZhCN,
),
},
})
univer.registerPlugin(UniverSheetsFilterPlugin)
univer.registerPlugin(UniverSheetsFilterUIPlugin)
Facade API
完整 Facade API 类型定义,请查看 FacadeAPI。
获取筛选器
返回一个 FFilter
对象,若 sheet 没有筛选器,则返回 null
。
FWorksheet
对象上的getFilter()
FRange
对象上的getFilter()
const fWorkbook = univerAPI.getActiveWorkbook()
// 从 FWorksheet 获取筛选器
const fWorksheet = fWorkbook.getActiveSheet()
const fFilter = fWorksheet.getFilter()
fFilter?.getRange().getA1Notation()
// 从 FRange 获取筛选器
const fRange = fWorksheet.getRange('A1:D14')
const fFilter2 = fRange.getFilter()
fFilter2?.getRange().getA1Notation()
创建筛选器
创建一个 FFilter
对象,若 sheet 已经有筛选器,则返回 null
。
FRange
对象上的createFilter()
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()
const fRange = fWorksheet.getRange('A1:D14')
let fFilter = fRange.createFilter()
// 如果工作表已经有筛选器,则移除它并创建一个新的筛选器。
if (!fFilter) {
fWorksheet.getFilter().remove()
fFilter = fRange.createFilter()
}
fFilter.getRange().getA1Notation()
移除筛选器
FFilter.remove()
方法移除筛选器。
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()
fWorksheet.getFilter()?.remove()
获取列过滤条件
FFilter.getColumnFilterCriteria(column)
方法返回指定列的筛选条件。
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()
// 设置 C1:F10 范围的值
const fRange = fWorksheet.getRange('C1:F10')
fRange.setValues([
[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6],
[4, 5, 6, 7],
[5, 6, 7, 8],
[6, 7, 8, 9],
[7, 8, 9, 10],
[8, 9, 10, 11],
[9, 10, 11, 12],
[10, 11, 12, 13],
])
// 创建 C1:F10 范围的筛选器
let fFilter = fRange.createFilter()
// 如果筛选器已经存在,则移除它并创建一个新的筛选器
if (!fFilter) {
fRange.getFilter().remove()
fFilter = fRange.createFilter()
}
// 设置 C 列的筛选条件,筛选出值不是 1、5、9 的行
const column = fWorksheet.getRange('C:C').getColumn()
fFilter.setColumnFilterCriteria(column, {
colId: 0,
filters: {
filters: ['1', '5', '9'],
},
})
// 获取 C 和 D 列的筛选条件
fFilter.getColumnFilterCriteria(column) // { colId: 0, filters: { filters: ['1', '5', '9'] } }
fFilter.getColumnFilterCriteria(column + 1) // undefined
设置列筛选条件
FFilter.setColumnFilterCriteria(column, criteria)
方法设置指定列的筛选条件。
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()
// 设置 C1:F10 范围的值
const fRange = fWorksheet.getRange('C1:F10')
fRange.setValues([
[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6],
[4, 5, 6, 7],
[5, 6, 7, 8],
[6, 7, 8, 9],
[7, 8, 9, 10],
[8, 9, 10, 11],
[9, 10, 11, 12],
[10, 11, 12, 13],
])
// 创建 C1:F10 范围的筛选器
let fFilter = fRange.createFilter()
// 如果筛选器已经存在,则移除它并创建一个新的筛选器
if (!fFilter) {
fRange.getFilter().remove()
fFilter = fRange.createFilter()
}
// 设置 C 列的筛选条件,筛选出值不是 1、5、9 的行
const column = fWorksheet.getRange('C:C').getColumn()
fFilter.setColumnFilterCriteria(column, {
colId: 0,
filters: {
filters: ['1', '5', '9'],
},
})
移除列筛选条件
FFilter.removeColumnFilterCriteria(column)
方法移除指定列的筛选条件。FFilter.removeFilterCriteria()
方法移除所有列的筛选条件。
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()
// 设置 C1:F10 范围的值
const fRange = fWorksheet.getRange('C1:F10')
fRange.setValues([
[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6],
[4, 5, 6, 7],
[5, 6, 7, 8],
[6, 7, 8, 9],
[7, 8, 9, 10],
[8, 9, 10, 11],
[9, 10, 11, 12],
[10, 11, 12, 13],
])
// 创建 C1:F10 范围的筛选器
let fFilter = fRange.createFilter()
// 如果筛选器已经存在,则移除它并创建一个新的筛选器
if (!fFilter) {
fRange.getFilter().remove()
fFilter = fRange.createFilter()
}
// 设置 C 列的筛选条件,筛选出值不是 1、5、9 的行
const column = fWorksheet.getRange('C:C').getColumn()
fFilter.setColumnFilterCriteria(column, {
colId: 0,
filters: {
filters: ['1', '5', '9'],
},
})
// 3 秒后清除 C 列的筛选条件
setTimeout(() => {
fFilter.removeColumnFilterCriteria(column)
// 或者使用 fFilter.removeFilterCriteria() 移除所有列的筛选条件
}, 3000)
获取过滤掉的行
FFilter.getFilteredOutRows()
方法返回一个数组,包含被筛选掉的行的索引。
const fWorkbook = univerAPI.getActiveWorkbook()
const fWorksheet = fWorkbook.getActiveSheet()
// 设置一些 C1:F10 范围的值
const fRange = fWorksheet.getRange('C1:F10')
fRange.setValues([
[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6],
[4, 5, 6, 7],
[5, 6, 7, 8],
[6, 7, 8, 9],
[7, 8, 9, 10],
[8, 9, 10, 11],
[9, 10, 11, 12],
[10, 11, 12, 13],
])
// 创建 C1:F10 范围的筛选器
let fFilter = fRange.createFilter()
// 如果筛选器已经存在,则移除它并创建一个新的筛选器
if (!fFilter) {
fRange.getFilter().remove()
fFilter = fRange.createFilter()
}
// 设置 C 列的筛选条件,筛选出值不是 1、5、9 的行
const column = fWorksheet.getRange('C:C').getColumn()
fFilter.setColumnFilterCriteria(column, {
colId: 0,
filters: {
filters: ['1', '5', '9'],
},
})
// 打印被筛选掉的行
fFilter.getFilteredOutRows() // [1, 2, 3, 5, 6, 7, 9]
事件监听
完整事件类型定义,请查看 Events。
SheetRangeFiltered
事件在列过滤条件发生改变时触发。
const disposable = univerAPI.addEvent(univerAPI.Event.SheetRangeFiltered, (params) => {
const { workbook, worksheet, col, criteria } = params
// 你的自定义逻辑
})
// 移除事件监听器,使用 `disposable.dispose()`
SheetBeforeRangeFilter
事件在列过滤条件发生改变前触发。
const disposable = univerAPI.addEvent(univerAPI.Event.SheetBeforeRangeFilter, (params) => {
const { workbook, worksheet, col, criteria } = params
// 你的自定义逻辑
// 取消筛选条件更改操作
params.cancel = true
})
// 移除事件监听器,使用 `disposable.dispose()`
SheetRangeFilterCleared
事件在清除筛选条件时触发。
const disposable = univerAPI.addEvent(univerAPI.Event.SheetRangeFilterCleared, (params) => {
const { workbook, worksheet } = params
// 你的自定义逻辑
})
// 移除事件监听器,使用 `disposable.dispose()`
SheetBeforeRangeFilterClear
事件在清除筛选条件前触发。
const disposable = univerAPI.addEvent(univerAPI.Event.SheetBeforeRangeFilterClear, (params) => {
const { workbook, worksheet } = params
// 你的自定义逻辑
// 取消清除筛选条件操作
params.cancel = true
})
// 移除事件监听器,使用 `disposable.dispose()`