Tôi đang sử dụng trình quản lý dữ liệu OleDB để lấy dữ liệu từ các tệp excel của mình (nhưng vấn đề này cũng xảy ra trong DataTable.Fill). Vấn đề là tôi có một cột sẽ trả về chuỗi. Tất cả đều ổn và làm việc nhưng gần đây, một vấn đề xuất hiện, bởi vì các ô của cột có các định dạng khác nhau. Một số là số và các văn bản khác. Khi tôi kiểm tra bằng cách sử dụng dataReader.GetSchema() nó cho thấy rằng các cột trong câu hỏi được suy ra như kiểu System.String. Vấn đề với điều này là tất cả các ô không phải là văn bản được đặt ngay lập tức thành null.Vấn đề định dạng ô di động Excel
Có cách nào đề xuất cho người đọc rằng cột đó chỉ phân tích cú pháp các cột dưới dạng System.Object thay vì suy ra nó như System.String và bán tất cả các ô không phải chuỗi không?
Chuỗi kết nối Tôi đang sử dụng là:
chuỗi connString = "Provider = Microsoft.Jet.OLEDB.4.0;" + "Nguồn dữ liệu =" + tệpPath + ";" + "Thuộc tính mở rộng = Excel 8.0;";
và mã là:
using (OleDbConnection connection = new OleDbConnection(connString))
{
connection.Open();
foreach (string worksheetName in worksheetNames)
{
using (OleDbCommand command =
new OleDbCommand("SELECT * FROM [" + worksheetName + "]", connection))
{
TEntity entity;
using (OleDbDataReader dataReader = command.ExecuteReader())
{
while (dataReader.Read())
{
entity = GetDataFromDataTable(dataReader);
if (entity != null)
{
entityList.Add(entity);
}
}
}
}
}
connection.Close();
}
Cảm ơn bạn. IMEX đã hoạt động. – Jonn
FYI: MaxScanRows = 0 bị bỏ qua khi sử dụng nhà cung cấp Microsoft.Jet.OLEDB.4.0; nó vẫn chỉ quét 8 hàng đầu tiên. Nhà cung cấp Microsoft.ACE.OLEDB.12.0 dường như không gặp phải vấn đề tương tự. Xem phần trên _Rows to Scan_ trong [KB] (http://support.microsoft.com/default.aspx?scid=kb;en-us;257819) – codechurn