百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

纯前端表格控件 SpreadJS 中如何自定义数字格式

toyiye 2024-06-21 12:07 9 浏览 0 评论

前言 | 问题背景

在不同的应用场景中,数字格式千变万化,即便强大如Excel,也无法满足所有的数字格式的需求。有用户提出了这样的需求:小数超过两位时,只保留两位且不做进位(例如123.456显示123.45);小数不足两位时,无后缀0(例如123.4就显示123.4);没有小数时只显示整数(例如123就显示123);整数部分需要能够每三位添加一个分位符(例如1234显示1,234)。

那么如何解决此问题做到自定义数字格式呢,本文基于SpreadJS V12版本,如需学习请先更新您的控件版本;

问题分析与解决思路

针对这样的“非典型需求”,我们即无法直接用Excel实现,Spread JS也没有原生的数字格式的支持。原本用户想用条件格式来实现,但实际上Spread JS提供了更加简洁的思路——自定义格式接口,这样用户可以最大限度地实现自己想要的格式。

解决自定义格式的问题,可以分为以下几个步骤:

  1. 重写GC.Spread.Formatter.GeneralFormatter类的format方法,这个方法接收的第一个参数就是单元格的值,我们可以在format方法中随意拼接修改值的格式和内容,不会影响单元格的真实值,只会改变最终的展示格式(单元格的Text)。
  2. 为单元格设置自定义样式。
  3. 定义一个处理数字的方法,返回符合上述用户需求的数字字符串。示例中提供的方法比需求的更强大和灵活,不仅可以实现定制是否四舍五入,还可以自定义分位符与小数点。

示例代码分析

示例中主要做了两件事,一是通过继承GeneralFormatter类来实现自定义数字格式,二是在format方法中实现了自定义数字格式的业务逻辑。下面的代码部分就是第一步,如何通过继承GeneralFormatter来实现自定义数字格式。

var customFormatterTest = {};
customFormatterTest.prototype = GC.Spread.Formatter.GeneralFormatter;
// format方法中,第一个参数obj就是当前单元格的值(带类型)
customFormatterTest.format = function (obj, conditionalForeColor) {
 return number_format(obj, 2, ".", ",");
};

上述代码通过继承GeneralFormatter类,并重写format方法实现了自定义数字格式,在format方法中,第一个参数obj就是当前单元格的值,拿到单元格的值后,可以根据业务需求进行自定义显示格式,方法返回值是一个字符串。

第二部,实现自定义数字格式,注意最后返回值是字符串就行了。

function number_format(number, decimals, dec_point, thousands_sep, isRoundUp) {
 /*
 * 参数说明:
 * number:要格式化的数字
 * decimals:保留几位小数
 * dec_point:小数点符号
 * thousands_sep:千分位符号
 * isRoundUp:是否四舍五入
 * */
 number = (number + '').replace(/[^0-9+-Ee.]/g, '');
 var n = !isFinite(+number) ? 0 : +number,
 prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
 sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
 dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
 s = '',
 toFixedFix = function (n, prec) {
 var k = Math.pow(10, prec);
 // 是否四舍五入
 if(isRoundUp){
 return '' + Math.round(n * k) / k;
 }
 // floor 实现了只舍去不进位的逻辑
 return '' + Math.floor(n * k) / k;
 };
 s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
 var re = /(-?\d+)(\d{3})/;
 while (re.test(s[0])) {
 s[0] = s[0].replace(re, "$1" + sep + "$2");
 }
 if ((s[1] || '').length < prec) {
 s[1] = s[1] || '';
 }
 // 当小数部分为空时,不显示小数点
 if(s[1] === ""){
 return s.join("");
 }
 return s.join(dec);
}

关于葡萄城

赋能开发者!葡萄城公司成立于 1980 年,是全球领先的集开发工具、商业智能解决方案、管理系统设计工具于一身的软件和服务提供商。西安葡萄城是其在中国的分支机构,面向全球市场提供软件研发服务,并为中国企业的信息化提供国际先进的开发工具、软件和研发咨询服务。葡萄城的控件和软件产品在国内外屡获殊荣,在全球被数十万家企业、学校和政府机构广泛应用。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码