vue中handsontable 使用

Handsontable是一款功能强大的前端表格插件,提供了接近Excel的编辑体验,支持复杂的表格操作如复制粘贴、行列操作及排序等。本文详细介绍其安装、配置及使用方法,包括数据绑定、行列操作、单元格样式、数据类型处理等高级特性。

handsontable是目前在前端界最接近excel的插件,可以执行编辑,复制粘贴,插入删除行列,排序等复杂操作

1.安装模块包

npm install handsontable-pro @handsontable-pro/vue

npm install handsontable @handsontable/vue

这样安装完handsontable依赖的各模块(moment、numbro、pikaday 、zeroclipboard)也一起安装完了,不必再单独安装

2.引入模块包

import { HotTable } from '@handsontable-pro/vue'
import '../../node_modules/handsontable-pro/dist/handsontable.full.css'
import Handsontable from 'handsontable-pro'

代码示例
<template>
  <div id="hot-preview">
    <HotTable :root="root" ref="testHot" :settings="hotSettings"></HotTable>
  </div>
</template>

<script>
  import { HotTable } from '@handsontable-pro/vue'
  import '../../node_modules/handsontable-pro/dist/handsontable.full.css'
  import Handsontable from 'handsontable-pro'

  export default {
    data: function() {
      return {
        root: 'test-hot',
        hotSettings: {
          // data: [['sample', 'data']],
          data: [        //数据可以是二维数组,也可以是数组对象
          
            [false,'20080101', 10, 11, 12, 13,true],
            
            [false,'20090101', 20, 11, 14, 13,true],
            
            [false,'20010101', 30, 15, 12, 13,true],
            
            [false,'20010101', 32, 213, 21, 312,true],
            
            [false,'20010201', 32, 213, 21, 312,true],
            
            [false,'20010301', 32, 213, 21, 312,true],
            
            [false,'20010401', 32, 213, 21, 312,true],
            
            [false,'20010501', 32, 213, 21, 312,true],
            
            [false,'20010601', 32, 213, 21, 312,true]
          
          ],
          // colHeaders: true,
          startRows: 11,//行列范围
        
          startCols: 6,
          
          minRows: 5,  //最小行列
          
          minCols: 5,
          
          maxRows: 20,  //最大行列
          
          maxCols: 20,
          rowHeaders: true,//行表头,可以使布尔值(行序号),可以使字符串(左侧行表头相同显示内容,可以解析html),也可以是数组(左侧行表头单独显示内容)。
        
          colHeaders:   [ '选择','题目', 'A选项', 'B选项', 'C选项', 'D选项','答案',],//自定义列表头or 布尔值
          minSpareCols: 2, //列留白
        
          minSpareRows: 2,//行留白
          // currentRowClassName: 'currentRow', //为选中行添加类名,可以更改样式
          // currentColClassName: 'currentCol',//为选中列添加类名
          autoWrapRow: true, //自动换行
          contextMenu:{
            items:{
                "row_above": {
                  name:'上方插入一行'
                },
                "row_below": {
                  name:'下方插入一行'
                },
                "col_left": {
                  name:'左方插入列'
                },
                "col_right": {
                  name:'右方插入列'
                },
                "hsep1": "---------", //提供分隔线
                "remove_row": {
                  name: '删除行',
                },
                "remove_col": {
                  name: '删除列',
                },
                "make_read_only": {
                  name: '只读',
                },
                "borders":{
                  name:'表格线'
                },
                "copy":{
                  name:'复制'
                },
                "cut":{
                  name:'剪切'
                },
                "commentsAddEdit": {
                  name: '添加备注',
                },
                "commentsRemove": {
                  name: '取消备注',
                },
                "freeze_column": {
                  name: '固定列',
                },
                "unfreeze_column": {
                  name: '取消列固定',
                },
                "hsep2": "---------",
            }
          },
          manualColumnFreeze: true, //手动固定列  ?
          manualColumnMove: true, //手动移动列
          manualRowMove: true,   //手动移动行
          manualColumnResize: true,//手工更改列距
          manualRowResize: true,//手动更改行距
          comments: true, //添加注释  ?
          cell: [  //???
            {row: 1, col: 1, comment: {value: 'this is test'}},
          ],
          customBorders:[],//添加边框
          columnSorting: true,//排序
          stretchH: 'all',//根据宽度横向扩展,last:只扩展最后一列,none:默认不扩展
          fillHandle: true, //选中拖拽复制 possible values: true, false, "horizontal", "vertical"
          fixedColumnsLeft: 2,//固定左边列数
          fixedRowsTop: 2,//固定上边列数
          mergeCells: [   //合并
             // {row: 1, col: 1, rowspan: 3, colspan: 3},  //指定合并,从(1,1)开始行3列3合并成一格
             // {row: 3, col: 4, rowspan: 2, colspan: 2}
          ],
          columns: [     //添加每一列的数据类型和一些配置
            {type: 'checkbox'},  //多选框
            {
              type: 'date',   //时间格式
              dateFormat: 'YYYY-MM-DD',
              correctFormat: true,
              defaultDate: '19000101'
            },
            {
              type: 'dropdown', //下拉选择
              source: ['BMW', 'Chrysler', 'Nissan', 'Suzuki', 'Toyota', 'Volvo'],
              strict: false   //是否严格匹配
            },
            {type: 'numeric'},  //数值
            {type: 'numeric',
              readOnly: true  //设置只读
            },
            { type: 'numeric',
              format: '$ 0,0.00'},  //指定的数据格式
            {},
           
          ],
        }
      };
    },
    methods:{
      testFunc:function(){
        //this.$refs.hotTable.table就是当前的表格的对象
        console.log(this.$refs.hotTable.table)
      }
    },
    components: {
      HotTable
    }
  }
</script>

 

转载于:https://www.cnblogs.com/Kyaya/p/10999490.html

### 如何在 Vue 3 中使用 Handsontable 为了在 Vue 3 应用程序中集成 Handsontable,安装必要的依赖包是首要操作。通过命令 `npm install handsontable @handsontable/vue3` 可完成所需库的引入[^1]。 #### 创建组件并初始化表格 创建一个新的 Vue 组件用于承载 Handsontable 实例: ```vue <template> <div> <!-- 使用 HandsontableVue 组件 --> <hot-table :settings="hotSettings"></hot-table> </div> </template> <script> import { HotTable } from '@handsontable/vue3'; import 'handsontable/dist/handsontable.full.css'; export default { name: "MyHotComponent", components: { HotTable, }, data() { return { hotSettings: { colHeaders: true, // 显示列头 rowHeaders: true, // 显示行头 stretchH: 'all', // 表格宽度自适应 height: 400, // 设置高度 licenseKey: 'non-commercial-and-evaluation' // 非商业用途许可密钥 } }; } }; </script> ``` 此代码片段展示了如何定义一个简单的 Handsontable 表格配置,并将其嵌入到 Vue 组件模板内。注意这里导入了样式文件以确保表格外观正常显示。 #### 注册全局组件 (可选) 如果希望在整个项目范围内都能访问 Handsontable,则可以在 main.js 或类似的入口文件里注册它作为全局组件: ```javascript // 导入手动表和样式 import { createApp } from 'vue' import App from './App.vue' import { HotTable } from '@handsontable/vue3' import 'handsontable/dist/handsontable.full.css' const app = createApp(App); app.component('hot-table', HotTable); // 将其设置为全局可用 app.mount('#app'); ``` 这样做的好处是在任何地方都可以直接使用 `<hot-table>` 而无需再次单独声明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值