【问题标题】:Add Excel Range to Lists without looping将 Excel 范围添加到列表而不循环
【发布时间】:2016-07-12 09:57:38
【问题描述】:
 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 范围转换为数组,然后尝试添加到列表中。但它也不起作用。 实际上我有 200 多个 excel 文件,每个文件包含 70000 行和 70 列。我需要从这些文件中收集数据。在这种情况下循环将花费大量时间。任何建议。谢谢

【问题讨论】:

  • 提取这些数据后,您将其放在哪里?
  • 我将对数据进行切片和切块,然后根据它们的标准放回不同的报告 Excel 文件。
  • 如果可能的话,您肯定会想要研究流式传输,您最终可能会在内存中存储所有 70000 个文本行时内存使用量非常高。但这将是您的全部判断。
  • 流式传输是指 OleDb DataReader 还是 Excel Data Reader?
  • 我的意思是,当您从 excel 电子表格中读取一个项目时,对其进行处理,然后将其存储回 excel 电子表格。如果可能,按项目计算。这样你就不会试图填满你的记忆

标签: c#


【解决方案1】:

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

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));

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

【讨论】:

  • 非常感谢,其实我不知道可以容纳200个excel文件数据的数组大小。使用 Object[,] 调整大小并将数据添加到数组 200 次我不知道会起作用。所有 Excel 文件均为 (.xlsb) 格式。请指教。
  • 这很完美,但是我如何保存数据并通过循环遍历许多工作簿来添加更多数据。
猜你喜欢
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多