|
| 1 | +--- |
| 2 | +title: 获取单元格数据 |
| 3 | +order: 9 |
| 4 | +--- |
| 5 | + |
| 6 | +> 请确保已经阅读过 基础教程,数据流处理,布局等章节 |
| 7 | +
|
| 8 | +在实际的业务场景中,往往会遇到一些需要获取**单元格数据**的场景,常见的比如: |
| 9 | + |
| 10 | +- 点击某一个行头/列头单元格,获取**当前行/列**所有数据 |
| 11 | +- 监听鼠标 `click` `hover` 事件 获取当前对应单元格数据 |
| 12 | +- 自定义 `tooltip` 内容,需要根据当前单元格信息来渲染不同的操作项,或者显示不同的提示信息 |
| 13 | + |
| 14 | +`S2` 的表格由 `canvas` 绘制,所以只会有一个 `dom` 元素,所有单元格对应的一组数据结构,里面存储了每个单元格的坐标,文本信息,交互状态等 [信息](/zh/docs/api/basic-class/base-cell) |
| 15 | + |
| 16 | +`S2` 提供了一系列获取数据的 [API](/zh/docs/api/basic-class/spreadsheet), 下面介绍一些常用的场景 |
| 17 | + |
| 18 | +### 监听点击事件获取对应单元格 |
| 19 | + |
| 20 | +以点击行头单元格为例 |
| 21 | + |
| 22 | +```ts |
| 23 | +s2.on(S2Event.ROW_CELL_CLICK, (event) => { |
| 24 | + // 根据 event.target 拿到表格内部当前坐标对应的单元格 |
| 25 | + const cell = s2.getCell(event.target) |
| 26 | + // 获取当前单元格对应的信息 |
| 27 | + const meta = cell.getMeta() |
| 28 | +}) |
| 29 | +``` |
| 30 | + |
| 31 | +<img src="https://gw.alipayobjects.com/zos/antfincdn/%24a%24HyJBIV/79abf381-a58a-460d-ad75-096c5484c780.png" width="600" alt="preview"/> |
| 32 | + |
| 33 | +当然,任何能拿到 `event` 的地方你都可以通过这种方式拿到数据 |
| 34 | + |
| 35 | +### 获取选中的单元格 |
| 36 | + |
| 37 | +在单选,多选,刷选等场景,在选中后会透出 `S2Event.GLOBAL_SELECTED` 事件,可以获取到选中的单元格 |
| 38 | + |
| 39 | +```ts |
| 40 | +s2.on(S2Event.GLOBAL_SELECTED, (cells) => { |
| 41 | + console.log('选中的单元格', cells) |
| 42 | +}) |
| 43 | +``` |
| 44 | + |
| 45 | +<img src="https://gw.alipayobjects.com/zos/antfincdn/GO7xii%26LQ/13b44f81-271c-4771-b7b3-45789761eab2.png" width="600" alt="preview"/> |
| 46 | + |
| 47 | +也可以调用 [交互方法](/zh/docs/manual/advanced/interaction/basic#%E8%B0%83%E7%94%A8%E4%BA%A4%E4%BA%92%E6%96%B9%E6%B3%95), 手动的获取 |
| 48 | + |
| 49 | +```ts |
| 50 | +s2.interaction.getAllCells() // 获取所有单元格 |
| 51 | +s2.interaction.getActiveCells() // 获取所有激活的单元格 |
| 52 | +s2.interaction.isSelectedState() // 是否是选中状态 |
| 53 | +``` |
| 54 | + |
| 55 | +### 获取行/列数据 |
| 56 | + |
| 57 | +表格初始化时,会将用户声明的数据配置 (s2DataConfig) 转换成内部所需要的数据集 (dataSet), 具体请查看 [数据流处理](/zh/docs/manual/advanced/data-process/pivot) |
| 58 | + |
| 59 | +数据集的 [实例](/zh/docs/api/basic-class/base-data-set) 挂载在 `s2.dataSet` 命名空间下,可访问它获取你需要的: |
| 60 | + |
| 61 | +- 原生数据 |
| 62 | +- 汇总数据 |
| 63 | +- 多维索引数据 |
| 64 | +- 格式化后的字段名,字段描述 |
| 65 | +- 获取维值 |
| 66 | +- 单个单元格数据 |
| 67 | +- 多个单元格数据 |
| 68 | + |
| 69 | +还是以点击行头单元格为例: |
| 70 | + |
| 71 | +```ts |
| 72 | +s2.on(S2Event.ROW_CELL_CLICK, (event) => { |
| 73 | + // 首先拿到单元格当前信息 |
| 74 | + const cell = s2.getCell(event.target) |
| 75 | + const meta = cell.getMeta() |
| 76 | + |
| 77 | + // 获取当前行数据 |
| 78 | + const rowData = s2.dataSet.getMultiData(meta.query) |
| 79 | + // 获取当前行头单元格数据: |
| 80 | + const rowCellData = s2.dataSet.getCellData({ query: meta.query }) |
| 81 | + // 获取当前行头维值 |
| 82 | + const dimensionValues = s2.dataSet.getDimensionValues(meta.field) |
| 83 | + |
| 84 | + console.log('当前行数据:', rowData) |
| 85 | + console.log('当前行头单元格数据:', rowCellData) |
| 86 | + console.log('当前行头维值:', dimensionValues) |
| 87 | +}) |
| 88 | + |
| 89 | +``` |
| 90 | + |
| 91 | +<img src="https://gw.alipayobjects.com/zos/antfincdn/5KTuqpLdy/cf26a185-2a1d-41f3-9caf-aa9343529cd5.png" width="600" alt="preview"/> |
0 commit comments