• C# ASP.NET 读取EXCEL 单元格 读取 空值 不显示


    跟大家分享一下,【摘自】:http://blog.csdn.net/li185416672/article/details/8213729

    读取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'  

    (1)HDR表示要把第一行作为数据还是作为列名,作为数据用HDR=no,作为列名用HDR=yes;通过Imex=1来把混合型作为文本型读取,避免 null值。

    (2)左右两个单引号不能少

    2.只需注册 Excel ISAM即可

    在“运行”对话框中输入回车即可:Regsvr32 c:WINDOWSsystem32msexcl40.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;
    }

  • 相关阅读:
    __declspec(noinline)
    硬件遮挡查询
    #pragma pack(*) 与 __declspec(align(*))
    Interesting. 如何获取一个数组长度
    __declspec(novtable)
    如何将一个float的小数部分保存成RGBA4个8位的byte
    plain old C++ functions, base模板函数与特化的模板函数
    LeetCode 5: Longest Palindromic Substring
    LeetCode 335:Self Crossing 自交
    LeetCode 649:Dota2 Senate
  • 原文地址:https://www.cnblogs.com/muruiqing/p/3791310.html
Copyright © 2020-2023  润新知