第16章-脚本与宏功能

第十六章:脚本与宏功能

16.1 ReoScript简介

ReoGrid集成了ReoScript脚本引擎,支持在电子表格中执行脚本。

using unvell.ReoScript;

public class ScriptBasics
{
    private ReoGridControl grid;
    
    public void ExecuteScript(string script)
    {
        var srm = grid.Srm;  // Script Runtime Machine
        srm.Run(script);
    }
    
    public void SimpleScript()
    {
        var script = @"
            // 设置单元格值
            sheet.cells['A1'].data = 'Hello from script';
            sheet.cells['A2'].data = 100;
            
            // 计算
            var sum = sheet.cells['A2'].data + 50;
            sheet.cells['A3'].data = sum;
        ";
        
        ExecuteScript(script);
    }
}

16.2 脚本访问工作表

public class ScriptWorksheetAccess
{
    public void AccessWorksheetFromScript(ReoGridControl grid)
    {
        var script = @"
            // 获取当前工作表
            var sheet = workbook.currentWorksheet;
            
            // 设置数据
            for (var i = 0; i < 10; i++) {
                sheet.cells[i, 0].data = i + 1;
                sheet.cells[i, 1].data = (i + 1) * 10;
            }
            
            // 设置样式
            sheet.setRangeStyle('A1:B1', {
                backColor: '#4472C4',
                textColor: '#FFFFFF',
                bold: true
            });
        ";
        
        grid.Srm.Run(script);
    }
}

16.3 注册C#函数到脚本

public class RegisterFunctionsToScript
{
    public void RegisterFunctions(ReoGridControl grid)
    {
        var srm = grid.Srm;
        
        // 注册C#函数到脚本
        srm["myFunction"] = new NativeFunctionObject("myFunction", (args) =>
        {
            var param = Convert.ToInt32(args[0]);
            return param * 2;
        });
        
        // 在脚本中调用
        var script = @"
            var result = myFunction(10);
            sheet.cells['A1'].data = result;  // 输出20
        ";
        
        srm.Run(script);
    }
}

16.4 宏录制与回放

public class MacroRecording
{
    private List<Action> recordedActions = new List<Action>();
    private bool isRecording = false;
    
    public void StartRecording()
    {
        isRecording = true;
        recordedActions.Clear();
    }
    
    public void StopRecording()
    {
        isRecording = false;
    }
    
    public void RecordAction(Action action)
    {
        if (isRecording)
        {
            recordedActions.Add(action);
        }
    }
    
    public void PlaybackMacro()
    {
        foreach (var action in recordedActions)
        {
            action.Invoke();
        }
    }
}

16.5 本章小结

本章介绍了ReoScript脚本引擎和宏功能。

📚 下一章预告

第十七章将学习性能优化与最佳实践。

posted @ 2025-12-31 14:07  我才是银古  阅读(4)  评论(0)    收藏  举报