1. 产品
  2.   电子表格
  3.   .NET
  4.   ExcelDNA
 
  

用于处理 Excel 电子表格的开源 .NET 库  

ExcelDNA 允许您使用 C#、F# 或 VB .NET 创建和部署 Excel 加载项。

Excel-DNA 是一个将 .NET 集成到 Excel 中的开源 API。 API 允许您在 Excel 的本机 (.xll) 加载项中创建高性能用户定义函数 (UDF) 等。您不需要任何安装或注册,您的整个加载项可以打包到单个 .xll 中。

Excel-DNA 运行时免费供所有人使用,并在允许商业用途的开放源代码许可下分发。它是使用 .NET 开发的,用户必须安装 .NET Framework 运行时。 Excel 和 .NET 代码使用向 Excel 公开 .NET 代码的加载项 (.xll) 相互集成。您可以在基于文本的 (.dna) 脚本文件(C#、Visual Basic 或 F#)或编译的 .NET 库 (.dll) 中编写代码。

Previous Next

Excel-DNA 入门

安装 ExcelDNA 的推荐方法是从 NuGet,请使用以下命令更快地安装。

从 NuGet 安装 ExcelDNA

 Install-Package ExcelDna.AddIn

通过 .NET API 创建 Excel 函数

ExcelDNA 为 C# .NET 程序员提供了使用 C# 生成 Excel 函数的能力。您还可以使用 ExcelFunctionAttributes,如 Name、Description、Category、IsHidden、IsExceptionSafe 等。 IsMacroType 属性更改 Excel-DNA 在注册函数时使用的参数。

如何通过。ET创建和使用Excel函数

public class GetInfoFunctions
{
    [ExcelFunction(Description = "Returns the result of xlfGetCell.", IsMacroType = true)]
    public static object GetCell(int type_num, [ExcelArgument(AllowReference = true)] object reference)
    {
        return XlCall.Excel(XlCall.xlfGetCell, type_num, reference);
    }
    [ExcelFunction(Description = "Returns the result of xlfGetWorkspace.", IsMacroType = true)]
    public static object GetWorkspace(int type_num)
    {
        return XlCall.Excel(XlCall.xlfGetWorkspace, type_num);
    }
    [ExcelFunction(Description = "Returns the current list separator.", IsMacroType = true)]
    public static string GetListSeparator(int type_num)
    {
        object[,] workspaceSettings = (object[,])XlCall.Excel(XlCall.xlfGetWorkspace, 37);
        string listSeparator = (string)workspaceSettings[0, 4];
        return listSeparator;
    }
}

支持动态数组

开源 .NET API Excel-DNA 还支持在 excel 中使用动态数组。当您编写动态数组公式时,它会确定该公式是否有可能返回多个值。

如何通过C#API进行阵列自动调整结果

public static object dnaMakeArrayAndResize(int rows, int columns, string unused, string unusedtoo)
        {
            object[,] result = dnaMakeArray(rows, columns);
            return ArrayResizer.dnaResize(result);
            // Can also call Resize via Excel - so if the Resize add-in is not part of this code, it should still work
            // (though calling direct is better for large arrays - it prevents extra marshaling).
            // return XlCall.Excel(XlCall.xlUDF, "Resize", result);
        }
        public static double[,] dnaMakeArrayAndResizeDoubles(int rows, int columns)
        {
            double[,] result = dnaMakeArrayDoubles(rows, columns);
            return ArrayResizer.dnaResizeDoubles(result);
        }
    }

诊断记录支持

ExcelDNA API 允许 .NET 开发人员在使用 Excel 加载项时使用诊断日志记录。 Excel-DNA 使用标准的 .NET System.Diagnostics.Trace 机制进行诊断日志记录。

添加内部的日志警告和错误

public void AutoOpen()
{
    // Log warnings and errors to the Excel-DNA LogDisplay
    Trace.Listeners.Add(new LogDisplayTraceListener());
}
...
Trace.TraceInformation("Trace information!");
Trace.TraceWarning("Trace warning!");
Trace.TraceError("Trace error!");
 中国人