zoukankan      html  css  js  c++  java
  • C# 讀取Excel、xlsx文件Excel2007

    转载自:http://blog.csdn.net/rocky69/article/details/7259697

    NET 讀取Excel 2007的xlsx文件和讀取老的.xls文件是一樣的,都是用Oledb讀取,僅僅連接字符串不同而已。
    讀取xlsx 用的是Microsoft.Ace.OleDb.12.0;
    具體操作方法如下:

    public static DataTable GetExcelToDataTableBySheet(string FileFullPath, string SheetName)
    {
    //string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + FileFullPath + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'"; //此連接只能操作Excel2007之前(.xls)文件
    string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + FileFullPath + ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'"; //此連接可以操作.xls與.xlsx文件
    OleDbConnection conn = new OleDbConnection(strConn);
    conn.Open();
    DataSet ds = new DataSet();
    OleDbDataAdapter odda = new OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", SheetName), conn); //("select * from [Sheet1$]", conn);
    odda.Fill(ds, SheetName);
    conn.Close();
    return ds.Tables[0];

    }

    讀取Excel文件時,可能一個文件中會有多個Sheet,因此獲取Sheet的名稱是非常有用的。

    具體操作方法如下:

    //根據Excel物理路徑獲取Excel文件中所有表名

    public static String[] GetExcelSheetNames(string excelFile)
    {
    OleDbConnection objConn = null;
    System.Data.DataTable dt = null;

    try
    {
    //string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + excelFile + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'"; //此連接只能操作Excel2007之前(.xls)文件

    string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + excelFile + ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'"; //此連接可以操作.xls與.xlsx文件
    objConn = new OleDbConnection(strConn);
    objConn.Open();
    dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    if (dt == null)
    {
    return null;
    }
    String[] excelSheets = new String[dt.Rows.Count];
    int i = 0;
    foreach (DataRow row in dt.Rows)
    {
    excelSheets[i] = row["TABLE_NAME"].ToString();
    i++;
    }

    return excelSheets;
    }
    catch
    {
    return null;
    }
    finally
    {
    if (objConn != null)
    {
    objConn.Close();
    objConn.Dispose();
    }
    if (dt != null)
    {
    dt.Dispose();
    }
    }
    }

  • 相关阅读:
    hdu 2082 找单词
    hdu 2079 选课时间(题目已修改,注意读题)
    hdu 2073 无限的路
    hdu 2062 Subset sequence
    poj 2777 Count Color
    hdu 2067 小兔的棋盘
    卡特兰数
    poj3468
    hdu1394
    hdu1166(线段树之单点更新)
  • 原文地址:https://www.cnblogs.com/EggKiller/p/2879147.html
Copyright © 2011-2022 走看看