将Excel范围添加到列表而不循环

时间:2016-07-12 09:57:38

标签: c#

 xlRangeDB = xlWorkSheetDB.get_Range("A2", "BA" + lRow.ToString());
                object[,] valueArray = xlRangeDB.Value2;

                List<string> inputData = new List<string>();
                inputData.AddRange(valueArray);

我想将Excel Range(xlRangeDB)转换为List。我无法找到直接的方法,因此我首先将excel范围转换为Array,然后尝试添加到List中。但它也不起作用。 实际上我有200多个excel文件,每个文件包含70000行和70列。我需要从这些文件中收集数据。在这种情况下循环将花费大量时间。任何建议。感谢

1 个答案:

答案 0 :(得分:0)

将它们转换为List将比仅使用object[,] 更慢,但是 如果你真的需要一个List:

var inputData = valueArray.Cast<object>().Select(Convert.ToString).ToList();

xlRangeDB.Copy(); // copies to the clipboard as TSV - rows separated by "\r\n" and cells separated by '\t'
var inputData = System.Windows.Forms.Clipboard.GetText().Split('\n', '\r', '\t').ToList();

Interop Excel通常是最慢​​方式来读取Excel文件!您可以尝试使用OleDb DataReader或Excel Data Reader代替Optimal way to Read an Excel file (.xls/.xlsx)

<强>更新

inputData.AddRange(valueArray.Cast<object>().Select(Convert.ToString));

但是你可能会在某些时候耗尽内存,所以你应该将值保存到文件或数据库中。