Fiooona 发表于 2019-6-14 18:06:01

SpreadJS表格控件(类Excel)实现自定义单元格——高亮搜索

本帖最后由 Fiooona 于 2019-6-14 18:09 编辑

    SpreadJS是一款类Excel的纯前端表格控件,可以与现在主流的框架VUE、Angular、React轻松集成。本文介绍如何实现单元格中高亮显示搜索框中的内容,效果如下图:

输入要搜索的内容,可以单元格中高亮显示搜索到的文字,使用SpreadJS的自定义单元格可以实现这种效果。
下面我们说明下实现步骤:
1.定义一个自定义单元格类型:HighlightSearchCellType,继承GC.Spread.Sheets.CellTypes.Text()
function HighlightSearchCellType() {}
      HighlightSearchCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();2.实现paintValue方法,根据搜索框的值正则匹配单元格中的数据,匹配到的内容高亮显示

3.绑定单元格时设置ColumnInfo的cellType为HighlightSearchCellType
var columnInfo = [
                { name: "LastName", displayName: "中文名", cellType: new HighlightSearchCellType(), size:80 },
                { name: "FirstName", displayName: "英文名", cellType: new HighlightSearchCellType(), size: 80 },
                { name: "Phone", displayName: "电话", cellType: new HighlightSearchCellType(), size: 180 },
                { name: "Email", displayName: "邮箱", cellType: new HighlightSearchCellType(), size: 200 },
            ];
sheet.bindColumns(columnInfo);4.监听键盘抬起事件,重新获取搜索框中的值,刷新页面
document.getElementById("searchTxt").onkeyup = (function() {
      sheet.searchText = document.getElementById("searchTxt").value;
      spread.repaint();
      });自定义单元格更多资料
SpreadJS中文学习指南:https://demo.grapecity.com.cn/SpreadJS/TutorialSample/#/demos/customCellType
完整代码可下载附件Demo

sssssss 发表于 2022-8-4 18:16:00

请问如何使查找到的单元格背景高亮

Richard.Ma 发表于 2022-8-4 18:31:22

可以加上这两句代码在原来的代码中
                ctx.fillStyle = "yellow";
                ctx.fillRect(x, y, w, h);

修改后的代码

            if (blocks) {
                ctx.fillStyle = "yellow";
                ctx.fillRect(x, y, w, h);
                for (var i = 0; i < blocks.length; i++) {
                  var block = blocks;
                  if (block.highlight) {
                        ctx.fillStyle = "red";
                  } else {
                        ctx.fillStyle = originalStyle;
                  }
                  ctx.fillText(block.text, x + 2, y + adjY);
                  x += ctx.measureText(block.text).width;
                }

            } else {
                ctx.fillText(text, x + 2, y + adjY);
            }


页: [1]
查看完整版本: SpreadJS表格控件(类Excel)实现自定义单元格——高亮搜索