public void WrapperObject() { var srm = SRM; var myobj = new ObjectValue(); string externalProperty = string.Empty; myobj["external"] = new ExternalProperty( () => externalProperty, (v) => { externalProperty = System.Convert.ToString(v); } ); myobj["add"] = new NativeFunctionObject("add", (ctx, owner, args) => { return((double)args[0] + (double)args[1]); }); srm["myobj"] = myobj; srm.Run(@" myobj.name = 'hello'; myobj.external = 'world';biru var result = myobj.add(1,2); debug.assert(myobj.name, 'hello'); debug.assert(result, 3); "); }
public RSCellObject(Worksheet sheet, CellPosition pos, Cell cell) { this.sheet = sheet; this.Pos = pos; this.Cell = cell; this["style"] = new ExternalProperty(() => { if (cell == null) { cell = sheet.CreateAndGetCell(pos); } if (this.Style == null) { this.Style = new RSCellStyleObject(sheet, cell); } return(this.Style); }, null); this["data"] = new ExternalProperty( () => cell == null ? null : cell.InnerData, (v) => { if (cell == null) { sheet[pos] = v; } else if (!cell.IsReadOnly) { sheet[cell] = v; } }); #if FORMULA this["formula"] = new ExternalProperty( () => cell == null ? string.Empty : cell.InnerFormula, (v) => { if (cell == null) { sheet.SetCellFormula(pos, ScriptRunningMachine.ConvertToString(v)); } else if (!cell.IsReadOnly) { cell.Formula = ScriptRunningMachine.ConvertToString(v); } }); #endif // FORMULA this["text"] = new ExternalProperty(() => cell == null ? string.Empty : cell.DisplayText); this["pos"] = new ExternalProperty(() => cell == null ? Pos : cell.InternalPos); this["row"] = new ExternalProperty(() => cell == null ? Pos.Row : cell.InternalRow); this["col"] = new ExternalProperty(() => cell == null ? Pos.Col : cell.InternalCol); this["address"] = new ExternalProperty(() => cell.Position.ToAddress()); }
public RSColumnObject(Worksheet sheet, ColumnHeader colHeader) { this.sheet = sheet; this.colHeader = colHeader; this["width"] = new ExternalProperty( () => colHeader.Width, (v) => colHeader.Width = (ushort)ScriptRunningMachine.GetIntValue(v)); this["visible"] = new ExternalProperty( () => colHeader.IsVisible, (v) => colHeader.IsVisible = ScriptRunningMachine.GetBoolValue(v)); }
public RSRowObject(Worksheet sheet, RowHeader rowHeader) { this.sheet = sheet; this.rowHeader = rowHeader; this["height"] = new ExternalProperty( () => rowHeader.Height, (v) => rowHeader.Height = (ushort)ScriptRunningMachine.GetIntValue(v)); this["visible"] = new ExternalProperty( () => rowHeader.IsVisible, (v) => rowHeader.IsVisible = ScriptRunningMachine.GetBoolValue(v)); }
public RSKeyEvent(int keyCode) { this.KeyCode = keyCode; this["keyCode"] = new ExternalProperty(() => keyCode); }
public RSCellStyleObject(Worksheet sheet, Cell cell) { this.sheet = sheet; this.Cell = cell; this["backgroundColor"] = new ExternalProperty( () => TextFormatHelper.EncodeColor(cell.InnerStyle.BackColor), (v) => { SolidColor color; if (TextFormatHelper.DecodeColor(ScriptRunningMachine.ConvertToString(v), out color)) { this.sheet.SetCellStyleOwn(cell.InternalPos, new WorksheetRangeStyle { Flag = PlainStyleFlag.BackColor, BackColor = color, }); this.sheet.RequestInvalidate(); } }); this["color"] = new ExternalProperty( () => TextFormatHelper.EncodeColor(cell.InnerStyle.TextColor), (v) => { SolidColor color; if (TextFormatHelper.DecodeColor(ScriptRunningMachine.ConvertToString(v), out color)) { this.sheet.SetCellStyleOwn(cell.InternalPos, new WorksheetRangeStyle { Flag = PlainStyleFlag.TextColor, TextColor = color, }); this.sheet.RequestInvalidate(); } }); this["fontName"] = new ExternalProperty(() => cell.Style.FontName, (v) => cell.Style.FontName = ScriptRunningMachine.ConvertToString(v)); this["fontSize"] = new ExternalProperty( () => cell.Style.FontSize, (v) => cell.Style.FontSize = TextFormatHelper.GetFloatPixelValue(ScriptRunningMachine.ConvertToString(v), System.Drawing.SystemFonts.DefaultFont.Size)); this["align"] = new ExternalProperty( () => cell.Style.HAlign, (v) => { this.sheet.SetCellStyleOwn(cell.InternalPos, new WorksheetRangeStyle { Flag = PlainStyleFlag.HorizontalAlign, HAlign = XmlFileFormatHelper.DecodeHorizontalAlign(ScriptRunningMachine.ConvertToString(v)), }); this.sheet.RequestInvalidate(); }); this["valign"] = new ExternalProperty( () => cell.Style.VAlign, (v) => { this.sheet.SetCellStyleOwn(cell.InternalPos, new WorksheetRangeStyle { Flag = PlainStyleFlag.VerticalAlign, VAlign = XmlFileFormatHelper.DecodeVerticalAlign(ScriptRunningMachine.ConvertToString(v)), }); this.sheet.RequestInvalidate(); }); }
public RSSelectionObject(Worksheet sheet) : base(sheet) { this["moveUp"] = new NativeFunctionObject("moveUp", (srm, owner, args) => { sheet.MoveSelectionUp(); return(null); }); this["moveDown"] = new NativeFunctionObject("moveDown", (srm, owner, args) => { sheet.MoveSelectionDown(); return(null); }); this["moveLeft"] = new NativeFunctionObject("moveLeft", (srm, owner, args) => { sheet.MoveSelectionLeft(); return(null); }); this["moveRight"] = new NativeFunctionObject("moveRight", (srm, owner, args) => { sheet.MoveSelectionRight(); return(null); }); this["pos"] = new ExternalProperty( () => sheet.SelectionRange.StartPos, (v) => { RangePosition range = sheet.SelectionRange; range.StartPos = RSUtility.GetPosFromValue(sheet, v); sheet.SelectRange(range); }); this["range"] = new ExternalProperty( () => sheet.SelectionRange, (v) => { sheet.SelectRange(RSUtility.GetRangeFromValue(sheet, v)); }); this["row"] = new ExternalProperty(() => sheet.SelectionRange.Row, (v) => { RangePosition range = sheet.SelectionRange; range.Row = CellUtility.ConvertData <int>(v); sheet.SelectRange(range); }); this["col"] = new ExternalProperty(() => sheet.SelectionRange.Col, (v) => { RangePosition range = sheet.SelectionRange; range.Col = CellUtility.ConvertData <int>(v); sheet.SelectRange(range); }); this["toString"] = new NativeFunctionObject("toString", (ctx, owner, args) => sheet.SelectionRange.ToString()); this["toAddress"] = new NativeFunctionObject("toAddress", (ctx, owner, args) => sheet.SelectionRange.ToAddress()); this["toSpans"] = new NativeFunctionObject("toSpans", (ctx, owner, args) => sheet.SelectionRange.ToStringSpans()); this["merge"] = new NativeFunctionObject("merge", (ctx, owner, args) => { sheet.MergeRange(sheet.SelectionRange); return(null); }); this["unmerge"] = new NativeFunctionObject("unmerge", (ctx, owner, args) => { sheet.UnmergeRange(sheet.SelectionRange); return(null); }); }
public RSWorkbook(IWorkbook workbook) { this.workbook = workbook; this["worksheets"] = new ExternalProperty(() => { if (worksheetCollection == null) { worksheetCollection = new RSWorksheetCollection(workbook); } return(worksheetCollection); }); this["currentWorksheet"] = new ExternalProperty(() => { if (ControlInstance != null) { var rsWorksheet = ControlInstance.CurrentWorksheet.worksheetObj; if (rsWorksheet == null) { rsWorksheet = new RSWorksheet(ControlInstance.CurrentWorksheet); ControlInstance.CurrentWorksheet.worksheetObj = rsWorksheet; } return(rsWorksheet); } else { return(null); } }); this["createWorksheet"] = new NativeFunctionObject("createWorksheet", (ctx, owner, args) => { return(new RSWorksheet(workbook.CreateWorksheet(args.Length > 0 ? ScriptRunningMachine.ConvertToString(args[0]) : null))); }); this["addWorksheet"] = new NativeFunctionObject("createWorksheet", (ctx, owner, args) => { if (args.Length < 1) { return(null); } workbook.AddWorksheet(RSWorksheet.Unbox(args[0])); return(null); }); this["insertWorksheet"] = new NativeFunctionObject("createWorksheet", (ctx, owner, args) => { if (args.Length < 2) { return(null); } workbook.InsertWorksheet(ScriptRunningMachine.GetIntValue(args[0]), RSWorksheet.Unbox(args[1])); return(null); }); this["removeWorksheet"] = new NativeFunctionObject("createWorksheet", (ctx, owner, args) => { if (args.Length < 1) { return(null); } Worksheet sheet = RSWorksheet.Unbox(args[0]); if (sheet != null) { return(workbook.RemoveWorksheet(sheet)); } else { return(workbook.RemoveWorksheet(ScriptRunningMachine.GetIntValue(args[0]))); } }); }
public RSRangeObject(Worksheet sheet, RangePosition range) : base(sheet) { this.Range = range; this["style"] = new ExternalProperty( () => { if (Style == null) { Style = sheet.GetRangeStyles(this.Range); } return(Style); }, (v) => { sheet.SetRangeStyles(this.Range, RSUtility.GetRangeStyleObject(v)); } ); this["pos"] = new ExternalProperty( () => sheet.SelectionRange.StartPos, (v) => { range.StartPos = RSUtility.GetPosFromValue(sheet, v); sheet.SelectRange(range); }); this["range"] = new ExternalProperty( () => sheet.SelectionRange, (v) => { sheet.SelectRange(RSUtility.GetRangeFromValue(sheet, v)); }); this["row"] = new ExternalProperty(() => sheet.SelectionRange.Row, (v) => this.Range = new RangePosition(CellUtility.ConvertData <int>(v), this.Range.Col, this.Range.Rows, this.Range.Cols)); this["col"] = new ExternalProperty(() => sheet.SelectionRange.Col, (v) => this.Range = new RangePosition(this.Range.Row, CellUtility.ConvertData <int>(v), this.Range.Rows, this.Range.Cols)); this["rows"] = new ExternalProperty(() => sheet.SelectionRange.Row, (v) => this.Range = new RangePosition(this.Range.Row, this.Range.Col, CellUtility.ConvertData <int>(v), this.Range.Cols)); this["cols"] = new ExternalProperty(() => sheet.SelectionRange.Col, (v) => this.Range = new RangePosition(this.Range.Row, this.Range.Col, this.Range.Rows, CellUtility.ConvertData <int>(v))); this["toString"] = new NativeFunctionObject("toString", (ctx, owner, args) => this.Range.ToString()); this["toAddress"] = new NativeFunctionObject("toAddress", (ctx, owner, args) => this.Range.ToAddress()); this["toSpans"] = new NativeFunctionObject("toSpans", (ctx, owner, args) => this.Range.ToStringSpans()); this["merge"] = new NativeFunctionObject("merge", (ctx, owner, args) => { sheet.MergeRange(this.Range); return(null); }); this["unmerge"] = new NativeFunctionObject("unmerge", (ctx, owner, args) => { sheet.UnmergeRange(this.Range); return(null); }); }
public RSWorksheet(Worksheet sheet) { this.sheet = sheet; sheet.worksheetObj = this; #region Attributes this["readonly"] = new ExternalProperty( () => { return(sheet.HasSettings(WorksheetSettings.Edit_Readonly)); }, (v) => { sheet.SetSettings(WorksheetSettings.Edit_Readonly, (v as bool?) ?? false); }); #endregion #region Selection this["selection"] = new ExternalProperty(() => { if (this.selection == null) { this.selection = new RSSelectionObject(sheet); } return(this.selection); }, (obj) => { sheet.SelectionRange = RSUtility.GetRangeFromValue(sheet, obj); }); this["selectRange"] = new NativeFunctionObject("selectRange", (srm, owner, args) => { RangePosition range = RSUtility.GetRangeFromArgs(sheet, args); if (range.IsEmpty) { return(false); } try { sheet.SelectRange(range); return(true); } catch (Exception) { return(false); } }); this["selectionMode"] = new ExternalProperty(() => null); #endregion #region Rows & Cols this["rows"] = new ExternalProperty(() => { return(sheet.RowCount); }, (v) => { sheet.SetRows(ScriptRunningMachine.GetIntValue(v)); }); this["cols"] = new ExternalProperty(() => { return(sheet.ColumnCount); }, (v) => { sheet.SetCols(ScriptRunningMachine.GetIntValue(v)); }); this["getRow"] = new NativeFunctionObject("getRow", (srm, owner, args) => { return(args.Length == 0 ? null : new RSRowObject(sheet, sheet.GetRowHeader(ScriptRunningMachine.GetIntValue(args[0])))); }); this["getCol"] = new NativeFunctionObject("getCol", (srm, owner, args) => { return(args.Length == 0 ? null : new RSColumnObject(sheet, sheet.GetColumnHeader(ScriptRunningMachine.GetIntValue(args[0])))); }); #endregion #region Cell & Style this["setRangeStyle"] = new NativeFunctionObject("setRangeStyle", (ctx, owner, args) => { if (args.Length < 1) { return(false); } RangePosition range = RSUtility.GetRangeFromValue(sheet, args[0]); WorksheetRangeStyle styleObj = RSUtility.GetRangeStyleObject(args[0]); sheet.SetRangeStyles(range, styleObj); return(styleObj); }); this["getCell"] = new NativeFunctionObject("getCell", (srm, owner, args) => { if (args.Length < 1) { return(null); } CellPosition pos = RSUtility.GetPosFromValue(sheet, args); return(new RSCellObject(sheet, pos, sheet.GetCell(pos))); }); #endregion #region Range this["mergeRange"] = new NativeFunctionObject("mergeRange", (srm, owner, args) => { RangePosition range = RSUtility.GetRangeFromArgs(sheet, args); if (range.IsEmpty) { return(false); } try { sheet.MergeRange(range); return(true); } catch (Exception) { return(false); } }); this["unmergeRange"] = new NativeFunctionObject("unmergeRange", (srm, owner, args) => { RangePosition range = RSUtility.GetRangeFromArgs(sheet, args); if (range.IsEmpty) { return(false); } try { sheet.UnmergeRange(range); return(true); } catch (Exception) { return(false); } }); #endregion this["reset"] = new NativeFunctionObject("reset", (ctx, owner, args) => { if (args.Length == 2) { sheet.Reset(ScriptRunningMachine.GetIntParam(args, 0, 1), ScriptRunningMachine.GetIntParam(args, 1, 1)); } else { sheet.Reset(); } return(null); }); this["focuspos"] = new ExternalProperty(() => sheet.FocusPos, (focuspos) => sheet.FocusPos = RSUtility.GetPosFromValue(sheet, focuspos)); this["fixPos"] = new NativeFunctionObject("fixPos", (ctx, own, args) => { var pos = RSUtility.GetPosFromArgs(this.sheet, args); return(RSUtility.CreatePosObject(this.sheet.FixPos(pos))); }); this["fixRange"] = new NativeFunctionObject("fixRange", (ctx, own, args) => { var range = RSUtility.GetRangeFromArgs(this.sheet, args); return(new RSRangeObject(this.sheet, this.sheet.FixRange(range))); }); }
public IEntity Map(MemberInfo mi) { IEntity tag = (IEntity)_entityCache[GetCacheKey(mi)]; if (null == tag) { switch (mi.MemberType) { case MemberTypes.Method: { return Map((MethodInfo)mi); } case MemberTypes.Constructor: { return Map((ConstructorInfo)mi); } case MemberTypes.Field: { tag = new ExternalField(this, (FieldInfo)mi); break; } case MemberTypes.Property: { tag = new ExternalProperty(this, (PropertyInfo)mi); break; } case MemberTypes.Event: { tag = new ExternalEvent(this, (EventInfo)mi); break; } case MemberTypes.NestedType: { return Map((Type)mi); } default: { throw new NotImplementedException(mi.ToString()); } } _entityCache.Add(GetCacheKey(mi), tag); } return tag; }