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

  • 相关阅读:
    刚才遇到了关于C#使用外部DLL函数上的char*的问题。
    重新整理过的 《C#编码规范》
    晕,完全晕了。
    Microsoft Visual Studio 2010 支持html5和css3的补丁包
    [mysql] 修改root密码和查看连接数
    Visual Studio统计有效代码行数
    [c#] 邮件附件为中文名的bug
    游戏名词解释
    [SVN] 以下后缀文件不应该提交入库
    [c#] 语言新特性
  • 原文地址:https://www.cnblogs.com/huang1990/p/3104055.html
Copyright © 2011-2022 走看看