![](/img/trans.png)
[英]OleDb not reading all rows from excel file, in spite of using IMEX=1
[英]Reading from excel file using oledb - empty strings
我正在使用oledb
從excel文件中讀取。
DataTable sheet1 = new DataTable();
string excelCS = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";" + "Extended Properties=\"Excel 12.0 Xml;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\"";
using (OleDbConnection connection = new OleDbConnection(excelCS))
{
connection.Open();
string selectSql = @"SELECT * FROM [Sheet1$]";
using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectSql, connection))
{
adapter.Fill(sheet1);
}
connection.Close();
}
但是文件的某些單元格存在問題。
對於某些單元格,我得到一個空值而不是文本。 我試圖將一些其他文本放入這些單元格但它不起作用 - 我仍然得到空字符串。 但刪除列后再插入我的應用程序獲取正確的單元格值。 重要的是問題不在於列中的所有單元格。
這是單元格格式的問題嗎? 此excel文件將由另一個系統生成,因此我無法手動修改它。
有人有什么問題有什么不對,我該怎么辦?
在連接字符串末尾使用IMEX = 1
。 這將解決您的問題。
始終使用IMEX = 1是檢索混合數據列的數據的更安全的方法。 ..”
請記住,當您使用Update
而不是Select
,有時使用IMEX會涉及一些錯誤。
使用此方法在c#中將Execel轉換為不帶空字符串的數據集
public static DataSet ConvertExcelToDataTable(string FileName)
{
DataSet ds = new DataSet();
string strConn = "";
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + FileName + ";Extended Properties=\"Excel 8.0; HDR=YES; IMEX=1;\"";
OleDbDataAdapter da = new OleDbDataAdapter
("SELECT * FROM [Sheet1$]", strConn);
da.Fill(ds);
return ds;
}
它將返回數據集。
我有這個問題。 我發現在返回空白值的單元格上,數據看起來像字符串,但其余數據看起來像數字,因此excel將字符串存儲在與數字不同的位置。 我將列格式更改為文本,並且拾取了所有數據。
此線程可能有助於更改格式: 將Excel列(或單元格)格式化為C#中的文本?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.