gpt4 book ai didi

c# - 从许多 Excel 文件(xls 格式)中读取数据的理想方法

转载 作者:太空宇宙 更新时间:2023-11-03 12:03:24 24 4
gpt4 key购买 nike

大家好,感谢您的关注。

(我已经用谷歌搜索了我的问题,请理解我的问题与那些要求读取不多的大型 excel 文件或写入 Excel 文件的最佳方法的问题不同,我只想阅读它们)

目前我正在开发一个小程序,它的目的可以定义为读取和分析 excel 格式的几到几百甚至可能几千个日志文件之间的任何地方,以收集统计结果,现在我知道了将日志保存为 Excel 的决定很奇怪,但我不是那个决定的人,这对我来说就是这样。

正如您可能猜到的那样,我打算做的是从每个 excel 文件中读取数据,并在处理之前将其作为 C# 模型类加载到内存中。我读取文件 excel 文件的方式基于我使用 Interop、打开 Excel 文件、从我需要的几个单元格中读取数据然后关闭该文件并移至下一个并让另一个线程处理处理的经验。

我已经尝试使用 Interop 测试我的方法,但速度非常慢。这是处理阅读的部分代码

                List<string> strings = new List<string>();
Microsoft.Office.Interop.Excel.Application xlApp = null;
Microsoft.Office.Interop.Excel.Workbook xlWorkBook = null;
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet = null;
Microsoft.Office.Interop.Excel.Range range = null;

try
{
string str;
int rCnt;
int cCnt;
int row = 0;
int column = 0;

xlApp = new Microsoft.Office.Interop.Excel.Application();
xlWorkBook = xlApp.Workbooks.Open(path, 0, true, 5, "", "", true,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

range = xlWorkSheet.UsedRange;
row = range.Rows.Count;
column = range.Columns.Count;
strings.Clear();

for (rCnt = 1; rCnt <= row; rCnt++)
{
for (cCnt = 1; cCnt <= column; cCnt++)
{
str = (range.Cells[rCnt, cCnt] as Microsoft.Office.Interop.Excel.Range).Value2?.ToString();
if (!string.IsNullOrEmpty(str))
strings.Add(str);
}
}

xlWorkBook.Close(true);
xlApp.Quit();
}
catch (Exception exception)
{
exception.Log();
}
finally
{
//https://www.add-in-express.com/creating-addins-blog/2013/11/05/release-excel-com-objects/
if (xlWorkBook != null) Marshal.FinalReleaseComObject(xlWorkBook);
if (xlWorkSheet != null) Marshal.FinalReleaseComObject(xlWorkSheet);
if (range != null) Marshal.FinalReleaseComObject(range);
if (xlApp != null) Marshal.FinalReleaseComObject(xlApp);
}
return strings.ToArray();

因此,为了解决我的问题,我希望找到过去遇到过类似问题并找到解决方法的人或回答我的一些问题:

  • 什么是读取多个 Excel 文件时最快的免费库(因为打开和关闭文件不会花费太长时间,也不会费心读取文件末尾或每次从头开始读取文件)得到一个细胞)
  • 如果我只是将整个 excel 文件加载到内存中并在内存中读取它是否会提高速度,是否有这样的库?
  • 如果我从 2 个不同的线程加载位于 2 个不同驱动器中的文件,是否会提高速度?

最佳答案

你能使用 nuget 包吗?如果是这样,请查看 ExcelDataReader 库及其 ExcelReaderFactory。 https://www.nuget.org/packages/ExcelDataReader

对于 xls 文件,我会使用 var excelReader = ExcelReaderFactory.CreateBinaryReader(stream),然后您可以使用读取器将其读入数据集 var data = reader.AsDataSet() ;

你也可以在读取数据集之前告诉它第一行是否包含列名,例如reader.IsFirstRowAsColumnNames = true;

如果您有 .xlsx 文件,您可以使用 ExcelReaderFactory.CreateOpenXmlReader(stream);

关于c# - 从许多 Excel 文件(xls 格式)中读取数据的理想方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56107723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com