亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#自定義導出數據到Excel的類實例

2020-01-24 02:06:11
字體:
來源:轉載
供稿:網友

本文實例講述了C#自定義導出數據到Excel的類。分享給大家供大家參考。具體如下:

C#自定義Excel操作類,可以用于將DataTable導出到Excel文件,從Excel文件讀取數據。

using System;using System.IO;using System.Data;using System.Collections;using System.Data.OleDb;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace DotNet.Utilities{  /// <summary>  /// Excel操作類  /// </summary>  /// Microsoft Excel 11.0 Object Library  public class ExcelHelper  {    #region 數據導出至Excel文件    /// </summary>    /// 導出Excel文件,自動返回可下載的文件流    /// </summary>    public static void DataTable1Excel(System.Data.DataTable dtData)    {      GridView gvExport = null;      HttpContext curContext = HttpContext.Current;      StringWriter strWriter = null;      HtmlTextWriter htmlWriter = null;      if (dtData != null)      {        curContext.Response.ContentType = "application/vnd.ms-excel";        curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");        curContext.Response.Charset = "utf-8";        strWriter = new StringWriter();        htmlWriter = new HtmlTextWriter(strWriter);        gvExport = new GridView();        gvExport.DataSource = dtData.DefaultView;        gvExport.AllowPaging = false;        gvExport.DataBind();        gvExport.RenderControl(htmlWriter);        curContext.Response.Write("<meta http-equiv=/"Content-Type/" content=/"text/html;charset=gb2312/"/>" + strWriter.ToString());        curContext.Response.End();      }    }    /// <summary>    /// 導出Excel文件,轉換為可讀模式    /// </summary>    public static void DataTable2Excel(System.Data.DataTable dtData)    {      DataGrid dgExport = null;      HttpContext curContext = HttpContext.Current;      StringWriter strWriter = null;      HtmlTextWriter htmlWriter = null;      if (dtData != null)      {        curContext.Response.ContentType = "application/vnd.ms-excel";        curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;        curContext.Response.Charset = "";        strWriter = new StringWriter();        htmlWriter = new HtmlTextWriter(strWriter);        dgExport = new DataGrid();        dgExport.DataSource = dtData.DefaultView;        dgExport.AllowPaging = false;        dgExport.DataBind();        dgExport.RenderControl(htmlWriter);        curContext.Response.Write(strWriter.ToString());        curContext.Response.End();      }    }    /// <summary>    /// 導出Excel文件,并自定義文件名    /// </summary>    public static void DataTable3Excel(System.Data.DataTable dtData, String FileName)    {      GridView dgExport = null;      HttpContext curContext = HttpContext.Current;      StringWriter strWriter = null;      HtmlTextWriter htmlWriter = null;      if (dtData != null)      {        HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8);        curContext.Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls");        curContext.Response.ContentType = "application nd.ms-excel";        curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;        curContext.Response.Charset = "GB2312";        strWriter = new StringWriter();        htmlWriter = new HtmlTextWriter(strWriter);        dgExport = new GridView();        dgExport.DataSource = dtData.DefaultView;        dgExport.AllowPaging = false;        dgExport.DataBind();        dgExport.RenderControl(htmlWriter);        curContext.Response.Write(strWriter.ToString());        curContext.Response.End();      }    }    /// <summary>    /// 將數據導出至Excel文件    /// </summary>    /// <param name="Table">DataTable對象</param>    /// <param name="ExcelFilePath">Excel文件路徑</param>    public static bool OutputToExcel(DataTable Table, string ExcelFilePath)    {      if (File.Exists(ExcelFilePath))      {        throw new Exception("該文件已經存在!");      }      if ((Table.TableName.Trim().Length == 0) || (Table.TableName.ToLower() == "table"))      {        Table.TableName = "Sheet1";      }      //數據表的列數      int ColCount = Table.Columns.Count;      //用于記數,實例化參數時的序號      int i = 0;      //創建參數      OleDbParameter[] para = new OleDbParameter[ColCount];      //創建表結構的SQL語句      string TableStructStr = @"Create Table " + Table.TableName + "(";      //連接字符串      string connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFilePath + ";Extended Properties=Excel 8.0;";      OleDbConnection objConn = new OleDbConnection(connString);      //創建表結構      OleDbCommand objCmd = new OleDbCommand();      //數據類型集合      ArrayList DataTypeList = new ArrayList();      DataTypeList.Add("System.Decimal");      DataTypeList.Add("System.Double");      DataTypeList.Add("System.Int16");      DataTypeList.Add("System.Int32");      DataTypeList.Add("System.Int64");      DataTypeList.Add("System.Single");      //遍歷數據表的所有列,用于創建表結構      foreach (DataColumn col in Table.Columns)      {        //如果列屬于數字列,則設置該列的數據類型為double        if (DataTypeList.IndexOf(col.DataType.ToString()) >= 0)        {          para[i] = new OleDbParameter("@" + col.ColumnName, OleDbType.Double);          objCmd.Parameters.Add(para[i]);          //如果是最后一列          if (i + 1 == ColCount)          {            TableStructStr += col.ColumnName + " double)";          }          else          {            TableStructStr += col.ColumnName + " double,";          }        }        else        {          para[i] = new OleDbParameter("@" + col.ColumnName, OleDbType.VarChar);          objCmd.Parameters.Add(para[i]);          //如果是最后一列          if (i + 1 == ColCount)          {            TableStructStr += col.ColumnName + " varchar)";          }          else          {            TableStructStr += col.ColumnName + " varchar,";          }        }        i++;      }      //創建Excel文件及文件結構      try      {        objCmd.Connection = objConn;        objCmd.CommandText = TableStructStr;        if (objConn.State == ConnectionState.Closed)        {          objConn.Open();        }        objCmd.ExecuteNonQuery();      }      catch (Exception exp)      {        throw exp;      }      //插入記錄的SQL語句      string InsertSql_1 = "Insert into " + Table.TableName + " (";      string InsertSql_2 = " Values (";      string InsertSql = "";      //遍歷所有列,用于插入記錄,在此創建插入記錄的SQL語句      for (int colID = 0; colID < ColCount; colID++)      {        if (colID + 1 == ColCount) //最后一列        {          InsertSql_1 += Table.Columns[colID].ColumnName + ")";          InsertSql_2 += "@" + Table.Columns[colID].ColumnName + ")";        }        else        {          InsertSql_1 += Table.Columns[colID].ColumnName + ",";          InsertSql_2 += "@" + Table.Columns[colID].ColumnName + ",";        }      }      InsertSql = InsertSql_1 + InsertSql_2;      //遍歷數據表的所有數據行      for (int rowID = 0; rowID < Table.Rows.Count; rowID++)      {        for (int colID = 0; colID < ColCount; colID++)        {          if (para[colID].DbType == DbType.Double && Table.Rows[rowID][colID].ToString().Trim() == "")          {            para[colID].Value = 0;          }          else          {            para[colID].Value = Table.Rows[rowID][colID].ToString().Trim();          }        }        try        {          objCmd.CommandText = InsertSql;          objCmd.ExecuteNonQuery();        }        catch (Exception exp)        {          string str = exp.Message;        }      }      try      {        if (objConn.State == ConnectionState.Open)        {          objConn.Close();        }      }      catch (Exception exp)      {        throw exp;      }      return true;    }    /// <summary>    /// 將數據導出至Excel文件    /// </summary>    /// <param name="Table">DataTable對象</param>    /// <param name="Columns">要導出的數據列集合</param>    /// <param name="ExcelFilePath">Excel文件路徑</param>    public static bool OutputToExcel(DataTable Table, ArrayList Columns, string ExcelFilePath)    {      if (File.Exists(ExcelFilePath))      {        throw new Exception("該文件已經存在!");      }      //如果數據列數大于表的列數,取數據表的所有列      if (Columns.Count > Table.Columns.Count)      {        for (int s = Table.Columns.Count + 1; s <= Columns.Count; s++)        {          Columns.RemoveAt(s);  //移除數據表列數后的所有列        }      }      //遍歷所有的數據列,如果有數據列的數據類型不是 DataColumn,則將它移除      DataColumn column = new DataColumn();      for (int j = 0; j < Columns.Count; j++)      {        try        {          column = (DataColumn)Columns[j];        }        catch (Exception)        {          Columns.RemoveAt(j);        }      }      if ((Table.TableName.Trim().Length == 0) || (Table.TableName.ToLower() == "table"))      {        Table.TableName = "Sheet1";      }      //數據表的列數      int ColCount = Columns.Count;      //創建參數      OleDbParameter[] para = new OleDbParameter[ColCount];      //創建表結構的SQL語句      string TableStructStr = @"Create Table " + Table.TableName + "(";      //連接字符串      string connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFilePath + ";Extended Properties=Excel 8.0;";      OleDbConnection objConn = new OleDbConnection(connString);      //創建表結構      OleDbCommand objCmd = new OleDbCommand();      //數據類型集合      ArrayList DataTypeList = new ArrayList();      DataTypeList.Add("System.Decimal");      DataTypeList.Add("System.Double");      DataTypeList.Add("System.Int16");      DataTypeList.Add("System.Int32");      DataTypeList.Add("System.Int64");      DataTypeList.Add("System.Single");      DataColumn col = new DataColumn();      //遍歷數據表的所有列,用于創建表結構      for (int k = 0; k < ColCount; k++)      {        col = (DataColumn)Columns[k];        //列的數據類型是數字型        if (DataTypeList.IndexOf(col.DataType.ToString().Trim()) >= 0)        {          para[k] = new OleDbParameter("@" + col.Caption.Trim(), OleDbType.Double);          objCmd.Parameters.Add(para[k]);          //如果是最后一列          if (k + 1 == ColCount)          {            TableStructStr += col.Caption.Trim() + " Double)";          }          else          {            TableStructStr += col.Caption.Trim() + " Double,";          }        }        else        {          para[k] = new OleDbParameter("@" + col.Caption.Trim(), OleDbType.VarChar);          objCmd.Parameters.Add(para[k]);          //如果是最后一列          if (k + 1 == ColCount)          {            TableStructStr += col.Caption.Trim() + " VarChar)";          }          else          {            TableStructStr += col.Caption.Trim() + " VarChar,";          }        }      }      //創建Excel文件及文件結構      try      {        objCmd.Connection = objConn;        objCmd.CommandText = TableStructStr;        if (objConn.State == ConnectionState.Closed)        {          objConn.Open();        }        objCmd.ExecuteNonQuery();      }      catch (Exception exp)      {        throw exp;      }      //插入記錄的SQL語句      string InsertSql_1 = "Insert into " + Table.TableName + " (";      string InsertSql_2 = " Values (";      string InsertSql = "";      //遍歷所有列,用于插入記錄,在此創建插入記錄的SQL語句      for (int colID = 0; colID < ColCount; colID++)      {        if (colID + 1 == ColCount) //最后一列        {          InsertSql_1 += Columns[colID].ToString().Trim() + ")";          InsertSql_2 += "@" + Columns[colID].ToString().Trim() + ")";        }        else        {          InsertSql_1 += Columns[colID].ToString().Trim() + ",";          InsertSql_2 += "@" + Columns[colID].ToString().Trim() + ",";        }      }      InsertSql = InsertSql_1 + InsertSql_2;      //遍歷數據表的所有數據行      DataColumn DataCol = new DataColumn();      for (int rowID = 0; rowID < Table.Rows.Count; rowID++)      {        for (int colID = 0; colID < ColCount; colID++)        {          //因為列不連續,所以在取得單元格時不能用行列編號,列需得用列的名稱          DataCol = (DataColumn)Columns[colID];          if (para[colID].DbType == DbType.Double && Table.Rows[rowID][DataCol.Caption].ToString().Trim() == "")          {            para[colID].Value = 0;          }          else          {            para[colID].Value = Table.Rows[rowID][DataCol.Caption].ToString().Trim();          }        }        try        {          objCmd.CommandText = InsertSql;          objCmd.ExecuteNonQuery();        }        catch (Exception exp)        {          string str = exp.Message;        }      }      try      {        if (objConn.State == ConnectionState.Open)        {          objConn.Close();        }      }      catch (Exception exp)      {        throw exp;      }      return true;    }    #endregion    /// <summary>    /// 獲取Excel文件數據表列表    /// </summary>    public static ArrayList GetExcelTables(string ExcelFileName)    {      DataTable dt = new DataTable();      ArrayList TablesList = new ArrayList();      if (File.Exists(ExcelFileName))      {        using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" + ExcelFileName))        {          try          {            conn.Open();            dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });          }          catch (Exception exp)          {            throw exp;          }          //獲取數據表個數          int tablecount = dt.Rows.Count;          for (int i = 0; i < tablecount; i++)          {            string tablename = dt.Rows[i][2].ToString().Trim().TrimEnd('$');            if (TablesList.IndexOf(tablename) < 0)            {              TablesList.Add(tablename);            }          }        }      }      return TablesList;    }    /// <summary>    /// 將Excel文件導出至DataTable(第一行作為表頭)    /// </summary>    /// <param name="ExcelFilePath">Excel文件路徑</param>    /// <param name="TableName">數據表名,如果數據表名錯誤,默認為第一個數據表名</param>    public static DataTable InputFromExcel(string ExcelFilePath, string TableName)    {      if (!File.Exists(ExcelFilePath))      {        throw new Exception("Excel文件不存在!");      }      //如果數據表名不存在,則數據表名為Excel文件的第一個數據表      ArrayList TableList = new ArrayList();      TableList = GetExcelTables(ExcelFilePath);      if (TableName.IndexOf(TableName) < 0)      {        TableName = TableList[0].ToString().Trim();      }      DataTable table = new DataTable();      OleDbConnection dbcon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFilePath + ";Extended Properties=Excel 8.0");      OleDbCommand cmd = new OleDbCommand("select * from [" + TableName + "$]", dbcon);      OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);      try      {        if (dbcon.State == ConnectionState.Closed)        {          dbcon.Open();        }        adapter.Fill(table);      }      catch (Exception exp)      {        throw exp;      }      finally      {        if (dbcon.State == ConnectionState.Open)        {          dbcon.Close();        }      }      return table;    }    /// <summary>    /// 獲取Excel文件指定數據表的數據列表    /// </summary>    /// <param name="ExcelFileName">Excel文件名</param>    /// <param name="TableName">數據表名</param>    public static ArrayList GetExcelTableColumns(string ExcelFileName, string TableName)    {      DataTable dt = new DataTable();      ArrayList ColsList = new ArrayList();      if (File.Exists(ExcelFileName))      {        using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" + ExcelFileName))        {          conn.Open();          dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, TableName, null });          //獲取列個數          int colcount = dt.Rows.Count;          for (int i = 0; i < colcount; i++)          {            string colname = dt.Rows[i]["Column_Name"].ToString().Trim();            ColsList.Add(colname);          }        }      }      return ColsList;    }  }}

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97久久精品人人澡人人爽缅北| 欧美日韩激情视频8区| 国产精品com| 一区二区三区国产在线观看| 欧美激情日韩图片| 欧美激情免费看| 国产午夜精品美女视频明星a级| 国产亚洲免费的视频看| 亚洲女在线观看| 成人夜晚看av| 日韩黄色在线免费观看| 久久久久久国产精品| 久久精品亚洲94久久精品| 精品国产乱码久久久久酒店| 国产ts人妖一区二区三区| 国产噜噜噜噜久久久久久久久| 欧美日韩国产va另类| 国内免费精品永久在线视频| 日韩av在线网址| 欧美日韩亚洲一区二区| 尤物九九久久国产精品的分类| 亚洲国产精品热久久| 91亚洲精品视频| www.99久久热国产日韩欧美.com| 91久久久久久久久久| 国产欧美精品一区二区| 国产伊人精品在线| 最近2019中文字幕一页二页| 日韩精品在线私人| 中文字幕久久久av一区| 国产一区二区动漫| 日韩电影中文字幕av| 亚洲欧美日韩国产中文专区| 亚洲大胆人体av| 久久久久久91香蕉国产| 91最新国产视频| 亚洲男人天堂2023| 日韩欧美国产成人| 欧美激情免费观看| 国产999精品视频| 性视频1819p久久| 成人午夜激情免费视频| 久久精品亚洲热| 中文字幕亚洲天堂| 欧美xxxx综合视频| 久久久久久久久中文字幕| 午夜精品久久久久久久久久久久久| 97精品视频在线观看| 欧美精品一二区| 萌白酱国产一区二区| 久久亚洲欧美日韩精品专区| 日韩女在线观看| 91精品在线观看视频| 亚洲免费av片| 国产欧美日韩专区发布| 亚洲精品国产suv| 亚洲精品小视频在线观看| 国产日韩在线看片| 日韩精品视频在线播放| 日韩av免费观影| 亚洲免费视频一区二区| 欧美日韩爱爱视频| 欧美成人精品激情在线观看| 国产精品第2页| 在线性视频日韩欧美| 欧美性色xo影院| 91po在线观看91精品国产性色| 久久久女人电视剧免费播放下载| 欧美贵妇videos办公室| 久久国产精品久久久久| 欧美视频在线观看免费| 亚洲性日韩精品一区二区| 午夜精品国产精品大乳美女| 亚洲精品免费在线视频| 国产免费一区二区三区在线观看| 日韩精品中文字幕有码专区| 国产精品男人的天堂| 日韩精品免费在线视频观看| 狠狠干狠狠久久| 久久精品国产欧美亚洲人人爽| 国产精品嫩草影院一区二区| 日韩av在线免费播放| 欧美视频在线免费| 久久久人成影片一区二区三区| 国产成人av网| 欧美专区第一页| 欧美激情网站在线观看| 国产日韩欧美91| 成人免费视频97| 夜夜嗨av色一区二区不卡| 欧美猛少妇色xxxxx| 在线成人激情视频| 日韩久久精品成人| 777精品视频| 国产成人av在线播放| 中文字幕一区二区三区电影| 国产日韩换脸av一区在线观看| 亚洲欧洲在线免费| 欧美激情欧美激情| 久久精品久久久久久国产 免费| 亚洲97在线观看| 久久伊人免费视频| 久久久免费观看| 亚洲国产成人精品久久| www.xxxx精品| 日韩成人av在线| 伊人青青综合网站| 日韩欧美精品网址| 一区二区三区动漫| 亚洲国产免费av| 欧美性xxxxx极品娇小| 性欧美亚洲xxxx乳在线观看| 92版电视剧仙鹤神针在线观看| 日韩高清中文字幕| 国产精品亚洲自拍| 亚洲精品天天看| 自拍视频国产精品| 最近2019好看的中文字幕免费| 美日韩丰满少妇在线观看| 51精品国产黑色丝袜高跟鞋| 欧美性极品少妇精品网站| 亚洲国产精品系列| 久久久国产视频| 亚洲va男人天堂| 日韩电影免费观看中文字幕| 欧美另类在线观看| 日韩欧美亚洲范冰冰与中字| 亚洲综合在线做性| 亚洲精品在线不卡| 亚洲精品一二区| 欧美极品xxxx| 成人春色激情网| 国产一区二区黑人欧美xxxx| 欧洲午夜精品久久久| 欧美巨猛xxxx猛交黑人97人| 色妞一区二区三区| 超碰97人人做人人爱少妇| 大荫蒂欧美视频另类xxxx| 91精品在线国产| 最好看的2019的中文字幕视频| 精品国内亚洲在观看18黄| 亚洲国产成人精品久久久国产成人一区| 午夜精品久久久久久久99黑人| 欧美激情在线播放| 55夜色66夜色国产精品视频| 久久久人成影片一区二区三区观看| 一本一道久久a久久精品逆3p| 国产精品视频精品| 国产成人福利夜色影视| xxxxx成人.com| 欧美xxxx综合视频| 国产精品爱久久久久久久| 日韩国产精品视频| 91精品国产电影| 国产精品69久久久久| 亚洲国产精品99久久| 色综合久久久久久中文网| 日本高清视频一区| 色播久久人人爽人人爽人人片视av| 国产欧美精品一区二区三区-老狼| 91精品久久久久久久| 欧美成人精品影院| 欧美国产日韩一区二区| 国产欧美一区二区三区久久人妖|