.net dataexcel 脚本公式 函数源码

示例如:

ScriptExec(""sum(1, 2, 3, 4)"") 结果等于10

cs 复制代码
using Feng.Excel.Builder;
using Feng.Excel.Collections;
using Feng.Excel.Interfaces;
using Feng.Script.CBEexpress;
using Feng.Script.Method;
using System;
using System.Collections.Generic;
using System.Drawing;

namespace Feng.Excel.Script
{
    [Serializable]
    public class ScriptFunctionContainer : DataExcelMethodContainer
    {

        public const string Function_Name = "DataExcelScript";
        public const string Function_Description = "脚本函数";
        public override string Name
        {
            get { return Function_Name; }

        }
        public override string Description
        {
            get { return Function_Description; }
        }

        public ScriptFunctionContainer()
        {
            BaseMethod model = null;

            model = new BaseMethod();
            model.Name = "ScriptExec";
            model.Description = "执行脚本";
            model.Eg = @"=ScriptExec(""sum(1, 2, 3, 4)"") 结果等于10";
            model.Function = ScriptExec;
            MethodList.Add(model);

            model = new BaseMethod();
            model.Name = "ScriptIF";
            model.Description = "第一参数为True返回第二个参数,否则返加第三个参数";
            model.Eg = @"ScriptIF(1>2,10,30)结果等于30";
            model.Function = ScriptIF;
            MethodList.Add(model);

            model = new BaseMethod();
            model.Name = "ScriptIsNull";
            model.Description = "第一参数为null返回第二个参数,否则返加第一个参数";
            model.Eg = @"ScriptIsNull(null,1)";
            model.Function = ScriptIsNull;
            MethodList.Add(model);


            model = new BaseMethod();
            model.Name = "ScriptArg";
            model.Description = @"获取或设置参数 ScriptArg(""argname"")";
            model.Eg = @"ScriptArg(""argname"")";
            model.Function = ScriptArg;
            MethodList.Add(model);

            model = new BaseMethod();
            model.Name = "ScriptExecG";
            model.Description = @"在传第一个参数表格上执行脚本 ScriptExecG(grid)";
            model.Eg = @"ScriptExecG(grid)";
            model.Function = ScriptExecG;
            MethodList.Add(model);


            model = new BaseMethod();
            model.Name = "ScriptSaveContext";
            model.Description = @"保存当前执行上下文 ScriptSaveContext()";
            model.Eg = @"var context=ScriptSaveContext()";
            model.Function = ScriptSaveContext;
            MethodList.Add(model);


            model = new BaseMethod();
            model.Name = "ScriptReStoreContext";
            model.Description = @"还原当前上下文 ScriptReStoreContext(context)";
            model.Eg = @"ScriptReStoreContext(context)";
            model.Function = ScriptReStoreContext;
            MethodList.Add(model);


            model = new BaseMethod();
            model.Name = "ScriptSwitchContext";
            model.Description = @"切换当前上下文 ScriptSwitchContext(grid,cell)";
            model.Eg = @"ScriptSwitchContext(grid,cell)";
            model.Function = ScriptSwitchContext;
            MethodList.Add(model);


            model = new BaseMethod();
            model.Name = "ScriptCellValueChanged";
            model.Description = @"获取或设置单元格值变化时脚本 ScriptCellValueChanged(cell,script)";
            model.Eg = @"ScriptCellValueChanged(cell,script)";
            model.Function = ScriptCellValueChanged;
            MethodList.Add(model);

            model = new BaseMethod();
            model.Name = "ScriptCellClick";
            model.Description = @"获取或设置单元格单击时脚本 ScriptCellClick(cell,script)";
            model.Eg = @"ScriptCellClick(cell,script)";
            model.Function = ScriptCellClick;
            MethodList.Add(model);


            model = new BaseMethod();
            model.Name = "ScriptCellDoubleClick";
            model.Description = @"获取或设置单元格双击时脚本 ScriptCellDoubleClick(cell,script)";
            model.Eg = @"ScriptCellDoubleClick(cell,script)";
            model.Function = ScriptCellDoubleClick;
            MethodList.Add(model);

            model = new BaseMethod();
            model.Name = "ScriptCellKeyDown";
            model.Description = @"获取或设置单元格键盘按下时脚本 ScriptCellKeyDown(cell,script)";
            model.Eg = @"ScriptCellKeyDown(cell,script)";
            model.Function = ScriptCellKeyDown;
            MethodList.Add(model);


            model = new BaseMethod();
            model.Name = "ScriptCellKeyUp";
            model.Description = @"获取或设置单元格键盘抬起时脚本 ScriptCellKeyUp(cell,script)";
            model.Eg = @"ScriptCellKeyUp(cell,script)";
            model.Function = ScriptCellKeyUp;
            MethodList.Add(model);
 
            model = new BaseMethod();
            model.Name = "ScriptGridEndEdit";
            model.Description = @"获取或设置表格结束编辑时脚本 ScriptGridEndEdit(grid,script)";
            model.Eg = @"ScriptGridEndEdit(grid,script)";
            model.Function = ScriptGridEndEdit;
            MethodList.Add(model);

            model = new BaseMethod();
            model.Name = "ScriptGridLoadCompleted";
            model.Description = @"获取或设置表格加载结束时脚本 ScriptGridLoadCompleted(grid,script)";
            model.Eg = @"ScriptGridLoadCompleted(grid,script)";
            model.Function = ScriptGridLoadCompleted;
            MethodList.Add(model);


            model = new BaseMethod();
            model.Name = "ScriptGridClick";
            model.Description = @"获取或设置表格单击脚本 ScriptGridClick(grid,script)";
            model.Eg = @"ScriptGridClick(grid,script)";
            model.Function = ScriptGridClick;
            MethodList.Add(model);


            model = new BaseMethod();
            model.Name = "ScriptGridDoubleClick";
            model.Description = @"获取或设置表格双击脚本 ScriptGridDoubleClick(grid,script)";
            model.Eg = @"ScriptGridDoubleClick(grid,script)";
            model.Function = ScriptGridDoubleClick;
            MethodList.Add(model);


            model = new BaseMethod();
            model.Name = "ScriptGridValueChanged";
            model.Description = @"获取或设置表格值改变时脚本 ScriptGridValueChanged(grid,script)";
            model.Eg = @"ScriptGridValueChanged(grid,script)";
            model.Function = ScriptGridValueChanged;
            MethodList.Add(model);


            model = new BaseMethod();
            model.Name = "ScriptGridKeyDown";
            model.Description = @"获取或设置表格键按下时脚本 ScriptGridKeyDown(grid,script)";
            model.Eg = @"ScriptGridKeyDown(grid,script)";
            model.Function = ScriptGridKeyDown;
            MethodList.Add(model);

            model = new BaseMethod();
            model.Name = "ScriptGridKeyUp";
            model.Description = @"获取或设置表格键抬起时脚本 ScriptGridKeyUp(grid,script)";
            model.Eg = @"ScriptGridKeyUp(grid,script)";
            model.Function = ScriptGridKeyUp;
            MethodList.Add(model);
        }
        public virtual object ScriptGridKeyUp(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                DataExcel cell = base.GetArgIndex(1, args) as DataExcel;
                if (cell == null)
                {
                    return Feng.Utils.Constants.Fail;
                }
                if (args.Length == 2)
                {
                    return cell.PropertyKeyUp;
                }
                string script = base.GetTextValue(2, args);
                cell.PropertyKeyUp = script;
                return Feng.Utils.Constants.OK;
            }
            return null;
        }

        public virtual object ScriptGridKeyDown(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                DataExcel cell = base.GetArgIndex(1, args) as DataExcel;
                if (cell == null)
                {
                    return Feng.Utils.Constants.Fail;
                }
                if (args.Length == 2)
                {
                    return cell.PropertyKeyDown;
                }
                string script = base.GetTextValue(2, args);
                cell.PropertyKeyDown = script;
                return Feng.Utils.Constants.OK;
            }
            return null;
        }

        public virtual object ScriptGridValueChanged(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                DataExcel cell = base.GetArgIndex(1, args) as DataExcel;
                if (cell == null)
                {
                    return Feng.Utils.Constants.Fail;
                }
                if (args.Length == 2)
                {
                    return cell.PropertyValueChanged;
                }
                string script = base.GetTextValue(2, args);
                cell.PropertyValueChanged = script;
                return Feng.Utils.Constants.OK;
            }
            return null;
        }

        public virtual object ScriptGridDoubleClick(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                DataExcel cell = base.GetArgIndex(1, args) as DataExcel;
                if (cell == null)
                {
                    return Feng.Utils.Constants.Fail;
                }
                if (args.Length == 2)
                {
                    return cell.PropertyDoubleClick;
                }
                string script = base.GetTextValue(2, args);
                cell.PropertyDoubleClick = script;
                return Feng.Utils.Constants.OK;
            }
            return null;
        }

        public virtual object ScriptGridClick(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                DataExcel cell = base.GetArgIndex(1, args) as DataExcel;
                if (cell == null)
                {
                    return Feng.Utils.Constants.Fail;
                }
                if (args.Length == 2)
                {
                    return cell.PropertyClick;
                }
                string script = base.GetTextValue(2, args);
                cell.PropertyClick = script;
                return Feng.Utils.Constants.OK;
            }
            return null;
        }

        public virtual object ScriptGridLoadCompleted(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                DataExcel cell = base.GetArgIndex(1, args) as DataExcel;
                if (cell == null)
                {
                    return Feng.Utils.Constants.Fail;
                }
                if (args.Length == 2)
                {
                    return cell.PropertyDataLoadCompleted;
                }
                string script = base.GetTextValue(2, args);
                cell.PropertyDataLoadCompleted = script;
                return Feng.Utils.Constants.OK;
            }
            return null;
        }

        public virtual object ScriptFormClosing(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                DataExcel cell = base.GetArgIndex(1, args) as DataExcel;
                if (cell == null)
                {
                    return Feng.Utils.Constants.Fail;
                }
                if (args.Length == 2)
                {
                    return cell.PropertyFormClosing;
                }
                string script = base.GetTextValue(2, args);
                cell.PropertyFormClosing = script;
                return Feng.Utils.Constants.OK;
            }
            return null;
        }

        public virtual object ScriptGridEndEdit(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                DataExcel cell = base.GetArgIndex(1, args) as DataExcel;
                if (cell == null)
                {
                    return Feng.Utils.Constants.Fail;
                }
                if (args.Length == 2)
                {
                    return cell.PropertyEndEdit;
                }
                string script = base.GetTextValue(2, args);
                cell.PropertyEndEdit = script;
                return Feng.Utils.Constants.OK;
            }
            return null;
        }

        public virtual object ScriptCellKeyUp(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                ICell cell = base.GetCell(1, args);
                if (cell == null)
                {
                    return Feng.Utils.Constants.Fail;
                }
                if (args.Length == 2)
                {
                    return cell.PropertyOnKeyUp;
                }
                string script = base.GetTextValue(2, args);
                cell.PropertyOnKeyUp = script;
                return Feng.Utils.Constants.OK;
            }
            return null;
        }

        public virtual object ScriptCellKeyDown(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                ICell cell = base.GetCell(1, args);
                if (cell == null)
                {
                    return Feng.Utils.Constants.Fail;
                }
                if (args.Length == 2)
                {
                    return cell.PropertyOnKeyDown;
                }
                string script = base.GetTextValue(2, args);
                cell.PropertyOnKeyDown = script;
                return Feng.Utils.Constants.OK;
            }
            return null;
        }

        public virtual object ScriptCellDoubleClick(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                ICell cell = base.GetCell(1, args);
                if (cell == null)
                {
                    return Feng.Utils.Constants.Fail;
                }
                if (args.Length == 2)
                {
                    return cell.PropertyOnDoubleClick;
                }
                string script = base.GetTextValue(2, args);
                cell.PropertyOnDoubleClick = script;
                return Feng.Utils.Constants.OK;
            }
            return null;
        }

        public virtual object ScriptCellClick(params object[] args)
        {  
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                ICell cell = base.GetCell(1, args);
                if (cell == null)
                {
                    return Feng.Utils.Constants.Fail;
                }
                if (args.Length == 2)
                {
                    return cell.PropertyOnClick;
                }
                string script = base.GetTextValue(2, args);
                cell.PropertyOnClick = script;
                return Feng.Utils.Constants.OK;
            }
            return null;
        }

        public virtual object ScriptCellValueChanged(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                ICell cell = base.GetCell(1, args);
                if (cell == null)
                {
                    return Feng.Utils.Constants.Fail;
                }
                if (args.Length == 2)
                {
                    return cell.PropertyOnCellValueChanged;
                }
                string script = base.GetTextValue(2, args);
                cell.PropertyOnCellValueChanged = script;
                return Feng.Utils.Constants.OK;
            }
            return null;
        }

        public virtual object ScriptArg(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                string key = base.GetTextValue(1, args);
                if (args.Length == 3)
                {
                    object value = base.GetArgIndex(2, args);
                    proxy.SetKeyValue(key, value);
                    return Feng.Utils.Constants.OK;
                }
                return proxy.GetKeyValue(key);
            }
            return null;
        }

        public virtual object ScriptIsNull(params object[] args)
        {
            if (args.Length > 1)
            {
                object value1 = args[1];
                object value2 = args[2];
                if (value1 == null)
                {
                    return value2;
                }
                else
                {
                    return value1;
                }
            }
            return null;
        }

        public virtual object ScriptIF(params object[] args)
        {
            if (args.Length > 2)
            {
                object value1 = args[1];
                object value2 = args[2];
                object value3 = args[3];
                bool res = Feng.Utils.ConvertHelper.ToBoolean(value1);
                if (res)
                {
                    return value2;
                }
                else
                {
                    return value3;
                }
            }
            return null;
        }

        public virtual object ScriptExec(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                string txt = base.GetTextValue(1, args);
                int len = args.Length - 2;
                if (len > 0)
                {
                    object[] values = new object[len];
                    for (int i = 0; i < len; i++)
                    {
                        values[i] = args[i + 2];
                    }
                    return ScriptBuilder.Exec(proxy.Grid, proxy.CurrentCell, txt, values);
                }
                return ScriptBuilder.Exec(proxy.Grid, proxy.CurrentCell, txt);
            }
            return null;
        }

        public virtual object ScriptExecG(params object[] args)
        {
            DataExcel grid = base.GetArgIndex(1, args) as DataExcel;
            string txt = base.GetTextValue(2, args);
            int len = args.Length - 3;
            if (len > 0)
            {
                object[] values = new object[len];
                for (int i = 0; i < len; i++)
                {
                    values[i] = args[i + 3];
                }
                return ScriptBuilder.Exec(grid, null, txt, values);
            }
            return ScriptBuilder.Exec(grid, null, txt);

        }

        public virtual object ScriptSaveContext(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                Feng.Collections.HashtableEx scriptContext = new Feng.Collections.HashtableEx();
                scriptContext.Add("Grid", proxy.Grid);
                scriptContext.Add("Cell", proxy.CurrentCell);
                return scriptContext;
            }
            return null;
        }

        public virtual object ScriptReStoreContext(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                Feng.Collections.HashtableEx scriptContext = base.GetArgIndex(1, args) as Feng.Collections.HashtableEx;
                if (scriptContext != null)
                {
                    proxy.Grid = scriptContext["Grid"] as DataExcel;
                    proxy.CurrentCell= scriptContext["Cell"] as ICell;
                    return Feng.Utils.Constants.OK;
                }
            }
            return Feng.Utils.Constants.Fail;
        }

        public virtual object ScriptSwitchContext(params object[] args)
        {
            Feng.Excel.Script.DataExcelScriptStmtProxy proxy = args[0] as Feng.Excel.Script.DataExcelScriptStmtProxy;
            if (proxy != null)
            {
                proxy.Grid = base.GetArgIndex(1, args) as DataExcel;
                proxy.CurrentCell = base.GetArgIndex(2, args) as ICell;
                return Feng.Utils.Constants.OK; 
            }
            return Feng.Utils.Constants.Fail;
        }
    }
}
相关推荐
足球中国4 个月前
.net dataexcel 单元格函数源码
excel服务器·excelserver·dataexcel
足球中国4 个月前
DataExcelServer局域网文件共享服务器增加两个函数
excel服务器·excelserver·dataexcel·文件同步
足球中国1 年前
ExcelServer EXCEL服务器使用- 用户、角色权限配置
excel·excel服务器·excelserver·dataexcel