ASP.NET 读取EXCEL 单元格 无法读取 空值 不显示
2012-11-22 19:03
651 查看
读取excel时,某些单元格为空值
前些日子,写了一个excel导入数据库的共同batch,突然有一天发现当我修改excel某一列的值的时候突然读不出来值了.奇怪之余,做了一些调研.
原来如此:
当我们用olebb读取excel的时候,如果没有配置imex=1的属性,微软的处理机制是将列转换为同一类型来读取的.例如你在第一行写的数字格式,而第二行写的字符格式,就会出现某些列有值却读不出来.其实问题也很简单,如果知道问题所在的话.属性设置为"imex=1"即可
附以下参考:
string xlsdriver = @"provider=microsoft.jet.oledb.4.0;data source={0};extended properties='excel 8.0;imex=1';";
oledbconnection conn = new oledbconnection(string.format(xlsdriver, filename));
"hdr=yes;" indicates that the first row contains columnnames, not data.
"hdr=no;" indicates the opposite.
"imex=1;" tells the driver to always read "intermixed" (numbers, dates, strings etc) data columns as text. note that this option might affect excel sheet write access negative.
加上imex=1这个属性,excel单元格的值就会以文本型读取,避免由于数据类型不一致导致某些值读不出来的
找不到可安装的ISAM
在进行将Excel导入到应用程序时,提示“ 找不到可安装的ISAM “的解决方案:
1.连接字符串问
(1)HDR表示要把第一行作为数据还是作为列名,作为数据用HDR=no,作为列名用HDR=yes;通过Imex=1来把混合型作为文本型读取,避免 null值。
(2)左右两个单引号不能少
2.只需注册 Excel ISAM即可
在“运行”对话框中输入回车即可:Regsvr32 c:\WINDOWS\system32\msexcl40.dll
public DataSet ExcelReader(string excelName)
{
// 拼写连接字符串,打开连接
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + excelName + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
OleDbConnection objConn = new OleDbConnection(strConn);
objConn.Open();
// 取得Excel工作簿中所有工作表
DataTable schemaTable = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
OleDbDataAdapter sqlada = new OleDbDataAdapter();
DataSet ds = new DataSet();
// 遍历工作表取得数据并存入Dataset
foreach (DataRow dr in schemaTable.Rows)
{
try
{
string strSql = "Select * From [" + dr[2].ToString().Trim() + "]";
OleDbCommand objCmd = new OleDbCommand(strSql, objConn);
sqlada.SelectCommand = objCmd;
sqlada.Fill(ds, dr[2].ToString().Trim());
}
catch (Exception ex)
{
}
}
objConn.Close();
return ds;
}
前些日子,写了一个excel导入数据库的共同batch,突然有一天发现当我修改excel某一列的值的时候突然读不出来值了.奇怪之余,做了一些调研.
原来如此:
当我们用olebb读取excel的时候,如果没有配置imex=1的属性,微软的处理机制是将列转换为同一类型来读取的.例如你在第一行写的数字格式,而第二行写的字符格式,就会出现某些列有值却读不出来.其实问题也很简单,如果知道问题所在的话.属性设置为"imex=1"即可
附以下参考:
string xlsdriver = @"provider=microsoft.jet.oledb.4.0;data source={0};extended properties='excel 8.0;imex=1';";
oledbconnection conn = new oledbconnection(string.format(xlsdriver, filename));
"hdr=yes;" indicates that the first row contains columnnames, not data.
"hdr=no;" indicates the opposite.
"imex=1;" tells the driver to always read "intermixed" (numbers, dates, strings etc) data columns as text. note that this option might affect excel sheet write access negative.
加上imex=1这个属性,excel单元格的值就会以文本型读取,避免由于数据类型不一致导致某些值读不出来的
找不到可安装的ISAM
在进行将Excel导入到应用程序时,提示“ 找不到可安装的ISAM “的解决方案:
1.连接字符串问
Extended Properties='Excel 8.0;HDR=NO;IMEX=1' |
(2)左右两个单引号不能少
2.只需注册 Excel ISAM即可
在“运行”对话框中输入回车即可:Regsvr32 c:\WINDOWS\system32\msexcl40.dll
public DataSet ExcelReader(string excelName)
{
// 拼写连接字符串,打开连接
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + excelName + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
OleDbConnection objConn = new OleDbConnection(strConn);
objConn.Open();
// 取得Excel工作簿中所有工作表
DataTable schemaTable = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
OleDbDataAdapter sqlada = new OleDbDataAdapter();
DataSet ds = new DataSet();
// 遍历工作表取得数据并存入Dataset
foreach (DataRow dr in schemaTable.Rows)
{
try
{
string strSql = "Select * From [" + dr[2].ToString().Trim() + "]";
OleDbCommand objCmd = new OleDbCommand(strSql, objConn);
sqlada.SelectCommand = objCmd;
sqlada.Fill(ds, dr[2].ToString().Trim());
}
catch (Exception ex)
{
}
}
objConn.Close();
return ds;
}
相关文章推荐
- 解决ASP.NET 读取EXCEL 单元格 无法读取 空值 不显示
- ASP.NET实现读取Excel内容并在Web上显示
- ASP.NET中读取Excel内容,并显示在界面上
- 无法读取EXCEL中的数据单元格。有数据,但是读出来全是空值。
- 如何读取EXCEL 表格文件并使他在WEB网页上显示(使用ASP.NET)
- 无法读取Excel中的数据单元格。有数据,但是读出来全是空值
- asp.net 导出Table到Excel,数字前的加号无法显示的问题
- ASP.NET中读取Excel内容,并显示在界面上
- ASP.NET中读取excel内容,并显示在界面上
- ASP.net中读取excel内容,并显示在界面上
- 使用asp.net读取并显示excel数据
- ASP.NET中读取Excel内容,并显示在界面上
- asp.net 读取并显示excel数据的实现代码
- ASP.NET中读取excel内容,并显示在界面上
- asp.net 读取并显示excel数据的实现代码
- Asp.Net读取并显示Excel文件中的内容(OleDb方式)
- Asp.net 从Excel读取图片并保存,无法从内存读取图片,Excel组件和相关IIS的配置及解决办法
- ASP.NET中读取Excel内容,并显示在界面上
- ASP.NET实现读取Excel内容并在Web上显示
- asp.net 解决使用OLEDB导入excel数据时同时包含文本和数字的列无法正常读取情况