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

  • 相关阅读:
    CF1539 VP 记录
    CF1529 VP 记录
    CF875C National Property 题解
    CF1545 比赛记录
    CF 1550 比赛记录
    CF1539E Game with Cards 题解
    CF1202F You Are Given Some Letters... 题解
    vmware Linux虚拟机挂载共享文件夹
    利用SOLR搭建企业搜索平台 之九(solr的查询语法)
    利用SOLR搭建企业搜索平台 之四(MultiCore)
  • 原文地址:https://www.cnblogs.com/huang1990/p/3104055.html
Copyright © 2011-2022 走看看