当前位置: 首页 > web >正文

websheet之 自定义函数

在线代码
{.is-success}

一、自定义函数约定

必须遵守本控件的自定函数约定才可以正常使用。
{.is-warning}

         约定如下:

  • 自定义类名称与函数名称一致。(强制)
  • 该类方法名称与函数名称一致,该方法是函数的入口。(强制)
  • name的值与表格内使用的名称一致。(强制)
  • 函数建议构建成静态函数。

二、自定义UDF函数

         在本章节我们构建了一个UDF(User Define Function)的EXCEL函数,该函数只是简单返回定值“函数UDF返回值”,代码如下:

 
// 定义 UDF 类
export default class UDF {// 定义静态私有变量 #instancestatic #instance: UDF | null = null;// 定义类的属性public name!: string;// 返回值类型public returnValueType: string = 'S'; // 文本// public returnValueType: string = 'N'; // 数值// 构造函数constructor() {if (!UDF.#instance) {UDF.#instance = this;this.name = 'udf';//与表格内使用的公式名称一致this.returnValueType = 'S'; // 文本}}// 静态方法,用于获取单例实例public static getInstance(): UDF {if (!this.#instance) {this.#instance = new UDF();}return this.#instance;}// 定义 UDF 方法 传入参数和返回值见第五小节public UDF(pram: any, sheetname: string, workbook: any, formula: any): string {console.log(pram.toString());return '函数UDF返回值';}
}

         HTML中的写法:

   // 定义 UDF 类class UDF {// 定义静态私有变量 instancestatic instance = null;// 定义类的属性name;returnValueType;// 构造函数constructor() {if (!UDF.instance) {UDF.instance = this;this.name = 'udf'; // 与表格内使用的公式名称一致this.returnValueType = 'S'; // 文本}return UDF.instance;}// 静态方法,用于获取单例实例static getInstance() {if (!this.instance) {this.instance = new UDF();}return this.instance;}// 定义 UDF 方法 传入参数和返回值见第五小节UDF(pram, sheetname, workbook, formula) {console.log(pram.toString());return '函数UDF返回值';}}

三、注册自定义函数

3.1 引入文件

         通过import等方式引入编辑好的公式类文件。

  import UDF from './udf'

3.2 注册

         引入好自定义的类文件后,就可以通过workbook.AddUserDefineFunction(…)方法组成函数,代码如下:

   let workbook = wsheet.Workbook(); workbook.AddUserDefineFunction(UDF); 

四、表格内使用

         本例中设置了‘A1’单元格式公式为:

   /*** 第一步 获取workbook*/let workbook = wsheet.Workbook();/*** 第二步 注册自定义函数*/workbook.AddUserDefineFunction(UDF);let activeSheet = wsheet.ActiveSheet();/***  使用udf*/activeSheet.SetCellValue('A1', '=udf()');/*** 第三步   重新绘制表格*/activeSheet.setColWidth(1, 160);activeSheet.WorkFormula(); //重建公式activeSheet.cacl();//公式计算wsheet.BuildSheet();wsheet.Draw();

         结果如下下图:

在这里插入图片描述

五、传入参数和返回值

5.1 传入参数

         被调用的函数,入参分别是:

参数名称含义
valueParms定义函数括号内的内容,例如上面自定义udf()无参数。该参数可以是数量,金额,字符串,单元格地址等,结合使用场景使用。该值用数组形式传递
sheetName公式的sheet名称
workbookworkbook对象,方便函数使用

         例如传递金额10给函数,在5.3小节获取该值。

  /***  使用udf*/activeSheet.SetCellValue('A1', '=udf(10)'); 

5.2 返回值

         返回值可以区分单值和数组两种情况,见表格:

返回值类型含义
单值可以是数量,金额,字符串等,例如:UDF返回定值字符串
数组使用两维数组返回的Array,第一维度是行,第二维度是列,包含的内容为Cell对象

5.3 返回数组的例子

         本小节我们改写了上面的UDF函数,是其返回一个五行五列的数组,代码如下:

  public UDF(pram: any, sheetname: string, workbook: any, range: any): [] {//console.log(pram.toString());//获取参数 console.log(pram[0]); //这里将打印10的值let rowVale = [];for (let i = 0; i < 5; i++) {let colValues = [];for (let c = 0; c < 5; c++) {let cell = new WebSheet.Model.Cell();cell.value = 'row=' + (i + 1) + ' col=' + (c + 1);colValues.push(cell);}rowVale.push(colValues);}return rowVale;}

         结果如图片:

在这里插入图片描述

http://www.xdnf.cn/news/1930.html

相关文章:

  • 成都种业博览会预登记火热进行中,6月8日-9日成都世纪城新国际会展中心与您不见不散!
  • [密码学实战]商用密码产品密钥体系架构:从服务器密码机到动态口令系统
  • vue前端SSE工具库|EventSource 替代方案推荐|PUSDN平行宇宙软件开发者网
  • 如何申请游戏支付平台通道接口?
  • PyTorch生成式人工智能实战(3)——分类任务详解
  • 施磊老师基于muduo网络库的集群聊天服务器(七)
  • 容器的网络类型
  • 视频噪点多,如何去除画面噪点?
  • 【基于Qt的QQMusic项目演示第一章】从界面交互到核心功能实现
  • 常见移动机器人底盘模型对比(附图)
  • Codeforces Round 1020 (Div. 3) A-D
  • 用diffusers库从单文件safetensor加载sdxl模型(离线)
  • 系统分析师-第九、十章
  • 蓝桥杯 3. 密码脱落
  • gradio 订单处理agent
  • 通过VSCode远程连接到CentOS7/Ubuntu18等老系统
  • 燃气经营从业人员有哪些类别
  • Doris vs ClickHouse:深入对比MPP数据库聚合操作的核心区别
  • Excel表格批量翻译对照翻译(使用AI助手)
  • ESG跨境电商如何为国内的跨境电商企业打开国外的市场
  • JDK 24:Java 24 中的新功能
  • SOC估算:开路电压修正的安时积分法
  • Doris表设计与分区策略:让海量数据管理更高效
  • 软测面经(私)
  • 分布式队列对消息语义的处理
  • MySQL元数据库完全指南:探秘数据背后的数据
  • 金仓数据库KingbaseES技术实践类深度剖析与实战指南
  • 单片机-89C51部分:2、环境搭建
  • 信奥赛之c++基础(初识循环嵌套与ASCII密码本)
  • browser-use:AI驱动的浏览器自动化工具使用指南