​一、Handsontable是指什么?

官网: http://handsontable.com

Handsontable是一个JavaScript库,可以帮助您轻松实现类似Excel电子表格一样的编辑方式。

示范页面尝试一下就知道了,不仅可以像Excel那样输入数据,还有可指定单元格的格式、制作图表等丰富的功能。

二、概要

kintone作为云服务低代码平台,虽然可以通过浏览器直接查看记录列表以及编辑记录等操作,但还是有不少客户反映希望可以像Excel那样查看、编辑数据。

这次就向大家介绍一下如何使用Cybozu CDN中公布的Handsontable来实现类似Excel的编辑方式。感兴趣的务必请尝试一下哦。

三、准备应用

首先准备好应用。

1、字段设置

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

2、列表的设置

列表使用自定义列表。

通过HTML来编写显示电子表格所需要的元素。

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

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

3、JavaScript/CSS的设置

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

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

备注:在本篇文章中使用的 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那样显示了。

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); });

            }

        });

    });

})();

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

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

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

五、最后

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

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

通过Handsontable实现像Excel一样编辑数据的更多相关文章

  1. Handsontable vue如何实现在线编辑excal

    官网地址:https://handsontable.com/ 1.实现效果 2.安装 import { HotTable } from '@handsontable/vue' import Hands ...

  2. Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  3. excel中的数据导入oracle方法

    SQL_loader批量上传数据 1.    注释 在工作中,很多时候会遇到如下情况:需要将excel中的数据批量上传到ORACLE表中.如果是小数据量,如几十条至几百条,那么用plsql dev工具 ...

  4. 利用Kettle 从Excel中抽取数据写入SQLite

    SQLite作为一种数据库可以配置为Kettle的数据输入和输出,这个例子是从Excel中抽取数据然后写入到SQLite中 配置测试并成功后如下 下面是配置步骤: Excel输入配置 sqlite配置 ...

  5. Java实现PDF和Excel生成和数据动态插入以及导出

    一.序言 Excel.PDF的导出.导入是我们工作中经常遇到的一个问题,刚好今天公司业务遇到了这个问题,顺便记个笔记以防下次遇到相同的问题而束手无策. 公司有这么两个需求: 需求一.给了一个表单,让把 ...

  6. NOPI读取模板导出(Excel中追加数据)

    在Controller里,我们定义一个FileResult的Action,返回值是一个文件形式被浏览器下载下来. [HttpGet] public FileResult ExportProductLi ...

  7. thinkphp导入导出excel表单数据

    在PHP项目经常要导入导出Excel表单. 先去下载PHPExcel类库文件,放到相应位置. 我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/ 导入 在页面上传e ...

  8. 使用Python将Excel中的数据导入到MySQL

    使用Python将Excel中的数据导入到MySQL 工具 Python 2.7 xlrd MySQLdb 安装 Python 对于不同的系统安装方式不同,Windows平台有exe安装包,Ubunt ...

  9. c#.net Excel中的数据导入到SQL数据库中

    /// <summary>        /// 从Excel 导入学生        /// </summary>        /// <param name=&qu ...

  10. Java利用POI导入导出Excel中的数据

         首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地 ...

随机推荐

  1. Visual Studio 2019 专业版许可证过期解决办法

    Visual Studio 2019 许可证过期,登录微软账户也不行,一直提示点击更新许可证,"无法下载许可证,请检查你的网络连接或代理设置" 解决方案:找到VS2019安装目录, ...

  2. 搭建rust开发环境

    1.打开https://www.rust-lang.org/tools/install 下载64位安装器 选择第一项默认安装 安装器会下载安装rust 相关工具链,并添加path C:\Users\z ...

  3. 手写深度比较isEqual函数

    function isObject(obj){ return typeof obj ==='object'&&obj!==null } functon isEqual(obj1,obj ...

  4. RPA的市场需求

    最基本的RPA软件机器人定义:机器人通过记录员工在电脑桌面上的操作行为,将业务处理规则和操作行为记录下来,并模拟人的方式在电脑上自动执行一系列特定的工作流程.采用RPA软件机器人解决方案,快速实施,快 ...

  5. 局部异常因子(Local Outlier Factor, LOF)算法详解及实验

    局部异常因子(Local Outlier Factor, LOF)通过计算样本点的局部相对密度来衡量这个样本点的异常情况,可以算是一类无监督学习算法.下面首先对算法的进行介绍,然后进行实验. LOF算 ...

  6. ASP.NET Core Web API Swagger 按标签Tags分组排序显示

    需求 swagger页面按标签Tags分组显示. 没有打标签Tags的接口,默认归到"未分组". 分组内按接口路径排序 说明 为什么没有使用GroupName对接口进行分组? 暂时 ...

  7. 如何基于 React Native 快速实现一个视频通话应用

    今天,我们将会一起开发一个包含 RTE (实时互动)场景的 Flutter 应用. 项目介绍 靠自研开发包含实时互动功能的应用非常繁琐,你要解决维护服务器.负载均衡等难题,同时还要保证稳定的低延迟. ...

  8. Django笔记二之连接数据库、执行migrate数据结构更改操作

    本篇笔记目录索引如下: Django 连接mysql,执行数据库表结构迁移步骤介绍 操作数据库,对数据进行简单操作 接下来几篇笔记都会介绍和数据库相关,包括数据库的连接.操作(包括增删改查).对应的字 ...

  9. 百度生成式AI产品文心一言邀你体验AI创作新奇迹:百度CEO李彦宏详细透露三大产业将会带来机遇(文末附文心一言个人用户体验测试邀请码获取方法,亲测有效)

    目录 中国版ChatGPT上线发布 强大中文理解能力 智能文学创作.商业文案创作 图片.视频智能生成 中国生成式AI三大产业机会 新型云计算公司 行业模型精调公司 应用服务提供商 总结 获取文心一言邀 ...

  10. 使用golang+antlr4构建一个自己的语言解析器(完结篇)

    Goland 中Antlr4插件 在goland中安装Antlr4插件,用于识别输入的字符在在语法文件中生成的语法树的样子,大概就是如下的摸样 下载步骤: 1.点击文件中的设置选项 2.在插件目录下输 ...