通过Handsontable实现像Excel一样编辑数据

这篇具有很好参考价值的文章主要介绍了通过Handsontable实现像Excel一样编辑数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Handsontable是指什么?

官网: http://handsontable.com

Handsontable是一个JavaScript库,可以帮助您轻松实现类似Excel电子表格一样的编辑方式。
示范页面尝试一下就知道了,不仅可以像Excel那样输入数据,还有可指定单元格的格式、制作图表等丰富的功能。

二、概要

kintone作为云服务低代码平台,虽然可以通过浏览器直接查看记录列表以及编辑记录等操作,但还是有不少客户反映希望可以像Excel那样查看、编辑数据。
这次就向大家介绍一下如何使用Cybozu CDN中公布的Handsontable来实现类似Excel的编辑方式。感兴趣的务必请尝试一下哦。

三、准备应用

首先准备好应用。

1、字段设置

应用的字段设置如下。字段名称和字段代码一样。

通过Handsontable实现像Excel一样编辑数据

 2、列表的设置

列表使用自定义列表。
通过HTML来编写显示电子表格所需要的元素。

<div id="sheet"></div>

关于自定义列表的详情,请参考以下页面。

  • 入门篇 第 7篇 使用自定义列表

3、JavaScript/CSS的设置

本次使用Cybozu CDN中的库。Cybozu CDN不单单提供JavaScript,还有CSS文件。这些内容存在缓存里,具有访问速度快的优点。

  • Cybozu CDN

这次使用的是version 0.20.0※。在应用的JavaScript/CSS设置页面,输入以下URL。

  • JavaScript URL
    https://js.cybozu.cn/handsontable/0.20.0/handsontable.full.min.js

  • CSS URL
    https://js.cybozu.cn/handsontable/0.20.0/handsontable.full.min.css

 备注:在本篇文章中使用的 Handsontable,从 v7.0.0 开始将不再是 MIT License。
在本篇文章的自定义里,请使用许可证为 MIT License 的 v0.20.0(查看许可证内容)。
如需使用 v7.0.0 或更高版本时,请从 Handsontable 的官方网站 购买付费许可证,并在遵守许可证条件的前提下使用。
有关详细信息,请参阅 Cybozu CDN 许可证对应指南。

4、输入数据

先输入几条数据,以方便后面确认用。

四、JavaScript

然后通过JavaScript来编写代码。

1、Handsontable的使用方法

只要指定以下内容即可显示电子表格。数据的话,在Handsontable的data选项中指定kintone的记录数据就可以实现数据绑定了。

var

  container = document.getElementById('sheet');    

  var hot  = new Handsontable(container, {    

    data: data,        // 指定数组或对象的数据    

  minSpareRows: 1,   // 指定下边余白    

  rowHeaders: true,  // 指定列的标题    

  colHeaders: true,  // 指定行的标题    

  contextMenu: true  // 显示右击菜单    

});

2、在电子表格中显示记录列表

首先单纯地试一下将kintone记录显示到电子表格。
Handsontable的data选项指定为kintone的记录数据,columns指定为"字段名称.value",这样就可以使kintone的记录数据显示到电子表格了。
根据需要,可通过数组形式给colHeaders选项指定标题行。
※viewId是设置自定义列表时输入的viewId。

(function() {

    "use strict";

    kintone.events.on(['app.record.index.show'], function(event) {

        // 指定列表ID(指定的列表ID的列表不处理)

        if (event.viewId !== 7199) return;

        var records = event.records;

        // 创建自定义列表时填写的HTML元素。

        var container = document.getElementById('sheet');

        // Handsontable实例化

        var hot = new Handsontable(container, {

            // 指定kintone的记录数据

            data: records,

            minSpareRows: 0,

            // 指定列的标题

            colHeaders: ["记录编号", "公司名称", "对方负责人", "签约日", "准确度", "产品名称", "单价", "用户数", "合计"],

            contextMenu: false,

            // 指定显示data对象的哪列。

            columns: [

                {data: "记录编号.value"},

                {data: "公司名称.value"},

                {data: "对方负责人.value"},

                {data: "签约日.value"},

                {data: "准确度.value"},

                {data: "产品名称.value"},

                {data: "单价.value"},

                {data: "用户数.value"},

                {data: "合计.value"}

            ]

        });

    });

})();

这样,kintone中的数据应该就能像Excel那样显示了。

通过Handsontable实现像Excel一样编辑数据

3、更新电子表格内显示的记录

到这里显示已经搞定了,但是还需要可以更新数据。
更新时,会调用afterChange选项中指定的方法,使用该方法,就可以进行kintone的更新处理了。
另外,在指定columns选项时,可以将不想被更改的数据指定为readOnly。

(function() {

    // 保存记录的方法

    "use strict";

    var saveRecords = function(records, callback, errorCallback) {

        kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', {app: kintone.app.getId(), records: records},

        function(resp) {

            callback(resp);

        },

        function(resp) {

            errorCallback(resp);

        });

    };

    // 更新kintone记录时使用的方法:要先排除不能更新的字段,比如记录编号等。

    var setParams = function(record) {

        var result = {};

        for (var prop in record) {

            if (['记录编号', '创建时间', '更新时间', '创建人', '更新人'].indexOf(prop) === -1) {

                result[prop] = record[prop];

            }

        }

        return result;

    };

    // 显示列表使用的事件语句

    kintone.events.on(['app.record.index.show'], function(event) {

        if (event.viewId !== 7199) return;

        var records = event.records;

        var container = document.getElementById('sheet');

        var hot = new Handsontable(container, {

            data: records,

            minSpareRows: 0,

            colHeaders: ["记录编号", "公司名称", "对方负责人", "签约日", "准确度", "产品名称", "单价", "用户数", "合计"],

            contextMenu: false,

            // 根据需要可指定readOnly。

            columns: [

                {data: "记录编号.value", readOnly: true},

                {data: "公司名称.value"},

                {data: "对方负责人.value"},

                {data: "签约日.value"},

                {data: "准确度.value"},

                {data: "产品名称.value"},

                {data: "单价.value"},

                {data: "用户数.value"},

                {data: "合计.value", readOnly: true}

            ],

            // 电子表格的单元格被更新时,以下方法会被调用。

            // 调用的aftarChange方法可知道参数change中变更的单元格的详情,参数source可知道从什么变更而来的。

            afterChange: function(change, source) {

                if (source === 'loadData') {

                    return;

                }

                var i;

                var targets = [];

                // 读取参数change的数据,发行kintone的更新API。

                for (i = 0; i < change.length; i++) {

                    targets.push({

                        id: records[change[i][0]]["记录编号"].value,

                        record: setParams(records[change[i][0]])

                    });

                }

                saveRecords(targets, function(resp) {console.dir(resp); }, function(resp) {console.dir(resp); });

            }

        });

    });

})();

通过Handsontable实现像Excel一样编辑数据

afterChange方法的参数Change保存以下数组。上面的列子中,参照"发生了更改的单元格的行数"来指定要更改哪条记录。

// 第10行,对方负责人被更新时    
[    
  [    
    9,                   // 发生变更的单元格的行数    
    "对方负责人.value",   // 发生变更的单元格的列数    
    "测试人员",          // 变更前的数据    
    "测试人员"           // 变更后的数据    
  ]    
]

顺便说一下,数据绑定是自动的,在电子表格上更改数据后,会立即反映到kintone的event.records变量里。非常便利。

五、最后

怎么样?不单单外表看起来像Excel,可以像Excel那样进行数据显示和编辑吧。

添加记录及下拉菜单等的选择,请点击:https://cybozudev.kf5.com/hc/kb/article/219875/

 文章来源地址https://www.toymoban.com/news/detail-433244.html

到了这里,关于通过Handsontable实现像Excel一样编辑数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图形编辑器开发:是否要像 Figma 一样上 wasm

    大家好,我是前端西瓜哥。 wasm 拿来做 Web 端的图形编辑器貌似是不错的选择。 因为图形处理会有相当多无法利用到 WebGL GPU 加速的 CPU 密集的计算。比如对一条复杂贝塞尔曲线进行三角化,对多个图形进行复杂图形的布尔运算。 图形编辑器性能天花板 Figma 用了 wasm,我们也

    2024年02月15日
    浏览(37)
  • 瓦片地图编辑器——实现卡马克卷轴的编辑,键盘控制游戏移动和鼠标点击游戏编辑通过同一个视口实现。

      左边是游戏地图编辑区,右边是地图缓冲区,解决了地图缓冲区拖动bug,成功使得缓冲区可以更新。 AWSD进行移动 鼠标左右键分别是绘制/拖动 按F1健导出为mapv3.txt F2清空数组 打印的是游戏数组 easyx开发devcpp 5.11 easyx20220922版本

    2024年01月25日
    浏览(75)
  • 让WPF中的DataGrid像Excel一样可以筛选

    在默认情况下,WPF提供的DataGrid仅拥有数据展示等简单功能,如果要实现像Excel一样复杂的筛选过滤功能,则相对比较麻烦。本文以一个简单的小例子,简述如何通过WPF实话DataGrid的筛选功能,仅供学习分享使用,如有不足之处,还请指正。 在本示例中,从数据绑定,到数据展

    2024年01月17日
    浏览(35)
  • Java通过Excel批量上传数据!!!

    请求配置:uploadApi.ts 准备工作:1、一个与你上传数据相对于的实体类;                   2、定义一个上传信息对象;  实体类: 为了方便演示我就定义两个字段,以供参考:   上传信息对象: Controller层代码: dao层代码: Mapper.xml: 注意:poi的版本号 前端代码:

    2024年04月11日
    浏览(31)
  • 【EXCEL】通过url获取网页表格数据

    目录 0.环境 1.背景 2.具体操作 windows + excel2021 之前我用python的flask框架的爬虫爬取过豆瓣网的电影信息,没想到excel可以直接通过url去获取网页表格内的信息,比如下图这是电影信息界面 即将上映电影 (douban.com) 通过excel操作,将电影信息爬取到表格内,如下图 1)点击菜单栏

    2024年02月16日
    浏览(38)
  • 通过anvt X6和vue3实现图编辑

    通过anvt X6 X6地址:https://x6.antv.antgroup.com/tutorial/about; 由于节点比较复杂,使用vue实现的节点; x6提供了一个独立的包 @antv/x6-vue-shape 来使用 Vue 组件渲染节点。 VUE3的案例: 节点组件内容如下: 效果如下:代码运行的效果可以进行拖动进程图 后记:画布进行缩放之后不是

    2024年02月13日
    浏览(30)
  • 使用vue-easytable实现仿excel表格,支持可编辑、添加删除行、虚拟表格等功能

    使用npm安装vue-easytable 在 main.js 中写入以下内容: 代码实现 效果  表格配置 参数 说明 类型 可选值 默认值 tableData 表格数据 Array - - footerData 表格footer 汇总数据,数据结构和 tableData 一致 Array - - columns 列配置,具体项见下表 columns 配置 Array - - showHeader 是否展示表头 Boolean -

    2024年02月08日
    浏览(55)
  • vue通过Export2Excel.js进行导入excel,获取数据

      import Blob from \\\'./Excel/Blob\\\'   import Export2Excel from \\\'./Excel/Export2Excel.js\\\'  

    2023年04月14日
    浏览(36)
  • 07_scrapy的应用——获取电影数据(通过excel保存静态页面scrapy爬虫数据的模板/通过数据库保存)

    一般我们自己创建的一些python项目,我们都需要创建虚拟环境,其中会下载很多包,也叫做依赖。但是我们在给他人分享我们的项目时,不能把虚拟环境打包发送给别人,因为每个人电脑系统不同,我们可以把依赖导出为依赖清单,然后别人有了我们的依赖清单,就可以用一

    2024年02月09日
    浏览(38)
  • Java导出Excel模板,导出数据到指定模板,通过模板导入数据(一)

    本文章主要是介绍阿里巴巴的easyexcel的使用 1. 首先需要我们导入easyexcel的依赖包 2. 前期工作准备 编写相关导出模板和导入模板。在项目的resources下创建文件夹,命名为excel 导出模板(此处仅做示例,字段根据自己项目来):  导入模板(导入时需要哪些字段根据自己项目业

    2024年02月03日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包