zoukankan      html  css  js  c++  java
  • C#操作excel

    今天项目中碰到了需要从excel中读取数据导入到一个dataSet里的问题。仔细研究了下,将碰到的问题与解决方案整理出来,供参考。

    完整的代码如下:

     1 // 上传文件的物理路径
     2 string strUpFilePath = string.Empty;
     3 // 产生文件名
     4 string strFileName = System.Guid.NewGuid().ToString() + ".xls";
     5 // 上传文件的物理路径
     6 strUpFilePath = Server.MapPath("..\\FullUpExcel\\") + strFileName;
     7 // 上传文件的真实路径
     8 FileUp.PostedFile.SaveAs(strUpFilePath);
     9 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strUpFilePath + ";" + "Extended Properties='Excel 8.0;HDR=yes'";
    10 OleDbConnection olecon = new OleDbConnection(strConn);
    11 olecon.Open();
    12 DataTable FromExcel = olecon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null,null, "Table" });
    13 string[] strTableNames = new string[FromExcel.Rows.Count];
    14 for (int i = 0; i < FromExcel.Rows.Count; i++)
    15 {
    16       strTableNames[i] = FromExcel.Rows[i]["TABLE_NAME"].ToString();
    17 }
    18 OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + strTableNames[0] + "] where not [name] is null", olecon);
    19 oada.Fill(ds);
    20 oada.Dispose();
    21 olecon.Close();

    在操作过程中,你可能会碰到各种问题。

    1、以上代码的第18行,我原来的做法是:

     OleDbDataAdapter oada = new OleDbDataAdapter("select * from [Person$] where not [name] is null", olecon);

    然后报错:

    这个问题很有可能是因为,有的用户拿到excel表后,会将你原来设定的sheet表名person改为自己想要的类型了,而代码中已将表名写死,程序当然会报错,这就希望无论用户输入什么表名,我们都可以将其读出来,这就产生了我们以上代码的12-18行,为这种问题的解决方案。

    2、关于第9行的理解。

     string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strUpFilePath + ";" + "Extended Properties='Excel 8.0;HDR=yes'";

    这里的strUpFilePath为目标文件的绝对物理路径,类似于 E:\..\..\...xls 的形式。
    这里的HDR可取的值有两种,YES/NO,分别代表的意思为表中第一行是否为标题行。这里的值设好后一定要注意与你的Excel表格的结构的一致性。

     参考文章:

    http://hi.baidu.com/softyimao/item/11009ac8c703c16ef6c95dc4

    http://blog.csdn.net/happy09li/article/details/7431967

  • 相关阅读:
    tomcat集群安装
    jdk
    docker容器间互联
    part1-vulkan开发环境搭建
    宝塔面板mysql表误操作导致原数据表被删恢复过程(附php代码正则插入id)
    php Redis定时执行或延迟(异步)
    Tp5 微信公众号 获取用户信息 EasyWeChat使用
    Fastadmin Area模型返回没值 没对象georadius 源码里面没有$redis->geoadd 解决办法
    [CF Contest] 1059 A~C
    [多校练习] 成都七中数据结构 Challenge 系列解题报告
  • 原文地址:https://www.cnblogs.com/huang1990/p/3104055.html
Copyright © 2011-2022 走看看