excel导入和导出

protected void btnUpload_Click(object sender, EventArgs e)    {        try        {
            if (hfdIsUpload.Value.Trim() == "")            {                hfdIsUpload.Value = "Upload";                fldUpload.Visible = true;            }            else            {                if (fldUpload.PostedFile.FileName.Length == 0)                {                    UIHelper.AlertMessage(uplMain, "Please Select File!");                    return;                }                DataSet ds = new DataSet();                string sheet = this.fldUpload.PostedFile.FileName.Substring(this.fldUpload.PostedFile.FileName.LastIndexOf("\\") + 1);                sheet = sheet.Substring(0, sheet.IndexOf("."));                string connectionstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fldUpload.PostedFile.FileName + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";                string str = "SELECT * FROM [Sheet1$]";
                OleDbConnection myconn = new OleDbConnection(connectionstring);                myconn.Open();                OleDbDataAdapter adp = new OleDbDataAdapter(str, myconn);                adp.Fill(ds, sheet);                myconn.Close();                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)                {                    VSDataTableGv = ds.Tables[0];                    gvDetail.DataSource = VSDataTableGv;                    gvDetail.DataBind();                }                hfdIsUpload.Value = "";                fldUpload.Visible = false;            }
        }        catch (Exception ex)        {            Com.Auo.SSP3g.Logs.Logger.GetLogger(System.Reflection.MethodBase.GetCurrentMethod()).Error(ex.ToString());            UIHelper.AlertMessage(this, ex.Message);        }    }

    protected void btnDownload_Click(object sender, EventArgs e)    {        //StringBuilder sb = new StringBuilder();        //StringWriter sw = new StringWriter(sb);        //HtmlTextWriter htw = new HtmlTextWriter(sw);
        //Page page = new Page();        //HtmlForm form = new HtmlForm();        //gdvHidden.DataSource = VSDataTableGv;        //gdvHidden.DataBind();
        //gdvHidden.EnableViewState = false;
        //page.EnableEventValidation = false;
        //page.DesignerInitialize();
        //page.Controls.Add(form);        //form.Controls.Add(gdvHidden);
        //page.RenderControl(htw);
        //Response.Clear();        //Response.Buffer = true;        //Response.ContentType = "application/vnd.ms-excel";        //Response.AddHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "_Detail.xls");        //Response.Charset = "UTF-8";        //Response.ContentEncoding = Encoding.Default;        //Response.Write(sb.ToString());        //Response.End();
        //导出到execl          try        {            ////实例化一个Excel.Application对象              //Excel.Application excel = new Excel.Application();
            ////让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写              //excel.Visible = false;
            ////新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错              //excel.Application.Workbooks.Add(true);
            ////生成Excel中列头名称              //for (int i = 0; i < VSDataTableGv.Columns.Count; i++)            //{            //    excel.Cells[1, i + 1] = VSDataTableGv.Columns[i].ColumnName;//输出DataGridView列头名              //}
            ////把DataGridView当前页的数据保存在Excel中              //if (VSDataTableGv.Rows.Count > 0)            //{            //    for (int i = 0; i < VSDataTableGv.Rows.Count; i++)//控制Excel中行,上下的距离,就是可以到Excel最下的行数,比数据长了报错,比数据短了会显示不完              //    {            //        for (int j = 0; j < VSDataTableGv.Columns.Count; j++)//控制Excel中列,左右的距离,就是可以到Excel最右的列数,比数据长了报错,比数据短了会显示不完              //        {            //            string str = VSDataTableGv.Rows[i][j].ToString();            //            excel.Cells[i + 2, j + 1] = "'" + str;//i控制行,从Excel中第2行开始输出第一行数据,j控制列,从Excel中第1列输出第1列数据,"'" +是以string形式保存,所以遇到数字不会转成16进制              //        }            //    }            //}            ////设置禁止弹出保存和覆盖的询问提示框              //excel.DisplayAlerts = false;            //excel.AlertBeforeOverwriting = false;
            ////保存工作簿,值为false会报错              //excel.Application.Workbooks.Add(true).Save();            ////保存excel文件              //excel.Save("D:" + "\\ttt.xls");
            ////确保Excel进程关闭              //excel.Quit();            //excel = null;
            //string s = "";            //Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();            //Microsoft.Office.Interop.Excel._Workbook book;            //Microsoft.Office.Interop.Excel._Worksheet sheet;            //book = (Microsoft.Office.Interop.Excel._Workbook)app.Workbooks.Open("d:\\test.xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,            //Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);            //sheet = (Microsoft.Office.Interop.Excel._Worksheet)book.Sheets[1];
            ////for (int i = 0; i < VSDataTableGv.Rows.Count; i++)            ////{            //try            //{            //    if (VSDataTableGv.Rows.Count > 0)            //    {            //        ////生成Excel中列头名称              //        for (int i = 0; i < VSDataTableGv.Columns.Count; i++)            //        {            //            excel.Cells[1, i + 1] = VSDataTableGv.Columns[i].ColumnName;//输出DataGridView列头名              //        }
            //        for (int i = 0; i < VSDataTableGv.Rows.Count; i++)//控制Excel中行,上下的距离,就是可以到Excel最下的行数,比数据长了报错,比数据短了会显示不完              //        {            //            for (int j = 0; j < VSDataTableGv.Columns.Count; j++)//控制Excel中列,左右的距离,就是可以到Excel最右的列数,比数据长了报错,比数据短了会显示不完              //            {            //                string str = VSDataTableGv.Rows[i][j].ToString();            //                sheet.Cells[i + 2, j + 1] = "'" + str;//i控制行,从Excel中第2行开始输出第一行数据,j控制列,从Excel中第1列输出第1列数据,"'" +是以string形式保存,所以遇到数字不会转成16进制              //            }            //        }            //    }            //    //sheet.Cells[i + 3, "A"] = "";            //    //sheet.Cells[i + 3, "B"] = VSDataTableGv.Rows[0];            //    //sheet.Cells[i + 3, "C"] = dv[i]["B"].ToString().Trim();            //}            //catch (Exception ex)            //{            //    HttpContext.Current.Response.Write("<script language='javascript'>alert('" + ex.Message + "')</script>");            //    book.Close(null, null, null);            //    app.Workbooks.Close();            //    app.Quit();            //    System.Runtime.InteropServices.Marshal.ReleaseComObject(app);            //    System.Runtime.InteropServices.Marshal.ReleaseComObject(book);            //    System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);            //    sheet = null;            //    book = null;            //    app = null;            //    GC.Collect();            //    HttpContext.Current.Response.Write("<script language='javascript'>alert('导出失败!')</script>");            //    return;            //}
            ////}            //book.Save();            //book.Close(null, null, null);            //app.Workbooks.Close();            //app.Quit();            //System.Runtime.InteropServices.Marshal.ReleaseComObject(app);            //System.Runtime.InteropServices.Marshal.ReleaseComObject(book);            //System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);            //sheet = null;            //book = null;            //app = null;            //GC.Collect();            //GC.Collect();            //GC.Collect();            //HttpContext.Current.Response.Write("<script language='javascript'>alert('导出成功!')</script>");            //HttpContext.Current.Response.Write("<script language='javascript'>window.open('../Template_temp/ExportTA.xls','_bank')</script>");
            GC.Collect();            Excel._Application excel;
            Excel._Workbook xBk;            Excel._Worksheet xSt;
            excel = new ExcelApplication();            xBk = excel.Workbooks.Add(true);            xSt = (Excel._Worksheet)xBk.ActiveSheet;
            ////生成Excel中列头名称              for (int i = 0; i < VSDataTableGv.Columns.Count; i++)            {                xSt.Cells[1, i + 1] = VSDataTableGv.Columns[i].ColumnName;//输出DataGridView列头名              }
            ////把DataGridView当前页的数据保存在Excel中              if (VSDataTableGv.Rows.Count > 0)            {                for (int i = 0; i < VSDataTableGv.Rows.Count; i++)//控制Excel中行,上下的距离,就是可以到Excel最下的行数,比数据长了报错,比数据短了会显示不完                  {                    for (int j = 0; j < VSDataTableGv.Columns.Count; j++)//控制Excel中列,左右的距离,就是可以到Excel最右的列数,比数据长了报错,比数据短了会显示不完                      {                        string str = VSDataTableGv.Rows[i][j].ToString();                        xSt.Cells[i + 2, j + 1] = "'" + str;//i控制行,从Excel中第2行开始输出第一行数据,j控制列,从Excel中第1列输出第1列数据,"'" +是以string形式保存,所以遇到数字不会转成16进制                      }                }            }
            //显示效果             excel.Visible = false;            xBk.SaveAs("d:\\TEST.xls ", Excel.XlFileFormat.xlExcel8, Missing.Value, Missing.Value, Missing.Value,                Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);            excel.Quit();            System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk);            System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);            System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt);            xBk = null;            excel = null;            xSt = null;            GC.Collect();        }        catch (Exception ex)        {            Com.Auo.SSP3g.Logs.Logger.GetLogger(System.Reflection.MethodBase.GetCurrentMethod()).Error(ex.ToString());            UIHelper.AlertMessage(this, ex.Message);        }    }
posted @ 2011-05-27 16:58  Jake.Xu  阅读(450)  评论(0编辑  收藏  举报