郑广学VSTO火箭速成班 VBAYYDS.COM

Extentions 类

Excel880VSTO特色扩展方法,增强Excel对象能力,给二维数组增加更便利的Linq能力
实现一行代码完成二维数组增删查改,多条件分类汇总,批量VLoolkup,以及子数组选择和数据修改提取
可将原来必须循环实现的代码 大部分用更简短和清晰的Linq语句完成 10倍提升开发速度 降低开发难度

Definition

命名空间: Excel880VSTO
程序集: Excel880VSTO (在 Excel880VSTO.dll 中) 版本:1.5.8.0 (1.5.8.0)
C#
public sealed class Extentions
Inheritance
Object    Extentions

方法

AddColumn(Object, Int32, Object) 一维数组在中间插入数据 主要给二维数组插入列的时候内部使用
插入列为0则插入最后面,-1则插入到最前面
AddColumnT(IEnumerableT, FuncObject, Object) 按指定的函数给二维数组右侧添加辅助列
AddColumnT(T, FuncObject, Object) 按指定的函数给二维数组右侧添加辅助列
AddColumn(function(x) x.concat("").toarray)'右边添加一空列
AddColumnT(IEnumerableT, Int32, FuncObject, Int32, Object) 按指定的函数给二维数组添加辅助列, 插入到指定列位置,函数里可代入当前行号参数
arr.Enumerable.AddColumn(1,Functioin(x,i) i)'在首列插入行号辅助列
插入列为0则插入最后面,-1则插入到最前面,其他按从1开始的列号插入到指定列之前
AddColumnT(IEnumerableT, Int32, FuncObject, Object) 按1数的列号前面插入数据 按指定的函数
AddColumnT(T, Int32, FuncObject, Int32, Object) 按指定的函数给二维数组添加辅助列 插入到指定列位置,函数里可代入当前行号参数
arr.AddColumn(1,Functioin(x,i) i)'在首列插入行号辅助列 注意行号按0开始
如果要保持二维数组的行号 请用arr.AddColumn(1,Functioin(x,i) i+1).ToArray2D
插入列为0则插入最后面,-1则插入到最前面,其他按从1开始的列号插入到指定列之前
AddColumnT(T, Int32, FuncObject, Object) 二维数组在指定列插入数据
AddHeader(IEnumerableObject, String) 二维数组集合添加表头
arr2D.AsEnumerable.AddHeader("a,b,c")
AddHeaderT(IEnumerableT, IEnumerableObject) 二维数组集合添加表头
arr2D.AsEnumerable.AddHeader({"a","b","c"})
AddRowNumbersT(IEnumerableT, Int32, Int32) 把行号添加到辅助列,默认最后面,-1插入到最前面,可指定行号开始下标
arr.Enumerable.AddRowNumbers(-1)'在尾列插入行号辅助列
插入列为0则插入最后面,-1则插入到最前面,其他按从1开始的列号插入到指定列之前
AddRowNumbersT(T, Int32, Object) 二维数组把行号添加到辅助列,插入位置默认为0到最后面,为-1插入到最前面,可指定行号开始下标
arr.AddRowNumbers'在尾列插入行号辅助列
arr.AddRowNumbers(-1,2)'行号从2下标开始
插入列为0则插入最后,-1则插入到最前,其他按从1开始的列号插入到指定列之前
AsEnumerable(Object) object类型的二维数组 用函数形式包装一下 然后就可以使用linq了
主要用于没有声明类型的object类型二维数组 用AsEnumerable(arr).where
AsEnumerable(Range) 单元格集合转为可枚举的对象 每一个枚举项为一个单元格或者一行一列单元格
注意如果按行遍历可用列用rng.Rows.AsEnumerable
遍历列用rng.Columns.AsEnumerable
AsEnumerable(Sheets) 工作表集合转为可使用LInq枚举集合 每一个枚举项为一个工作表
AsEnumerable(Workbooks) 工作簿集合转为可枚举的对象 每一个枚举项为一个工作簿
AsEnumerable(Worksheets) 工作表集合转为可使用LInq枚举集合 每一个枚举项为一个工作表
AsEnumerable(Object, String) 把二维数组按指定的列名称转成动态对象Lit集合 后续可按对象集合形式访问 AsEnumerable(arr, Split("姓名,属性,数量", ",")) arr.Whers(function(x) x.数量>1)
AsEnumerable(Object, String, String) 把二维数组按指定的列名称转成动态对象Lit集合 后续可按对象集合形式访问 AsEnumerable(arr, "姓名,属性,数量") arr.Whers(function(x) x.数量>1)
AsEnumerableT(T) 二维数组实现可枚举的接口 查询时每一行作为一个下标从0开始的objec类型一维数组 方便使用Linq查询
AsEnumerableT(Object) 按集合内部的item访问顺序 返回整个的可枚举对象
遍历的行为和for each item as 类型 in 集合一样
AsEnumerable(of Range)(obj).Where
AsEnumerable2D 单元格按行转为可使用Linq的二维数组,相当于rng.ToArray2D.AsEnumerable
Average(IEnumerableObject) Linq增强 二维数组集合的元素求平均值 无效值算0
Average(IEnumerableObject, String) Linq增强 二维数组集合选择列求平均值 无效值算0
AverageT(IEnumerableT) Linq增强 序列中的元素求平均值 无效值算0
CloseNoHide 彻底关闭窗体 无视关闭事件中设置的隐藏 保证下次打开是新的实例
ConcatT(IEnumerableT) 2维数组垂直方向合并为一个二维数组,注意列数要相同 可接受1个或者多个数组一起合并
crr= arr.Concat(brr).ToArray2D
ConcatT(T, Object) 一维数组垂直方向合并
arr.Concat(brr,crr).ToArray
arr.Concat(brr,1,crr).ToArray'也可以单个值和数组混合添加
ConcatT(T, Object) 2维数组垂直方向合并为一个二维数组,注意列数要相同 可接受1个或者多个数组一起合并
crr= arr.Concat(brr).ToArray2D
CopyT 二维数组克隆 方便批量操作保留源数据
CountT(T) Linq增强 一维维数组总行数
CountT(T) Linq增强 二维数组总行数
CreatKeyT 主要用于拼接多个key用于配合ToDictionay字典查询 默认用@^@分隔 可自己指定分隔符
等价于 arr.TextJoin("@^@")
CreatKey({"中国","2022年","1季度"})==>"中国@^@2022年@^@1季度"
CreatRange(String, String) 把序号简写模式的行列号转为单元格地址参数 如果本来就是字母+数字形式则直接返回 CreatRange("1,3,6")得到 "1:1,3:3,6:6"
CreatRange("1,3-6","列")得到 "A:A,C:F"
CreatRange(Int32, Int32, Int32, Int32) 根据起止坐标参数得到一个单元格地址
CreatRange(1,1,2,3)得到 "A1:C2"
如果开始列为0则返回整行 开始行为0则返回整列 结束行列为0返回int最大值
Defult(DictionaryString, Object, String, Object) 对值为一维数组的字典增强取数,key不存在则返回一个与字典中一样大小的空一维数组
主要用于二维数组生成key=>一维数组 类型的字典后续查询中key不存在的情况处理
DefultTkey, TValue(DictionaryTkey, TValue, Tkey, Object) 字典取数时的空值处理 如果key不存在则返回值类型的默认值
也可按指定的结果返回 不局限与值类型
DistinctT(T) 2维数组整行去重
arr.Distinct
DistinctT(IEnumerableT) 二维数组集合整行去重
arr.AsEnumerable.Distinct
DistinctT(IEnumerableT, Int32) 二维数组集合单列去重
arr.AsEnumerable.Distinct(3)'第3列去重 得到单列结果
DistinctT(T, Int32) 2维数组选取某列去重结果为单列二维数组
arr.Distinct(2) 指定第2列
DistinctByT(IEnumerableT, String, String) 二维数组集合去重 按指定列做关键字
arr.AsEnumerable.DistinctBy("F1,F2") 按 1列@^@2列 作为关键字去重
DistinctByT(T, String, String) 2维数组去重 按指定列做关键字
arr.DistinctBy("1,2") 按 1列作为关键字去重
DistinctByTSource, TKey(IEnumerableTSource, FuncTSource, TKey) Linq增强扩展,按指定规则去重
DistinctByT, TResult(T, String, FuncObject, TResult, String) 二维数组集合去重 按指定列做关键字 可选结果列
arr.AsEnumerable.DistinctBy("F1,F2",Function(x) {x.F1,x.F2,x.F3})
按 1列@^@2列 作为关键字去重 结果选取1 2 3列
EValuateVBNet 增强的表达式计算 可支持超过255字符 不需要另外引用js库
EValuateVBNet("1+2+3^2+2*(5+6*2)")
ExceptT(IEnumerableT, IEnumerableT) 2个一样类型的二维数组集合求差集 结果对整行去重 这个用来覆盖系统本身默认方法
ExceptT1, T2(T1, T2) 二维数组求差集 结果对整行去重
ExceptT1, T2(IEnumerableT1, IEnumerableT2) 2个不同类型的二维数组集合求差集 结果对整行去重
Except2T(IEnumerableT, IEnumerableT)  
Except2T1, T2(T1, T2) 二维数组按整行求差集 A减去B 结果不去重
Except2T1, T2(IEnumerableT1, IEnumerableT2) 二维数组集合按整行求差集 A减去B 结果不去重
F0T(T, Int32) '按1下标访问0下标一维数组
F0T(T, String) 按Excel的列号规则访问0下标的一维数组,A列为第1列开始
F1分组聚合表达式解析  
FillFormula 将rng往下填充公式到有效区最大行 默认参照A列 可指定列
Flat(Object, Int32) 多层对象摊平为一个单层结构 比如二维数组所有元素转为1维数组
常用于单行单列二维数组转一维数组可指定递归深度
FlatT(T) 多层结构摊平为一个单层结构 比如二维数组所有元素转为1维数组
常用于单行单列二维数组转一维数组
FlatT(IEnumerableT) 多层枚举摊平为一个单层结构 比如二维数组所有元素转为1维数组
常用于单行单列二维数组转一维数组
ForEachT(T, FuncT, T) 一维数组ForEach加强,批量修改源数据
arr.ForEach(Function(x) x+1 )'所有元素+1
ForEachT(T, FuncT, T) 二维数组的ForEach直接批量修改元素,可用字符串选择多列
arr.ForEach(Function(x) x+1)
原数组直接修改,返回值也等于修改后的原数组
ForEachT(IEnumerableT, FuncT, T) 二维数组集合的ForEach批量修改
arr.ForEach(Function(x) x+1)
原数组集合直接修改,返回值也等于修改后的原数组
ForEachT(T, ActionT, Int32) 一维数组ForEach加强,批量操作源数据 一般用来结合处理其他数据
Function(x,i) x为原数组,i为下标 0开始 序号从1开始 arr.ForEach(Function(x,i) debug.print(x(i)) )'依次输出元素
ForEachT(T, ActionT, Int32, Int32) 二维数组的ForEach加强,可用字符串选择多列 注意总是从1开始
arr.ForEach(Sub(x,i,j) x(i,j)=x(i,j)+1)'所有元素+1
ForEachT(T, String, FuncT, T) 一维数组ForEach加强,批量修改源数据
arr.ForEach("1,3,5",Function(x) x+1 )'第1,3,5个元素+1
ForEachT(T, String, FuncT, T) 二维数组的ForEach直接批量修改元素,可用字符串选择多列
arr.ForEach("1,3-5", Function(x) x+1)
表示1,3,4,5列 统一加1 列如果传空值代表修改所有 原数组直接修改,返回值也等于修改后的原数组
ForEachT(IEnumerableT, String, ActionT, Int32, Int32) 二维数组集合的ForEach加强,可用字符串选择多列 注意总是从1开始
用户方法依次传入 二维数组,行号,列号 可使用行列参数 下标按1算起
arr.ForEach("1,3-6",Function(x,i,j) x(i,j)=x(i,j)+1)'指定列元素+1
ForEachT(IEnumerableT, String, FuncT, T) 二维数组集合的ForEach批量修改,可用字符串选择多列
arr.ForEach("1,3-5", Function(x) x+1)
表示1,3,4,5列 统一加1 列如果传空值代表修改所有 原数组集合可直接修改,返回值也等于修改后的原数组
ForEachT(T, String, ActionT, Int32) 一维数组ForEach加强,批量操作源数据 一般用来结合处理其他数据
Function(x,i) x为原数组,i为下标 0开始 序号从1开始
arr.ForEach("1,3-5",Function(x,i) x(i)="") '清空第1 第3到第5个元素
ForEachT(T, String, ActionT, Int32, Int32) 二维数组的ForEach加强,可用字符串选择多列 注意总是从1开始
用户方法依次传入 源数组,行号,列号 可使用行列参数
arr.ForEach("1,3-6",Sub(x,i,j) x(i,j)=x(i,j)+1)'指定列元素+1
GetPublicSubs 获得程序集指定模块中所有可直接执行的Public Sub名称,多个模块用逗号分隔
GetShtByCodeName 跨表不能使用shee1这种代码名称 郑广学 VBAYYDS.COM
一定要用codename跨表访问用下面的函数
返回指定工作簿对象的codename
set sht=GetShtByCodeName(activeworkboook,"Sheet1")
GroupByT(IEnumerableT, String, String) 二维数组集合分组,按F1表达式选择列
arr.AsEnumerable.GroupBy("F1,F2") 按 1列@^@2列 合并的字符串关键字分组
GroupByT(T, String, String) 2维数组分组,按F1表达式选择列
arr.GroupBy("F1,F2") 按 1列@^@2列 合并的字符串关键字分组
GroupIntoT(IEnumerableT, String, String, String) 二维数组集合 分组+汇总 相当于Group().Select()
arr.AsEnumerable.GroupInto("F1,F2","F1,F2,sum(4),count")
'按第1,2列分组汇总 ,结果显示 1列,2列,第4列求和, 计数
GroupIntoT(T, String, String, String) 二维数组分组+汇总 相当于Group().Select()
arr.GroupInto("F1,F2","F1,F2,sum(4),count")
'按第1,2列分组汇总 ,结果显示 1列,2列,第4列求和, 计数
InsertCols(IEnumerableObject, String, Object, Int32) 二维数组集合指定位置插入列 可指定某个固定值 默认为空值
AddColumn("1,3")'第1列和第3列插入一列空列
也可接受二维数组参数 插入到指定位置 注意二维数组行数要与源数组一样 arr.AddColumn("1,3")'第1列和第3列插入一列空列
InsertColsT(T, String, Object, Int32) 二维数组在指定位置插入列 可指定某个固定值 默认为空值
AddColumn("1,3")'第1列和第3列插入一列空列
InsertRowsT(IEnumerableT, String, Object, Int32) 二维数组集合在指定行号位置插入多行
arr.InsertRows("2,4",2)'第2行和第4行前面插入2行空行 arr.InsertRows("1",brr)'把和arr列数一样的brr插入到指定行前面 arr.InsertRows("1",{1,2,3,4,5})'把一维数组作为一行插入到指定位置
InsertRowsT(T, String, Object, Int32) 二维数组在指定行号位置插入空行
arr.InsertRows("2,4",2)'第2行和第4行前面插入2行空行
IntersectT1(IEnumerableT1, IEnumerableT1) 二维数组集合求交集 结果对整行去重 主要是覆盖系统自带的方法
IntersectT1, T2(IEnumerableT1, IEnumerableT2) 二维数组集合求交集 结果对整行去重 2个不一样的数组类型
IntersectT1, T2(T1, T2) 二维数组求交集 结果对整行去重
Is2DArray 判断一个变量是否二维数组
IsSingle 判读一个变量是否一个单值类型或者字符串 也就是数值 日期 和字符 字符串 都属于单值类型
LastRow 返回rng所在列的最后最后一行非空行号
LastRowRng 返回rng所在列的最后一行非空单元格
LeftJoin(IEnumerableObject, IEnumerableObject, String, String, FuncObject, Object, Object, Object, Object) 二维数组集合批量Vlookup,左表查右表,返回左表所有数据和右表首条数据
可接受逗号分隔的的F1关键字列号,调用更加方便
LeftJoin(IEnumerableObject, IEnumerableObject, String, String, String, Object, Object) 二维数组集合批量Vlookup,左表查右表,返回左表所有数据和右表对应的首行数据
来源和结果均可接受逗号分隔的的F1关键字列号,调用更加方便
arr.LeftJoin(brr,1,1,"a.F1,a,F2,b.F2")'两表按首列连接 返回A表1 2列和B表第2列
arr.LeftJoin(brr,1,1,"a.Concat(b)")'两表按首尾连接 两表直接左右对接所有列
LeftJoinTKey(IEnumerableObject, IEnumerableObject, FuncObject, TKey, FuncObject, TKey, FuncObject, Object, Object, Object) 二维数组集合批量Vlookup,左表查右表,返回左表所有数据和右表首条数据 右表找不到的返回空
全部按函数形式传参,最灵活的形式 结果选择器要返回一维数组
LeftJoinTKey(Object, Object, FuncObject, TKey, FuncObject, TKey, FuncObject, Object, Object, Object) 二维数组批量Vlookup,左表查右表,返回左表所有数据和右表首条数据, 右表找不到的返回空
更灵活的关键字和结果选择器
LeftJoinT1, T2(T1, T2, String, String, FuncObject, Object, Object, Object, Object) 二维数组批量Vlookup,左表查右表,返回左表所有数据和右表首条数据 右表找不到的返回空
可接受逗号分隔的的关键字列号,调用更加方便
arr.LeftJoin(brr,1,1,function(a,b) {a.F1,a.F2,b.F3})'a表查b表按按首列为关键字 返回A表前2列和b表后2列
LeftJoinT1, T2(T1, T2, String, String, String, Object, Object) 二维数组批量Vlookup,左表查右表,返回左表所有数据和右表首条数据 右表找不到的返回空
可接受逗号分隔的的关键字列号,调用更加方便
arr.LeftJoin(brr,1,1,function(a,b) {a.F1,a.F2,b.F3})'a表查b表按按首列为关键字 返回A表前2列和b表后2列
LeftJoinTLeft, TRight, TKey, TResult(IEnumerableTLeft, IEnumerableTRight, FuncTLeft, TKey, FuncTRight, TKey, FuncTLeft, TRight, TResult) 对象类型集合的批量Vlookup方法,左表查右表,返回左表所有数据和右表首条数据 右表找不到的返回空
LeftOutJoinT1, T2(IEnumerableT1, IEnumerableT2, String, String, FuncObject, Object, Object, Object, String) 二维数组集合LeftOutJoin高级查询函数 返回左表所有行+右表匹配的行 有多行会重复展开多行
不写结果选择函数则默认A表左右列+B表左右列
LeftOutJoinT1, T2(T1, T2, String, String, FuncObject, Object, Object, Object, String) 二维数组LeftOutJoin高级查询函数 返回左表所有行 右表匹配的行 有多行会重复展开多行
关键字列按逗号分隔字符串传入
LeftOutJoinT1, T2(T1, T2, String, String, String, Object, String) 二维数组LeftOutJoin高级查询函数 返回左表所有行 右表匹配的行 有多行会重复展开多行
关键字列按逗号分隔字符串传入,结果按a.F1,b.F2形式书写 默认a+b整行返回
arr.LeftOutJoin(brr,1,1,"a.F1,b.F2")
LeftOutJoinT1, T2, TKey(IEnumerableT1, IEnumerableT2, FuncObject, TKey, FuncObject, TKey, FuncObject, Object, Object, Object) 二维数组集合LeftOutJoin一对多查询函数 返回左表所有行 右表匹配的行 有多行会重复展开多行
LeftOutJoinT1, T2, TKey(T1, T2, FuncObject, TKey, FuncObject, TKey, FuncObject, Object, Object, Object) 二维数组LeftOutJoin高级查询函数 返回左表所有行 右表匹配的行 有多行会重复展开多行
LeftOutJoinTLeft, TRight, TKey, TResult(IEnumerableTLeft, IEnumerableTRight, FuncTLeft, TKey, FuncTRight, TKey, FuncTLeft, TRight, TResult) 增强的对象类型Linq查询左连接方法, 按指定key和结果集函数返回 无匹配的返回默认值
Max(IEnumerableObject, String) Linq增强 按指定列表达式求最大值 忽略无效值
MaxT(IEnumerableT) Linq增强 序列快速求最大值 忽略无效值
MaxT(T, String) Linq增强 二维数组选择列求最大值 忽略无效值
MaxRange 某一起始行区域往下扩展到最大行 默认按所有列最大行 也可指定参考列
Min(IEnumerableObject, String) Linq增强 一维数组枚举集合选择列求最小值 忽略无效值
MinT(IEnumerableT) Linq增强 一维数组求最小值 忽略无效值
MinT(T, String) Linq增强 二维数组选择列求最小值 忽略无效值
NoThingToEmpty Nothing转空字符 避免代码中判断isnothing
OrderByT(T) 一维数组排序 省去写不必要的参数 默认按混合类型排序
OrderByT(IEnumerableT, FuncT, Object)  
OrderByT(IEnumerableT, String) 二维数组集合OrderBy升序,按F1表达式
arr.AsEnumerable.OrderBy(1)'1代表第1列 也可以用"F1"
OrderByT(T, Object) 一维数组排序 按指定的序列排序 不在序列中的元素按原位置依次后移
OrderByT(T, String) 二维数组集合OrderBy升序,按F1表达式
arr.OrderBy(1)'1代表第1列 也可以用"F1",以及简单的运算(mid(F1,2))
OrderByT(IEnumerableT, FuncT, Object, Object) 二维数组集合自定义排序 指定参考列函数以及自定义序列数组
OrderByT(IEnumerableT, String, String) 二维数组集合自定义排序 指定参考列以及自定义序列
arr.Enumerable.OrderBy(1,{3,1,2})'1代表第1列 按后面数组顺序排列 不存在的按自然顺序排在最后
OrderByT(T, FuncT, Object, Object) 二维数组自定义排序 指定参考列以及自定义序列
OrderByT(T, String, Object) 二维数组自定义排序 指定参考列以及自定义序列
arr.OrderBy(1,{3,1,2})'1代表第1列 按后面数组顺序排列 不存在的按自然顺序排在最后
如果是字符串类型的可以用"三,一,二" 以逗号分隔形式传入
OrderByDescendingT(T) 一维数组快速降序排序 省去写不必要的参数
OrderByDescendingT(IEnumerableT, String) 二维数组集合OrderByDescending降序,arr.AsEnumerable.OrderByDescending("F1") 按F1降序
OrderByDescendingT(T, String) 2维数组OrderByDescending降序
arr.OrderByDescending(1) 按F1降序二维数组排序集合
OutFullJoin(IEnumerableObject, IEnumerableObject, String, String, FuncObject, Object, Object, Object, String) 二维数组集合的全连接,key接受逗号分隔的列号
左右无匹配项自动留空
OutFullJoin(IEnumerableObject, IEnumerableObject, String, String, String, Object, String) 二维数组集合的全连接,key接受逗号分隔的列号
左右无匹配项自动留空
OutFullJoin(Object, Object, String, String, FuncObject, Object, Object, Object, String) 二维数组全连接,key接受逗号分隔的列号,左右无匹配项自动留空
arr.OutFullJoin(brr,1,1,function(a,b) {a.f1,b.f2})
不写结果选择器代表显示a+b所有列
OutFullJoinTkey(IEnumerableObject, IEnumerableObject, FuncObject, Tkey, FuncObject, Tkey, FuncObject, Object, Object, Object) 二维数组集合的全链接 结果按指定关键字选择器连接 显示2表所有数据
不写结果选择器则默认显示A+B的所有列
QcTextJoin(IEnumerableObject) Linq增强 对单列二维数组集合去重连接字符串,按逗号连接
arr.AsEnumerable.Select(1).QcTextJoin
QcTextJoin(IEnumerableObject, Int32) Linq增强 对二维数组集合选择列去重连接字符串,默认逗号连接
arr.AsEnumerable.QcTextJoin(1)
QcTextJoin(IEnumerableObject, String) Linq增强 对单列二维数组集合去重连接字符串,默认逗号连接
arr.AsEnumerable.Select(1).QcTextJoin("+")
QcTextJoin(IEnumerableObject, String, FuncObject, Object) 按列选择器函数的选择集去重连接字符串
QcTextJoin(IEnumerableObject, String, String) Linq增强 二维数组集合的元素选择列执行字符串去重连接
QcTextJoinT(IEnumerableT) Linq增强 对二维数组集合去重连接字符串,按逗号连接
QcTextJoinT(IEnumerableT, String) Linq增强 对二维数组集合去重连接字符串,按分隔符连接
{1,2,3,1,2,4}.QcTextJoin
RandBetween(Double, Double) 生成一个m到n之前的随机小数
RandBetween(Int32, Int32) 生成一个m到n之间的随机整数
RangeCopy 二维数组集合按指定区域地址 整片区域复制粘贴来源
arr.RangeCopy("A:A",1)'A列写入1 arr.RangeCopy("A:A",brr)'A列写入brr 来源是二维数组 则按起始下标依次写入
来源是单个值 则直接写入
RangeForEachT(IEnumerableT, String, ActionT, Int32, Int32) 二维数组集合按单元格地址形式批量修改数据 可带行号列号
arr.RangeForEach("1:1",Function(x,i,j) x + "=" + i + "-" + j) '1行区域加上行列号标记 注意传入函数的行号列号按1开始
RangeForEachT(IEnumerableT, String, FuncT, T) 二维数组集合按单元格地址形式批量修改数据
arr.RangeForEach("A:A",Function(x) x + "-1") 'A列区域加后缀
RangeForEachT(T, String, ActionT, Int32, Int32) 二维数组按单元格地址形式批量修改数据
arr.RangeForEach("1:1",Function(x,i,j) x(i,j) + "=" + i + "-" + j) '1行区域加上行列号标记
RangeForEachT1(T1, Object, FuncT1, Object, T1) 2个一样大小的数组进行数组运算
RangeForEachT(T, String, FuncT, Object) 二维数组按单元格地址形式批量修改数据 可带行号列号
arr.RangeForEach("A:A",Function(x) x + "-1") 'A列区域加后缀
RangeForEachT1(T1, String, Object, FuncT1, Object, T1) A数组指定的区域 与来源B运算后写回 与Excel中数组运算类似
B有4种情况 注意与Excel数组不同 原数组区域不会自动扩展
1 B是与区域同大小的数组 直接按2个数组元素运算
2 B是单个值 则单个值扩展为区域同大小数组后运算
3 B是单行数组且列数与区域一致 则扩展单行与区域行数一致后运算
4 B是单列数组且行数与区域一致 则扩展单列与区域列数一致后运算
RangeSelectT(IEnumerableT, String) 二维数组按单元格地址形式选择区域得到新数组
arr.RangeSelect("A:C") '连续行1:2,连续列A:C 连续区域A1:C5
RangeSelectT(T, String) 二维数组按单元格地址形式选择区域得到新数组
arr.RangeSelect("A1:C3")'按区域 arr.RangeSelect("1,2:3,5","行")'按不连续行竖向堆叠 arr.RangeSelect("1,2:3,5","列")'按不连续列 arr.RangeSelect("A:A,C:D,E:F","列")'按不连续列 结果数组从1下标开始
RangeSelectT(IEnumerableT, String, String) 二维数组多行多列选择
RangeSelect("1,3-5,7","行")'选择指定的不连续行 得到结果数组 RangeSelect("1,3-5,7","列")'选择指定的不连续列 得到结果数组
RangeSelectT(T, String, String) 二维数组多行多列选择
RangeSelect("1,3-5,7","行")'选择指定的不连续行 得到结果数组 RangeSelect("1,3-5","列")'选择指定的不连续列 得到结果数组
RangeSelectT(T, Int32, Int32, Int32, Int32) 二维数组按行列坐标参数选择 0代表整行或者整列
arr.RangeSelect(1,1,2,3) 'A1:C2区域 arr.RangeSelect(1,0,3,0) '1:3行位置 arr.RangeSelect(0,1,0,26) 'A:Z列位置
RangeSelectsT(IEnumerableT, String) 二维数组按单元格地址形式选择区域得到新数组
arr.RangeSelect("A1:C3,A5:C6")
后续可跟随.Cocat竖向合并多区域,.ZIP横向合并多区域 方便选择不连续区域得到新数组
RangeSelectsT(T, String) 二维数组按单元格地址形式选择区域得到新数组
arr.RangeSelect("A1:C3,A5:C6")
后续可跟随.Cocat竖向合并多区域,.ZIP横向合并多区域 方便选择不连续区域得到新数组
RefreshExcel 刷新单元格对应的Excel对象 解决调试时Excel写入数据后界面不刷新的问题
RegGet 按正则表达式提取第一个命中的数据
RegMatchs 按正则表达式返回正则匹配集合
RegReplace 按正则表达式替换
RegTest 按正则表达式判断是否匹配
RemoveCols(IEnumerableObject, String) 二维数组集合删除指定列,从1开始数,使用逗号分隔的多列表达式"1,4-7,9"
RemoveColsT(T, String) 二维数组删除指定列,使用逗号分隔的多列表达式"1,4-7,9"
RemoveRows(IEnumerableObject, String) 二维数组集合删除指定行,从1开始数,使用逗号分隔的多行表达式"1,4-7,9"
RemoveRowsT(T, String) 二维数组删除指定行,使用逗号分隔的多行表达式"1,4-7,9"
RepeatT(IEnumerableT, Int32) 序列重复N次
arr.AsIEnumerable.Repeat(100) 原来的序列 重复100次得到一个大的新序列 主要用于测试
RepeatT(T, Int32) 二维数组重复N次
arr.Repeat(100) 原来的数组重复100次得到一个大的新数组 主要用于测试
ResizeImage 对图片进行缩放 设定新的尺寸 高度不设置的时候按宽度等比例缩放
RngCopyFormat 格式刷 快速复制格式
Round 按Excel表格函数中结果一致的四舍五入 因为默认的math.round是银行家算法
SafeUsedRange 通过有效行列最大值来确定使用区域 总是从A1开始算, UsedRange有时候不准
SelectT(IEnumerableT, String) 二维数组集合选择函数 F1表达式形式
arr.AsEnumerable.Select("F1,F3") '表示选取第1列和第3列
SelectT(IEnumerableIGroupingString, T, String) 紧跟二维数组集合GroupBy之后的多列汇总快速选择函数 单独数字选列 sum(1) 代表对1列求和
可选函数为 sum(F1),count(),max(F1),min(F1),average(F1),TextJoin(F1),qcTextJoin(F1)
以上函数中的F1代表第1列 按实际需要变化
arr.GroupBy(1).Select("F1,sum(F2),count(),TextJoin(F2,'+')")'内部双引号用单引号代替
SelectT(T, FuncObject, Object) 二维数组选择函数 最灵活的选择函数形式
arr.Select(Function(x) {x(0),x(1)})'注意选择函数返回值是一维数组类型
SelectT(T, String) 二维数组选择函数 F1表达式形式
arr.Select("F1,F3") '表示选取第1列和第3列
SelectRowsT(IEnumerableT, String) 二维数组按行切分数据 接受从1开始数的自由行号选择 "1,3-6,9"
SelectRowsT(T, String) 二维数组按行切分数据 接受从1开始数的自由行号选择 "1,3-6,9"
SequenceEqualT(IEnumerableT, IEnumerableT) 二维数组集合整体比较是否相等 按行为单位 系统默认的比较总是认为每行不相等
SequenceEqualT1, T2(IEnumerableT1, IEnumerableT2) 二维数组集合整体比较是否相等 按行为单位 系统默认的比较总是认为每行不相等
SequenceEqualT1, T2(T1, T2) 二维数组整体比较是否相等 按行为单位 系统默认的比较总是认为每行不相等
ShowAsVBAUserForm 像vba窗口一样显示为Excel的子窗体 标题栏样式会有所不同
ShowInCenter 当前窗体显示在一个指定窗体所在的屏幕中心
ShowVSTO VSTO中显示在Excel窗口所在的屏幕中心
ShuffleT(IEnumerableT) Linq增强扩展,序列随机洗牌
ShuffleT(T) Linq增强扩展,二维数组随机洗牌,返回二维数组集合
SkipT 跳过前N行
SkipWhileT 跳过第一个满足条件前的行
SliceT(IEnumerableT, Int32, Int32, Int32, Int32) 二维数组按行列偏移切分数据 类似于Excel函数offset 默认取出剩余所有行列
SliceT(T, Int32, Int32, Int32, Int32) 二维数组按行列偏移切分数据 类似于Excel函数offset 默认取出剩余所有行列
Sum(IEnumerableObject, String) Linq增强 二维数组集合选择列快速求和 忽略无效值,列选择为空则表示所有列求和
SumT(IEnumerableT) Linq增强 一维数组快速求和 忽略无效值
SumT(T, String) Linq增强 二维数组选择列快速求和 忽略无效值,列选择为空则表示所有列求和
Swap 交换2个变量
TakeT 取出前N行
TakeWhileT 取出第一个不满足条件前面的行
TextJoin(IEnumerableObject) Linq增强 对单列二维数组集合连接字符串,按逗号连接
希望以二维表形式输出多列字符串请用TextJoin2D
arr.AsEnumerable.Select(1).TextJoin
TextJoin(IEnumerableObject, Int32) Linq增强 对二维数组集合指定列连接字符串,默认逗号连接
希望以二维表形式输出多列字符串请用TextJoin2D
arr.AsEnumerable.Select(1).TextJoin
TextJoin(IEnumerableObject, String) Linq增强 对单列二维数组集合连接字符串,默认逗号连接
希望以二维表形式输出多列字符串请用TextJoin2D
arr.AsEnumerable.Select(1).TextJoin
TextJoin(IEnumerableObject, String, FuncObject, Object) 按列选择器函数的选择集连接字符串
TextJoin(IEnumerableObject, String, String) Linq增强 二维数组集合的元素选择列执行字符串连接
TextJoinT(IEnumerableT) Linq增强 对一维数组连接字符串,按逗号连接
arr.AsEnumerable.TextJoin
TextJoinT(IEnumerableT, String) Linq增强 对一维数组连接字符串,按指定符号连接
arr.AsEnumerable.TextJoin("+")
TextJoin2DT(T, String, Int32) 2维数组输出为多行表格形式的字符串 方便快速的调试查看结果
TextJoin2DT(IEnumerableT, String, Int32, String) 二维数组集合合并字符串输出 每行用换行符,一行内用空格
分隔符默认为空,会自动对齐每列宽度,数量大时计算较慢, 加速只需手动设定分隔符即可
ThenBy 二维数组集合ThenBy 紧跟在一个排序后的二次排序
arr.OrderBy(1).ThenBy(2)'先按第2列排序再按第1列排序
ThenByDescending 二维数组集合ThenByDescending,按F1表达式选择列
arr.OrderBy(1).ThenByDescending(2)'先按第2列排序再按第1列排序
ToArray1DT(IEnumerableT) 二维数组集合类型转为一维数组 从0下标
ToArray1DT(T) 二维数组转为一维数组 从0下标
ToArray2D(DataRow) Datetable的行数组转为二维数组
ToArray2D(DataRowCollection) Datetable的行集合转为2维数组方便输出到Excel区域
ToArray2D(IEnumerableDataRow) Datetable的行数组转为2维数组方便输出到Excel区域
ToArray2D(IEnumerableObject) 可枚举的对象集合转1下标的二维数组
ToArray2D(DataTable, Boolean) Datetable转为二维数组 可选是否带表头
ToArray2D(Range, Boolean) 单元格区域转数组 单个值也会装一个二维数组 不会弹出错误
可选参数 把空值nothing处理为字符串空 减少后续处理步骤
eg. Range("A1:A100").ToArray2D
ToArray2DT(T) 一维数组转为单行二维数组
ToArray2DT(IEnumerableT, Int32, Int32) 单行数组或者列表形式的可枚举对象,包含List转为二维数组结构
默认为1小标 可指定
ToArray2DT(IEnumerableT, Int32, Int32) 单行二维数组结构的list转为二维数组
ToArray2DT(IEnumerableListT, Int32, Int32) 嵌套List转为二维数组
ToArray2DT(T, Int32, Int32) 非1下标二维数组转为1下标 也可指定下标开始值
默认为1小标 可指定
ToDataTableT(T, Boolean) 为 二维数组转为DateTable 默认按F1形式写入表头 如果HasHeader=true则按第一行写入表头 且第一行不算数据
ToDataTableT(IEnumerableT, Boolean) 为 二维数组集合转为DateTable 默认按F1形式写入表头 如果HasHeader=true则按第一行写入表头 且第一行不算数据
ToDate 统一把数值型或者字符串日期转为标准日期 无法识别返回日期最小值
ToDictinory(IEnumerableObject, String) 二维数组集合整行去重生成字典
arr.AsEnumerable.ToDictinory 按整行作为关键字生成字典
ToDictinory(Object, String) 2维数组整行去重生成字典 可指定分隔符
arr.ToDictinory 按整行作为关键字生成字典
ToDictinoryBy(IEnumerableObject, String, String, String) 2维数组按指定列生成字典 结果集可指定列
arr.AsEnumerable.ToDictinoryBy("F1,F2","F1,F2,F4")
按 1列@^@2列 作为关键字生成字典 结果总是单行1维数组
ToDictinoryBy(Object, String, String, String) 2维数组按指定列生成字典 可指定结果组合形式
arr.ToDictinoryBy("F1,F2",Function(x) x.F1)
按 1列@^@2列 作为关键字生成字典 结果取第一列 相当于dic(key)=arr(i,1)
ToDictinoryByTResulet(IEnumerableObject, String, FuncObject, TResulet, String) 2维数组集合按指定列生成字典 可指定结果组合形式
arr.AsEnumerable.ToDictinoryBy("F1,F2",Function(x) x.F1)
按 1列@^@2列 作为关键字生成字典 结果取第一列 相当于dic(key)=arr(1,1)
ToDictinoryByTResulet(Object, String, FuncObject, TResulet, String) 2维数组按指定列生成字典 可指定结果组合形式
arr.ToDictinoryBy("F1,F2",Function(x) x.F1)
按 1列@^@2列 作为关键字生成字典 结果取第一列 相当于dic(key)=arr(i,1)
ToDictinoryByTSource, TKey(IEnumerableTSource, FuncTSource, TKey) Linq增强扩展按指定key的规则生成一个字典 value为集合中不重复的单行元素
ToDictinoryByTSource, TKey, TValue(IEnumerableTSource, FuncTSource, TKey, FuncTSource, TValue) Linq增强扩展按指定key的规则生成一个字典
value为选择器函数选出的结果,方便后续取数
ToDouble 转数值 主要是兼容日期型数据 按VBA规则转换
ToListT 二维数组生成的List集合 一行作为一个0下标的一维数组
ToList2D 二维数组生成的List集合 一行作为一个二维数组放入
ToListRowNumberT 把二维数组的行号依次装入一个List列表
ToLookp(IEnumerableObject, FuncObject, String) 二维数组集合去重生成1对多查询字典 每个key对应多行结构
arr.AsEnumerable.ToLookp("F1,F2") 按 1列@^@2列 作为关键字生成1对多查询字典
ToLookp(IEnumerableObject, String, String) 二维数组集合去重生成1对多查询字典 每个key对应多行结构
arr.AsEnumerable.ToLookp("F1,F2") 按 1列@^@2列 作为关键字生成1对多查询字典
ToLookpT(T, String, String) 2维数组去重生成1对多查询字典 每个key对应多行结构
arr.ToLookp(1) 按第1列 作为关键字生成字典
ToOADate 统一把日期类型或者 转换错误返回0
ToObjectT(IEnumerableT) 二维数组集合转为object类型
ToObjectT(T) 一维数组转为object类型
ToObjectT(T) 二维数组转为object类型
ToRange(Object, Range) 数组写入到单元格区域,单个格子自动扩充区域
ToRangeT(IEnumerableT, Range) 二维数组linq结果写入到单元格区域,单个格子自动扩充区域
ToRangeT(IEnumerableT, String) 二维数组集合写入到单元格区域,单个格子自动扩充区域
ToRangeT(ListListT, String) List嵌套集合写入到单元格区域,单个格子自动扩充区域
ToRangeT(T, Range) 一维数组写入单元格区域
ToRangeT(T, Range) 二维数组写入到单元格区域,单个格子自动扩充区域
ToRangeT(T, String) 一维数组写入到行区域
ToRangeT(T, String) 数组写入到单元格区域,单个格子自动扩充区域
ToStr 转字符串 空对象返回空字符串
ToVal 转数值 不成功返回0 日期值会按VBA规则转为对应的数值
UnionT(IEnumerableT, IEnumerableT) 两个一样类型二维数组集合求并集 结果对整行去重 用来覆盖默认方法
UnionT(T, Object) 二维数组垂直方向去重合并 可接受1个或者多个数组一起合并
arr.Union(brr,crr)
UnionT1, T2(IEnumerableT1, IEnumerableT2) 二维数组集合求并集 结果对整行去重
UnionT1, T2(T1, T2) 二维数组求并集 结果对整行去重
WhereT(T, FuncObject, Boolean) 二维数组Where筛选,使用条件函数函数,最灵活的形式
WhereT(T, FuncObject, Int32, Boolean) 二维数组Where筛选,带行号参数的筛选函数
WhereT(T, String, Boolean) 二维数组筛选函数 支持F1表达式形式
arr.where("F1>1")
WhereT(IEnumerableT, String, Boolean) 二维数组集合筛选函数 支持F1表达式形式 无需写Function
arr.AsEnumerable.where("F1>1")
Zip(IEnumerableObject, Int32) 横向扩展N倍
ZipT(IEnumerableT) 二维数组批量左右合并 传入多个数组
ZipT(T, Object) 二维数组批量左右合并 参数数组可传入多个数组
ZipT1, T2(IEnumerableT1, IEnumerableT2) 二维数组集合左右合并,要2个行数一样多
arr.AsEnumerable.Zip(brr.AsEnumerable)
ZipT1, T2(T1, T2) 2维数组左右合并,要2个行数一样多
arr.Zip(brr)
ZipRepeatT(IEnumerableT, Int32) 二维数组横向重复N次
arr.AsIEnumerable.RepeatZip(100) 原来的序列 向右重复100次得到一个大的新序列 主要用于测试
ZipRepeatT(T, Int32) 横向复制
过滤非数值T(IEnumerableT)  
过滤非数值T(IEnumerableT) 嵌套的一维数组 会摊平成普通一维数组 方便后续计算
列号转字母  
序号生成器(String) 按字符串形式的序号表达式得到列号数组
逗号分隔多组,每组里可用1-3表示1到3列
"1,3-5,6,8"结果为1,3,4,5,6,8 "A:C,E:E"'结果为1,2,3,5
序号生成器(Int32, Int32, Int32) 返回开始到结束的一维数组序列
字母转列号  

参见