Skip to content

添加高级单元格操作

在上一章节中,我们了解了如何通过标注 SupportModifyByRuntimePropertyAttribute 生成一个设置单元格指定属性的单元格操作。

本章节将介绍,如何添加多个参数,多个返回值的复杂的单元格操作。

基础支持

在MyPluginCellType.cs文件中做如下修改, 声明一个public 的函数,标注RunTimeMethodAttribute,函数的名称会作为单元格操作的名称。

csharp
    public class MyPluginCellType : CellType
    {
        [RunTimeMethod]
        public void MyOperation()
        {
        }
    }

设计器效果
1669552260057-5d3b1315-0d6e-4c52-b40c-0aa6b67a4140.png

修改 文件中的JavaScript代码,注意,这里添加了 “MyOperation”方法,这个方法名需要与C#中声明的方法名相同。当操作单元格命令执行时,会执行MyOperation方法中的代码

javascript
class MyPluginCellType extends Forguncy.Plugin.CellTypeBase {
    content = null;
    createContent() {
        this.content = $("<button style='width:100%;height:100%;'></button>");
        return this.content;
    }
    MyOperation() {
        alert("MyOperation 函数被调用");
    }
}
Forguncy.Plugin.CellTypeHelper.registerCellType("MyPlugin.MyPluginCellType, MyPlugin", MyPluginCellType);

支持参数

在MyPluginCellType.cs文件中做如下修改, 声明一个public 的函数,标注RunTimeMethodAttribute,函数的名称会作为单元格操作的名称,函数的参数会作为单元格操作命令的参数。参数类型可以通过单元格属性相同的标注方法标注。注意,如果要修改参数的显示名,需要使用 ItemDisplayNameAttribute 而不是 DisplayNameAttribute

csharp
    public class MyPluginCellType : CellType
    {
        [RunTimeMethod]
        public void MyOperation(
            [ItemDisplayName("参数1")]
            string param1,
            [ItemDisplayName("参数2")]
            [ComboProperty(ValueList = "选项1|选项2")]
            string param2)
        {
        }
    }

设计器效果
1669553219881-6d679a56-c96c-4c3e-abc1-22ecba3e1578.png

修改 文件中的JavaScript代码,注意,这里添加了 “MyOperation”方法,这个方法名需要与C#中声明的方法名相同。并且声明了方法的参数,也与C#方法的参数相同。当操作单元格命令执行时,会执行MyOperation方法中的代码,并且传入参数值

javascript
class MyPluginCellType extends Forguncy.Plugin.CellTypeBase {
    content = null;
    createContent() {
        this.content = $("<button style='width:100%;height:100%;'></button>");
        return this.content;
    }
    MyOperation(param1, param2) {
        alert(`MyOperation 函数被调用, 参数1:${param1}, 参数2:${param2}`);
    }
}
Forguncy.Plugin.CellTypeHelper.registerCellType("MyPlugin.MyPluginCellType, MyPlugin", MyPluginCellType);

支持返回值

在MyPluginCellType.cs文件中做如下修改,函数的返回值会作为命令的返回值。

csharp
    public class MyPluginCellType : CellType
    {
        public string MyProperty { get; set; } = "MyPlugin";

        [RunTimeMethod]
        public GetDisplayTextResult GetDisplayText()
        {
            return null;
        }
    }
    public class GetDisplayTextResult
    {
        public string DisplayText { get; set; }
    }

设计器效果
1672382044150-18811504-f45e-4f7d-9f80-504f3be1ae5f.png

后续命令可以通过公式使用返回值
1672382393812-5d9747da-7a73-4bf2-8b9c-e394369db0ed.png

修改 文件中的JavaScript代码,注意,这里添加了 “GetDisplayText”方法,这个方法名需要与C#中声明的方法名相同。返回值,也与C#方法的返回值中的属性同名。当操作单元格命令执行时,会执行MyOperation方法中的代码,结果会被存入变量中供后续命令使用

javascript
class MyPluginCellType extends Forguncy.Plugin.CellTypeBase {
    createContent() {
        this.content = $("<button style='width:100%;height:100%;'></button>");
        return this.content;
    }
    GetDisplayText() {
        return {
            DisplayText: "我的返回值"
        }
    }
}
Forguncy.Plugin.CellTypeHelper.registerCellType("MyPlugin.MyPluginCellType, MyPlugin", MyPluginCellType);

WARNING

注意

  1. C#函数的返回值必须是对象,对象中的属性表示返回值属性
  2. 返回值属性可以有多个
  3. 返回值属性可以标注 DisplayNameAttribute 来显示中文
  4. JavaScript函数执行需要返回一个对象,对象的属性要与C#反正值类上的属性同名
  5. 可以同时支持参数和返回值

更新: 2022-12-30 14:40:04
原文: https://www.yuque.com/robert-bh51n/ea8l6c/byfq9tmskzhef0tx