Dot-Net

Excel 單元格值被 OLEDB-provider 截斷

  • March 14, 2013

我正在使用 OleDbConnection 類從 Excel 2000/2003 工作簿中檢索數據:

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                         "Data Source=" + filename + ";" +
                         "Extended Properties=\"Excel 8.0;IMEX=1\";";

OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();

// code to get table name from schema omitted

var dataAdapter = new OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", name),connection);
var myDataSet = new DataSet();
dataAdapter.Fill(myDataSet, "ExcelInfo");

現在事實證明,工作表中長度大於 255 個字元的單元格將被截斷。這是 Microsoft.Jet.OLEDB 提供程序的限制,還是我可以做些什麼?

任何人?

Excel 的 OLEDB 提供程序將嘗試根據前 8 行數據自動確定 DataTypes,這可以使用連接字元串中的 HDR=Yes/No 屬性進行設置。此外,還有多種類型可以應用於文本列。備忘錄類型包含超過 255 個字元,因此如果前 8 行都沒有,那麼它將錯誤地設置數據類型。

更改此設置的方法是更改​​名為 TypeGuessRows 的系統資料庫設置,如下所述:Microsoft Support

注意:TypeGuessRows 鍵的有效值範圍是 0 到 16。但是,如果值為 0,則掃描的源行數為 16384。因此,如果您有一個非常大的文件,請確保最大的行在前。

引用自:https://stackoverflow.com/questions/898513