zoukankan      html  css  js  c++  java
  • Asp.net的对Excel文档的导入导出操作

    刚刚初入职场,在休闲的时间写下了项目中用到的对Excel文档操作的方法以及总结,多的不说,直接上代码

    public static void CreateExcel(DataSet ds, string FileName)

            {

                //resp = Page.Response;

                HttpContext.Current.Response.Clear();

                HttpContext.Current.Response.Buffer = true;

                HttpContext.Current.Response.Charset = "UTF-8";

                HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;

                HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls");

                HttpContext.Current.Response.ContentType = "application/ms-excel";

                string colHeaders = "", ls_item = "";

                int i = 0;

                //定¨义?表括?对?象ó与?行D对?像?,?同?时骸?用?DataSet对?其?值μ进?行D初?始?化ˉ

                System.Data.DataTable dt = ds.Tables[0];

                DataRow[] myRow = dt.Select("");

                //取?得?数簓据Y表括?各÷列�标括?题琣,?各÷标括?题琣之?间?以? 分?割?,?最?后ó一?个?列�标括?题琣后ó加ó回?车μ符?

                for (i = 0; i < dt.Columns.Count - 1; i++)

                    colHeaders += dt.Columns[i].Caption.ToString() + " ";

                colHeaders += dt.Columns[i].Caption.ToString() + " ";

                //向òHTTP输?出?流ⅰ?中D写′入?取?得?的?数簓据Y信?息¢

                HttpContext.Current.Response.Write(colHeaders);

                //逐e行D处鋦理え?数簓据Y  

                foreach (DataRow row in myRow)

                {

                    //在ú当獭?前°行D中D,?逐e列�获?得?数簓据Y,?数簓据Y之?间?以? 分?割?,?结á束?时骸?加ó回?车μ符?

                    for (i = 0; i < dt.Columns.Count - 1; i++)

                        ls_item += row[i].ToString() + " ";

                    ls_item += row[i].ToString() + " ";

                    //当獭?前行D数簓据Y写′入?HTTP输?出?流ⅰ?,?并¢且ò置?空?ls_item以?便?下?行D数簓据Y    

                    HttpContext.Current.Response.Write(ls_item);

                    ls_item = "";

                }

                //写′缓o冲?区?中D的?数簓据Y到?HTTP头�?文?件t中D

                HttpContext.Current.Response.End();

            }

    方法2:NPIO导出Excel数据。这种方式方便快捷,要引入第三方的NPIO.dll的文件,下载地址http://npoi.codeplex.com/releases/view/38113   

      protected void getExcel(DataTable dt, string FileName)

            {

                NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();

                NPOI.SS.UserModel.ISheet sheet = book.CreateSheet("Sheet1");

                NPOI.SS.UserModel.IRow headerrow = sheet.CreateRow(0);

                for (int i = 0; i < dt.Columns.Count; i++)

                {

                    headerrow.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);

                }

                for (int i = 0; i < dt.Rows.Count; i++)

                {

                    NPOI.SS.UserModel.IRow row2 = sheet.CreateRow(i + 1);

                    for (int j = 0; j < dt.Columns.Count; j++)

                        row2.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());

                }

                //写′入到客户端

                System.IO.MemoryStream ms = new System.IO.MemoryStream();

                book.Write(ms);

                Response.AddHeader("Content-Disposition", string.Format("attachment;filename=" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls"));

                Response.BinaryWrite(ms.ToArray());

                book = null;

                ms.Close();

                ms.Dispose();

            }

    直接在点击事件调用即可

    二,导入Excel数据

    导入Excel需要引用微软官方的OleDb驱动

    protected void btnUpload_Click(object sender, EventArgs e)

            {

                if (txtFilePath.HasFile)

                {

                    OleDbConnection conn = new OleDbConnection();

                    OleDbCommand cmd = new OleDbCommand();

                    OleDbDataAdapter da = new OleDbDataAdapter();

                    DataSet ds = new DataSet();

                    string query = null;

                    string connString = "";

                    //string strFileName = DateTime.Now.ToString("ddMMyyyy_HHmmss");

                    string strFileType = System.IO.Path.GetExtension(txtFilePath.FileName).ToString().ToLower();

                    if (strFileType == ".xls" || strFileType == ".xlsx")

                    {

                        txtFilePath.SaveAs(Server.MapPath("~/upload/" + strFileType));

                    }

                    string strNewPath = Server.MapPath("~/upload/" + strFileType);

                    if (strFileType.Trim() == ".xls")

                    {

                        connString = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + strNewPath + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";

                    }

                    else if (strFileType.Trim() == ".xlsx")

                    {

                        connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strNewPath + ";Extended Properties="Excel 12.0;HDR=Yes;IMEX=2"";

                    }

                    query = "SELECT * FROM [Sheet1$]";

                    conn = new OleDbConnection(connString);

                    if (conn.State == ConnectionState.Closed) conn.Open();

                    cmd = new OleDbCommand(query, conn);

                    da = new OleDbDataAdapter(cmd);

                    ds = new DataSet();

                    da.Fill(ds);

              da.Dispose();

                    conn.Close();

                    conn.Dispose();

    注意:如果使用上述的第一种方式先导出Excel,然后在导入Excel,会报错,因为第一种方式导出的不是标准的Excel,是html的方式导出的,第二种NPIO导出,这个是标准的Excel数据。

  • 相关阅读:
    POJ3345 Bribing FIPA(树形DP)
    POJ3294 Life Forms(二分+后缀数组)
    ZOJ1027 Travelling Fee(DP+SPFA)
    POJ2955 Brackets(区间DP)
    POJ1655 Balancing Act(树的重心)
    POJ2774 Long Long Message(后缀数组)
    URAL1297 Palindrome(后缀数组)
    SPOJ705 SUBST1
    POJ3261 Milk Patterns(二分+后缀数组)
    POJ1743 Musical Theme(二分+后缀数组)
  • 原文地址:https://www.cnblogs.com/yafuture/p/4235598.html
Copyright © 2011-2022 走看看