我正在尝试尽可能高效地自动化Excel合并和转换(ETL之前)的过程。当前,我正在使用Interop Excel来读取电子表格中的多维数组:
Excel.Range range = ws.UsedRange;
object[,] worksheetData = (object[,]) range.Value2;
我知道不推荐使用Interop,但是我与其他库一直存在问题,另外还需要使用Interop将工作簿转换为那些库仍然可以使用的文件类型(大多数需要.xlsx和我正在使用的工作簿包含所有可能的文件类型)。
因此每个工作簿(我将合并10个工作簿)将作为其自己的2Darray读入。现在,我有了一个包含所有数据的2D数组,我只需要确定所需的目标列并按指定的顺序提取这些列(以便它们可以与其他数组组合/合并)。
是否有某种方法可以通过按指定顺序从每个多维数组中仅选择某些列来创建每个数组的副本,以便以后可以合并这些副本数组?
我不知道如何执行此操作,因此感谢所有技巧!
尝试一下:
var source = new int[,]
{
{ 1, 2, 3 },
{ 1, 2, 3 },
{ 1, 2, 3 },
{ 1, 2, 3 },
};
int[] third = Enumerable.Range(0, source.GetLength(0)).Select(x => source[x, 2]).ToArray();
它给出:
3333
除了谜题的Linq答案之外
您也可以使用Iterator扩展方法
public static class Extensions
{
public static IEnumerable<T> GetColumn<T>(this T[,] array, int col)
{
for (var i = 0; i < array.GetLength(0); i++)
yield return array[i, col];
}
}
用法
var cols = someArray.GetColumn(2);