在c#中循环遍历excel文件

本文关键字:excel 文件 遍历 循环 | 更新日期: 2023-09-27 18:06:12

我有一个问题,通过一个excel文件循环。我希望能够创建一个自动代码,将处理多个excel文件

在每个文件中都有一个固定的头,所以"真正的"数据从第15行开始。

我想用"userange",但是我不太理解文档。

实际上,我有这个:

var excel = new Excel.Application();
var wkb = OpenBook(excel, _myExcelFile, true, false, false);
var sheet = wkb.Sheets["B.C"] as Excel.Worksheet;
var usedRange = sheet.UsedRange;
var i = 0;
foreach (Excel.Range row in sheet.UsedRange.Rows)
{
    i++;
    // I get data like this (for column 2 for example) : 
    // Convert.ToString(row.Cells[i, 2].Value);
}

问题是,我的excel文件有超过3000+行,但循环只返回1800+,我不知道为什么。

我认为"userange"函数有问题,但不知道原因。

我如何循环所有行在我的文件?

在c#中循环遍历excel文件

另一种选择是将excel转换为数据表-以下是未经测试的(我在这台PC上没有excel)

System.Data.OleDb.OleDbConnection MyConnection;
System.Data.DataTable DtSet;
System.Data.OleDb.OleDbDataAdapter MyCommand;
MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:''csharp.net-informations.xls';Extended Properties=Excel 8.0;");
MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection);
MyCommand.TableMappings.Add("Table", "TestTable");
DtSet = new System.Data.DataTable();
MyCommand.Fill(DtSet);
MyConnection.Close();

你可以在上面做linq操作,比如

var x = DTset.AsEnumberable().Where( r => r["My Field"].ToString() == "Pick me");

或者就像普通的数据表一样使用