我正在使用OLEDB连接并读取Excel电子表格中的数据。我有IMEX =“1”,一切正常。我的问题是我正在读取的工作表可能以几个空行开头,空行数很重要。例如,如果我正在阅读5x5网格,如:
- - - - -
- - - - -
2 - 3 3 8
- - - - -
- - 5 2 2
其中' - '表示空单元格。前两行是空的这一事实很重要。网格的大小是动态的。我的代码似乎忽略了第一个空行。但处理第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"];
}
连接字符串:
"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\""
更新
指定'.xls'作为连接字符串中的文件扩展名修复此问题并正确读取开头的空行。
答案 0 :(得分:1)
我认为您的问题在于您的连接字符串。我测试了以下代码,它对我有用:
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]);
}
}
我的连接字符串是:
string cnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\Untitled 1.xls\";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
答案 1 :(得分:1)
检查下面的代码:它将返回空行..
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source = " + strFileName + "; Extended Properties = \"Excel 8.0;HDR=NO;IMEX=1\";"); /*for office 2007 connection*/
conn.Open();
string strQuery = "SELECT * FROM [" + Table + "]";
System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(strQuery, conn);
System.Data.DataTable ExcelToDataTable = new System.Data.DataTable();
adapter.Fill(ExcelToDataTable);
DT = ExcelToDataTable.Copy();
int count = DT.Rows.Cast<DataRow>().Where(row => row.ItemArray.All(field => field is System.DBNull || string.Compare((field as string).Trim(), string.Empty) == 0)).ToList().Count();
答案 2 :(得分:0)
正如@Knvn所述
您需要在连接字符串中使用文件名指定文件扩展名.xls
。