Natasha V5.2.2.1 正式发布.

Posted NMS.LanX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Natasha V5.2.2.1 正式发布.相关的知识,希望对你有一定的参考价值。

DotNetCore.Natasha.CSharp v5.2.2.1

  • 使用 NMS Template 接管 CI 的部分功能.
  • 取消 SourceLink.GitHub 的继承性.
  • 优化几处内存占用问题.
  • 增加隐式 using 配置文件以支持隐式 using 引用. 当项目开启 <ImplicitUsings>enable</ImplicitUsings> 时,自动生效.
  • 增加初始化 PE 信息判断, 跳过无效 DLL 文件.
  • 整改 AssemblyCSharpBuilder, 修改几处 API:
    • 增加 GetAvailableCompilation, 开发者使用此API可以进行单独编译信息整合以及语义语法修剪,其结果为 Compilation 属性, 为下一步编译程序集做准备.
    • 增加 ClearCompilationCache 移除当前 编译单元的编译信息, 运行 GetAvailableCompilation/GetAssembly 将重新构建编译信息.
    • 增加 WithRandomAssenblyName 将当前编译单元的程序集名更改为 GUID 随机名.
    • 增加 ClearScript 清除当前编译单元储存的所有C#脚本代码.
    • 增加 Clear 清除脚本代码,清除编译信息,清除程序集名.
  • 增加一个节省性能开销的 API.
    • AnalysisIgnoreAccessibility(), 调用此方法,语义检测将检测元数据的访问级别,可能增加性能开销.
    • NotAnalysisIgnoreAccessibility(), 调用此方法,语义检测将忽视检测元数据的访问级别,降低开销(编译单元默认使用的是低开销方案), 安全编程请选择此项.
  • 编译单元增加两个方便操作的 API.
    • AddWithFullUsing(script): 增加脚本时,默认覆盖全域的 Using 引用.
    • AddWithDefaultUsing(script): 增加脚本时,默认覆盖主域的 Using 引用.
  • 新增 Type 的扩展 API:
    • GetDelegateFromType , 参考 GetDelegateFromShortName 的用法.
  • [破坏性更改] 下列 API, 从 AssemblyCSharpBuilder 的扩展方法 更改为 Assembly 类型的扩展方法:
    • GetTypeFromShortName / GetTypeFromFullName,
    • GetMethodFromShortName / GetMethodFromFullName
    • GetDelegateFromShortName / GetDelegateFromFullName

使用迁移: builder.GetDelegateFromShortName() 更改为 builder.GetAssembly().GetDelegateFromShortName();
builder.GetAssembly() 仍然不可多次编译, 请及时缓存结果.

DotNetCore.Natasha.Domain v5.2.0.1

  • 取消 SourceLink.GitHub 的继承性.
  • 增加 全局 using 配置文件以支持全局 using 引用.

变更一览

    internal class Program
    
        static void Main(string[] args)
        
            //准备工作
            NatashaManagement.Preheating();
            AssemblyCSharpBuilder builder = new();
            builder.Domain = DomainManagement.Random();

            //填充一个
            builder.AddWithDefaultUsing("public class A  ");
            //此 API 可以在不用编译的情况下获取到已经格式化好的语法树.
            //注: GetAssembly 方法中已包括此方法, 但不会重复运行.
            builder.GetAvailableCompilation();
            var assemblyA = builder.GetAssembly();
            ShowAssemblyInfo(assemblyA);
            ShowSyntaxTree(builder.Compilation!);


            //清除编译信息,使 builder 可以重新组合 编译信息.
            builder.ClearCompilationCache();
            //重置程序集名,以免编译时产生冲突.
            builder.WithRandomAssenblyName();
            //向 builder 中追加类型 B.
            builder.AddWithDefaultUsing("public static class B public static void Show() Console.WriteLine(\\"HelloWorld!\\");  ");
            
            var assemblyAB = builder.GetAssembly();
            ShowAssemblyInfo(assemblyAB);
            ShowSyntaxTree(builder.Compilation!);


            //反射方法并生成委托
            var action = assemblyAB.GetDelegateFromShortName<Action>("B", "Show");
            Console.WriteLine("运行方法:");
            action();

            //action.DisposeDomain();
            //Console.WriteLine(DomainManagement.IsDeleted(builder.Domain!.Name!));
            Console.ReadKey();

            static void ShowAssemblyInfo(Assembly assembly)
            

                Console.WriteLine("此程序集名字:"+assembly.FullName);
                Console.WriteLine("此程序集是否为动态程序集:" + (assembly.IsDynamic ? "是" : "否"));
                Console.WriteLine("编译后的程序集中类的数量:" + assembly.GetTypes().Length);
                Console.WriteLine("程序集中的类分别是:" + string.Join(",", assembly.GetTypes().Select(item => item.Name)));
               
            

            static void ShowSyntaxTree(Compilation compilation)
            
                Console.WriteLine("---------------------------");
                foreach (var item in compilation.SyntaxTrees)
                
                    Console.WriteLine("脚本代码:");
                    Console.WriteLine(item.ToString());
                
                Console.WriteLine("---------------------------");
            
        
    

结果如下:


此程序集名字:9a7962dc0b004c2481d615c5e044c6df, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
此程序集是否为动态程序集:否
编译后的程序集中类的数量:3
程序集中的类分别是:EmbeddedAttribute,RefSafetyRulesAttribute,A
-----------脚本代码-----------
public class A


-----------------------------

此程序集名字:a17ce8ef9c164e558facf13425b279c6, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
此程序集是否为动态程序集:否
编译后的程序集中类的数量:4
程序集中的类分别是:EmbeddedAttribute,RefSafetyRulesAttribute,A,B
-----------脚本代码-----------
public class A


using System;

public static class B

    public static void Show()
    
        Console.WriteLine("HelloWorld!");
    

-----------------------------

运行方法:
HelloWorld!

Spread.NET 表格控件 V12.1 正式发布

Spread.NET 表格控件 V12.1 正式发布

加入动态数组,让公式运算更具效率

Spread.NET 是一个在功能和布局上与 Excel 高度类似的 .NET表格控件,目前已广泛应用于财务、预算、工程、统计等领域的信息系统开发中,通过强大的数据处理引擎和灵活的数据可视化呈现,为商业表单控制面板提供了丰富、有效的内容信息。

 

如今,Spread.NET 的全新版本 V12.1 已经正式发布,该版本包含了诸多功能亮点,如动态数组支持(可大幅简化计算公式,提高公式运算效率)、公式追踪、交替样式支持、与 VSTO 类似的基于 1 的索引、类似 RTD 的异步函数等。

 

在列举 Spread.NET V12.1 的全部功能之前,请下载最新安装程序,以便同步体验!

>>.NET表格控件Spread.NET V12.1下载地址

 

动态数组支持:大幅简化计算公式,提高公式运算效率

Excel 2019 推出了动态数组函数,用于简化复杂计算公式:使用动态数组,返回值将自动“输出”到相邻单元格中(未使用的)。用户只需编写一个简单的公式,而不是编写复杂的数组公式就可解决多单元格问题。

 技术图片

 

Excel 动态数组功能预览

 

作为一款与 Excel 高度类似的表格控件,在 Spread.NET V12.1 中,也加入了如 Excel 动态数组一样的功能。

如何在 Spread.NET 中使用动态数组

首先,需要在 Spread 设计器中启用动态数组——默认情况下,动态数组不会自动启用,您需要通过以下方式之一显式启用它们:在Windows窗体的 Spread 设计器(Spread Designer)中,有一个新的“公式”选项卡,如下图:

 技术图片

 

如何在 Spread.NET 中使用动态数组

 

在“计算引擎”菜单中选中“动态阵列”框,以启用对动态阵列的支持。

 

除此之外,您也可以使用代码(通过调用 CalculationFeatures 函数),启用动态数组:

[C#]

fpSpread1.AsWorkbook().WorkbookSet.CalculationEngine.CalcFeatures = GrapeCity.Spreadsheet.CalcFeatures.DynamicArray;

[VB]

FpSpread1.AsWorkbook().WorkbookSet.CalculationEngine.CalcFeatures = GrapeCity.Spreadsheet.CalcFeatures.DynamicArray

 

举例:键入类似“= 1,1,2,2,3”的公式,该公式硬编码水平溢出的数组值如下图:

 技术图片

 

水平阵列使用‘,‘分隔符水平溢出

键入“= 1; 1; 2; 2; 3”这样的公式,它硬编码垂直溢出的数组值如下图:

 技术图片

 

垂直数组使用‘;‘ 分隔符垂直溢出

键入“= 1,1,2,1,3; 1,1,2,1,3; 1,2,3,2,5; 1,2,3,2,5; 1,2 ,2,2,5“ 这样的公式,其硬编码水平和垂直溢出的二维数组值如下图:

 技术图片

 

二维数组垂直和水平溢出

在相邻空白单元格中放置值的行为称为“填充(Spilling)”,当选择溢出范围内的任何单元格时,Spread.NET 会用浅蓝色边框,指示公式的“填充范围”,并且FormulaTextBox将单元格公式显示为已禁用且不可编辑。

Spread.NET 动态数组的强大功能

Spread.NET 现在支持六种动态数组函数:

l  SEQUENCE和RANDARRAY函数可以生成顺序或随机数据的数组

l  FILTER、SORT、SORTBY和UNIQUE函数主要用于筛选、排序、删除重复项等功能

使用动态数组,当您的数据发生变化时,设计器将自动调整大小并重新计算,让您的数据分析工作前所未有的简单。

Spread.NET 动态数组的使用场景

仅使用带有 RANDARRAY 的 SORTBY,即可为列表创建随机排序:

 技术图片

 

使用SORTBY和RANDARRAY随机排序值列表

仅使用SEQUENCE和NOW函数,实现每10分钟创建一个时间表计划标题:

技术图片

 

使用SEQUENCE安排每隔十分钟

仅使用三个公式和TRANSPOSE、SORT、UNIQUE和SUMIFS函数,直接在单元格中创建数据透视交叉分析表:

技术图片

 

仅使用三个公式创建的数据透视交叉分析表

 

 

Spread.NET设计器增强:加入公式追踪功能

在使用公式时,有时需要了解公式中引用了哪些单元格的数据,这就涉及到公式追踪的操作。在 Spread.NET V12.1 中,这些用于公式追踪的工具可以在Trace Precedents,Trace Dependents和Remove Arrows中的Formula Auditing组下找到:

 

 技术图片

 

新增如 Excel 般的行、列交替样式支持

Spread.NET V12.1 加入了如 Excel 般的行、列交替样式支持,为交替行或列(通常称为色带)添加颜色,以便使工作表中的数据更易于浏览,此功能包括对内置 Excel 样式和主题的支持,如颜色渐变和图案填充。

技术图片

 

新增如 Excel 般的行、列交替样式支持

 

实现方法:当需使用交替样式时,直接调用 AlternatingRows类包装的新接口即可,或者您也可以直接调用GrapeCity.Spreadsheet.dll的新公共接口来创建交替的行和列样式。

 

与 VSTO 类似的基于 1 的索引:更易于 VBA 代码移植

通过创建IWorkbook,Spread.NET 为所有 GrapeCity.Spreadsheet.IWorkbook API(如Microsoft Excel® VSTO API)提供了与 VSTO 类似的基于 1 的索引,这样做的目的是:可以轻松地将 Excel VBA 代码或旧的 Spread COM 代码(基于 1 的行和列索引部分)移植到 .NET 平台下(后者曾一直使用基于 0 的索引来支持以前版本中的所有 API,以实现 CLS) 。

Spread.NET 为何要使用基于1的索引

鉴于 Microsoft Excel ® 支持Visual Studio Tools for Office(VSTO)的Visual Basic for Applications(VBA)对象模型中基于1的索引,而 Spread.NET 的常见使用场景便是从支持宏的Microsoft中创建使用VBA和VSTO的电子表格应用程序。所以,Spread.NET使用基于 1 的索引,将更易于 VBA 代码移植。

实现方法:只需一次调用,即可获得基于1的索引对象:

[C#]

 IWorkbook iwb = WorkbookSet.CreateBase1Object(fpSpread1.AsWorkbook());

[VB] 

Dim iwb As IWorkbook = WorkbookSet.CreateBase1Object(FpSpread1.AsWorkbook())

 

全新的异步函数和属性,便于更新实时数据

Spread.NET 对创建自定义计算功能提供了丰富的支持,如使用AsyncFunction类创建类似RTD函数的异步函数。RTD 函数自 Excel 2002 引入,主要用于查看和更新实时数据。

在Spread.NET V12.1 中,您可以创建继承自AsyncFunction的自定义计算函数,实现对异步计算的支持,还可以通过各种FunctionAttributes来指示特殊函数的行为,如波动率或返回数组值。

 

如 Excel 般的“取消选择”

在 Excel 中,使用CTRL键配合鼠标或键盘可以选中或删除特定的单元格。而在Spread.NET V12.1中也将提供该功能, 这意味着您可以轻松地选择一系列单元格以应用某些更改,对于需要选择大范围数据的使用场景来说,这个功能将非常实用!

新的 F4 键行为

Excel 支持在编辑公式引用时使用F4键,在绝对和相对列和行引用之间切换引用。这个功能在Spread.NET 中也得以实现, 这种细节处更新可以使具有特定相对和绝对要求的公式比以前更易实现。

 

以上就是 Spread.NET V12.1 的主要新功能介绍,如需了解更多,请前往 Spread.NET 产品官网

以上是关于Natasha V5.2.2.1 正式发布.的主要内容,如果未能解决你的问题,请参考以下文章

Natasha V1.3.6.0 的升级日志

Linux基础之权限-你弄得明白吗?

Natasha 4.0 探索之路系列 模板 API

Linux命令权限

Linux命令权限

Natasha 编译单元