【问题标题】:faster Excel file access in C#在 C# 中更快地访问 Excel 文件
【发布时间】:2011-11-05 01:33:46
【问题描述】:

我的 C# 应用程序从 excel 文件中获取大量数据并对其进行处理,然后将其写回文件中。

问题是从 Excel 文件加载数据时,需要一些时间(大约 7000 个 Excel 字段需要 30 秒)

我想让它更快,有什么方法可以让它在相当长的时间内更快?

我用来获取数据的代码是:

streamReader = new StreamReader(@"ExcelPath.txt");
string path = streamReader.ReadLine();

//An Excel Application ==(contains)==> [Many] Excel WorkBook ==(contains)==>[Many] Excel WorkSheets==(contains)==>[Many] Ranges
Microsoft.Office.Interop.Excel.Application excelapp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook myworkbook = excelapp.Workbooks.Open(path, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true);

Microsoft.Office.Interop.Excel.Sheets myworksheets = myworkbook.Worksheets;
Microsoft.Office.Interop.Excel.Worksheet myworksheet =myworksheets.get_Item(1);
Microsoft.Office.Interop.Excel.Range range = myworksheet.UsedRange;

string[] data = new string[range.Rows.Count];
int start = 0;
for (start = 3; start < range.Rows.Count; start++)
{
    Microsoft.Office.Interop.Excel.Range myrange = myworksheet.get_Range("O" + start.ToString(), System.Reflection.Missing.Value);
    data[start] = myrange.Text;
    }

【问题讨论】:

  • 哪个版本的 Excel?查看您如何从文本文件中读取路径,您是否只运行了一个 Excel 实例?它不在服务器上运行是吗?查看此 KB 以查看其他问题的 support.microsoft.com/kb/257757 - 否则 Range 方法与 Cell 是 WTG
  • @JeremyThompson Excel 2010,是的,一个 Excel 实例,不,不在服务器上...

标签: c# .net performance excel optimization


【解决方案1】:

我已经很久没有用 Excel 做过任何事情了......但几年前,我们能够加快一些从 Excel 读取数据的过程,读取 单元格范围一个时间进入一个数组(而不是一个单元一个单元)。

从 C# 到 Excel 的每次读取操作都必须通过 COM,这非常昂贵。如果您设法减少需要从 Excel 读取的次数(例如通过一次读取多个值),您应该会看到速度显着提高。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-01-20
  • 2011-06-18
  • 1970-01-01
  • 2016-02-21
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 2018-05-31
相关资源
最近更新 更多