ExcelDNA是什么
ExcelDna是一个很强大的Excel第三方库,实现了通过C#为Excel开发XLL的目的,简洁方便。
ExcelDNA中的自定义函数
通过ExcelDNA,用户可以方便的为Excel扩展自定义函数。官方教程中已经详细介绍了如何创建单值函数,现在介绍如何创建溢出函数,即返回值有多个的函数。
代码实例如下所示:
#region 公式-文本提取-溢出函数
[ExcelFunction(ExplicitRegistration = true, Category = "文本提取", Description = "通过正则表达式提取文本内容-支持溢出函数")]
public static object TQQ(
[ExcelArgument(Name = "Text", Description = "待提取的原始文本")] string text,
[ExcelArgument(Name = "Pattern", Description = "正则表达式")] string pattern)
{
// 如果输入的文本或正则表达式为空,则返回空字符串
if (string.IsNullOrWhiteSpace(text) || string.IsNullOrWhiteSpace(pattern))
{
return string.Empty;
}
// 使用正则表达式匹配文本中的模式
var matches = Regex.Matches(text, pattern);
// 使用 LINQ 过滤匹配结果,提取组1的值(如果存在),否则提取整个匹配项
var results = matches
.Cast<Match>() // 将 MatchCollection 转换为可查询的集合
.Where(match => match.Success) // 仅处理成功匹配的项
.Select(match => match.Groups.Count > 1 ? match.Groups[1].Value : match.Value) // 提取组1的值或整个匹配
.ToArray(); // 转换为数组
// 如果找到匹配项,返回匹配结果数组;否则返回空字符串
return results.Length > 0 ? results : string.Empty;
}
#endregion
此代码所演示的自定义函数的所用是通过正则表达式的方式从单元格中提取特定文本,如果有多个值,则以一维数组的方式返回,在Excel中以单行的方式表示。
如果需要在Excel中以列的方式显示,则需要创建为二维数组
可以封装扩展方法把一维数组转为二维数组
/// <summary>
/// 将一维数组转为二维数组 (N行1列)
/// </summary>
/// <param name="array">一维数组</param>
/// <returns>转换后的二维数组</returns>
public static object[,] Convert1DArrayTo2D(this object[] array)
{
// 如果数组为空,返回空的二维数组
if (array == null || array.Length == 0)
{
return new object[0, 0];
}
// 创建一个二维数组,行数为一维数组的长度,列数为1
var result = new object[array.Length, 1];
// 将一维数组的每个元素赋值到二维数组的每一行第一列
for (int i = 0; i < array.Length; i++)
{
result[i, 0] = array[i];
}
return result;
}
调用方式:
// 如果找到匹配项,返回匹配结果数组;否则返回空字符串
return results.Length > 0 ? results.To2DArray() : string.Empty;
结果如下