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

  • 相关阅读:
    奇偶游戏(带权并查集)
    银河英雄传说(边带权并查集)
    程序自动分析(并查集+离散化)
    关于树状数组的小总结(树状数组)
    你能回答这些问题吗 (线段树)
    Phython 3 笔记3 —— 类,库与文件的读写
    Phython 3 笔记2 —— 基础语法
    Phython 3 笔记1 —— 基础容器
    CRJ巨佬gjd算法伪代码
    CRJ巨佬的gjd算法模板
  • 原文地址:https://www.cnblogs.com/huang1990/p/3104055.html
Copyright © 2011-2022 走看看