我正在使用OLEDB来连接和读取Excel电子表格中的数据.我有IMEX ="1",一切正常.我的问题是我正在读取的工作表可能以几个空行开头,空行数很重要.例如,如果我正在读取5x5网格,如:
- - - - -
- - - - -
2 - 3 3 8
- - - - -
- - 5 2 2
Run Code Online (Sandbox Code Playgroud)
其中' - '代表一个空单元格.前两行是空的这一事实很重要.网格的大小是动态的.我的代码似乎忽略了第一个空行.但处理第4行的空行确定.
如何使用OLEDB计算Excel工作表开头的空行数?
我被限制使用OLEDB,如果我没有,我就不会;-)
using (var adapter = new OleDbDataAdapter("SELECT * FROM [" + worksheetName + "]", connString)) {
var ds = new DataSet();
adapter.Fill(ds, "FareChart");
table = ds.Tables["FareChart"];
}
Run Code Online (Sandbox Code Playgroud)
连接字符串:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Windows\\TEMP\\e1842f90-74a7-42f2-a6fa-208396a1072e;Extended Properties=\"Excel 8.0;IMEX=1;HDR=No\""
Run Code Online (Sandbox Code Playgroud)
UPDATE
在连接字符串中指定'.xls'作为文件扩展名修复了此问题,并在开始时正确读取空行.
我认为你的问题出在你的连接字符串上。我测试了下面的代码,它对我有用:
DataSet Contents = new DataSet();
using (OleDbDataAdapter adapter = new OleDbDataAdapter("select FirstName,LastName,Email,Mobile from [" + mySheet + "]", connection))
{
adapter.Fill(Contents,"MyTable");
}
foreach (DataRow content in Contents.Tables["MyTable"].Rows)
{
if (content[0].ToString() == "" && content[0].ToString() == "" && content[0].ToString() == "" && content[0].ToString() == "")
{
Console.WriteLine("Empty Row");
}
else
{
Console.WriteLine(content[0] + " | " + content[1] + " | " + content[2] + " | " + content[3]);
}
}
Run Code Online (Sandbox Code Playgroud)
我的连接字符串是:
string cnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\Untitled 1.xls\";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
Run Code Online (Sandbox Code Playgroud)