我在循环浏览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"存在问题。功能,但不知道为什么。
如何在文件中循环所有行?
答案 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();
然后你可以用
之类的东西来做linqvar x = DTset.AsEnumberable().Where( r => r["My Field"].ToString() == "Pick me");
或者像普通数据表一样使用它