【发布时间】:2020-10-21 00:10:06
【问题描述】:
我遇到了这样的问题。我试图读取 Excel 文件数据,都是字符串。我使用了下面的代码。
try
{
var connectionString = string.Format( "Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"", session["FilePath"] );
using (var adapter = new System.Data.OleDb.OleDbDataAdapter( "SELECT * FROM [Sheet1$]", connectionString ))
{
var ds = new DataSet();
adapter.Fill( ds, "workBook" );
workBook = ds.Tables["workBook"];
}
if (workBook == null)
throw new Exception( "Could not load imported spreadsheet!" );
if (workBook.Rows.Count <= 0)
throw new Exception( "You are use an empty spreadsheet!" );
foreach (DataColumn column in workBook.Columns)
column.ColumnName = column.ColumnName.Trim();
}
catch (Exception exc)
{
}
一切正常,我得到了一个数据表,其中数据为字符串数据类型,并在程序级别解析它们(我在一列中只有混合数据类型)。但是,当单元格具有数字格式并且此单元格的值为 0589 时,我需要在单元格中添加前导撇号,因为 0 必须存在于 4 位数字中。当我尝试使用 IMEX 参数 1 读取此类 excel 文件时,我从该单元格中获得了 NULL 值。我不明白为什么,我把所有的数据都读成字符串数据类型。
【问题讨论】:
-
您是否尝试过使用其他提供商?
Microsoft.ACE.OLEDB.12.0;? -
不确定客户端计算机上是否安装了此提供程序。我只确定 Microsoft Jet 4.0。
-
嗯.. 好的,您是否尝试将数据加载到 ADO.Recordset 而不是数据表中?
-
不,我没试过。然后我可以将数据从 ADO.Recordset 导入到 Datatable 吗?因为我的代码正在处理数据表。
-
刚刚尝试将 excel 数据加载到 Recordset 并且相同的单元格返回 NULL。