在c#

时间:2015-08-03 16:19:53

标签: c# excel foreach

我在循环浏览excel文件时遇到问题。 我希望能够创建一个可以处理多个excel文件的自动代码

每个文件中都有一个修复标题,因此"真实"数据从第15行开始。

我试图使用" usedRange"但我真的不懂文档。

实际上,我有这个:

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+,我无法理解为什么。

我认为" UsedRange"存在问题。功能,但不知道为什么。

如何在文件中循环所有行?

1 个答案:

答案 0 :(得分:0)

另一种选择是将你的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");

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