筛选
筛选功能允许用户对电子表格中的数据进行筛选,以便快速查找和分析特定信息。它支持多种筛选条件和操作,帮助用户更高效地处理数据。
预设模式
安装
Shell
pnpm add @univerjs/preset-sheets-filterShell
npm install @univerjs/preset-sheets-filterShell
yarn add @univerjs/preset-sheets-filterShell
bun add @univerjs/preset-sheets-filter使用
TypeScript
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, mergeLocales } 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]: mergeLocales( UniverPresetSheetsCoreZhCN, UniverPresetSheetsFilterZhCN, ), }, presets: [ UniverSheetsCorePreset(), UniverSheetsFilterPreset(), ],})预设与配置
TypeScript
interface IUniverSheetsFilterPresetConfig { /** * 是否在筛选面板中显示筛选器同步开关。 * 这个配置可以在协作场景中使用,允许用户选择是否启用筛选器同步。 * 如果设置为 defaultValue 对象,则会显示筛选器同步开关,其初始状态将由 defaultValue 属性决定。 * @default false */ enableSyncSwitch?: boolean | { defaultValue: boolean }}插件模式
安装
Shell
pnpm add @univerjs/sheets-filter @univerjs/sheets-filter-uiShell
npm install @univerjs/sheets-filter @univerjs/sheets-filter-uiShell
yarn add @univerjs/sheets-filter @univerjs/sheets-filter-uiShell
bun add @univerjs/sheets-filter @univerjs/sheets-filter-ui使用
TypeScript
import { LocaleType, mergeLocales, 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]: mergeLocales( SheetsFilterUIZhCN, ), },})univer.registerPlugin(UniverSheetsFilterPlugin)univer.registerPlugin(UniverSheetsFilterUIPlugin)插件与配置
TypeScript
interface IUniverSheetsFilterConfig { /** * 是否在筛选面板中显示筛选器同步开关。 * 这个配置可以在协作场景中使用,允许用户选择是否启用筛选器同步。 * 如果设置为 defaultValue 对象,则会显示筛选器同步开关,其初始状态将由 defaultValue 属性决定。 * @default false */ enableSyncSwitch?: boolean | { defaultValue: boolean }}Facade API
完整 Facade API 类型定义,请查看 FacadeAPI。
引入
插件模式提示
仅插件模式需要手动引入 Facade 包。预设模式已内置对应的 Facade 包,无需额外导入。
TypeScript
import '@univerjs/sheets-filter/facade'获取筛选器
返回一个 FFilter 对象,若 sheet 没有筛选器,则返回 null。
FWorksheet对象上的getFilter()FRange对象上的getFilter()
TypeScript
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()
TypeScript
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() 方法移除筛选器。
TypeScript
const fWorkbook = univerAPI.getActiveWorkbook()const fWorksheet = fWorkbook.getActiveSheet()fWorksheet.getFilter()?.remove()获取列过滤条件
FFilter.getColumnFilterCriteria(column) 方法返回指定列的筛选条件。
TypeScript
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) 方法设置指定列的筛选条件。
TypeScript
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()方法移除所有列的筛选条件。
TypeScript
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() 方法返回一个数组,包含被筛选掉的行的索引。
TypeScript
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 事件在列过滤条件发生改变时触发。
TypeScript
const disposable = univerAPI.addEvent(univerAPI.Event.SheetRangeFiltered, (params) => { const { workbook, worksheet, col, criteria } = params})// 移除事件监听器,使用 `disposable.dispose()`SheetBeforeRangeFilter 事件在列过滤条件发生改变前触发。
TypeScript
const disposable = univerAPI.addEvent(univerAPI.Event.SheetBeforeRangeFilter, (params) => { const { workbook, worksheet, col, criteria } = params // 取消筛选条件更改操作 params.cancel = true})// 移除事件监听器,使用 `disposable.dispose()`SheetRangeFilterCleared 事件在清除筛选条件时触发。
TypeScript
const disposable = univerAPI.addEvent(univerAPI.Event.SheetRangeFilterCleared, (params) => { const { workbook, worksheet } = params})// 移除事件监听器,使用 `disposable.dispose()`SheetBeforeRangeFilterClear 事件在清除筛选条件前触发。
TypeScript
const disposable = univerAPI.addEvent(univerAPI.Event.SheetBeforeRangeFilterClear, (params) => { const { workbook, worksheet } = params // 取消清除筛选条件操作 params.cancel = true})// 移除事件监听器,使用 `disposable.dispose()`你觉得这篇文档如何?