从DataTable导出Excel,并下载,删除Excel进程。

页面上加入一个button即可.
源代码如下:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Microsoft.Office.Interop.Excel;

namespace Test
{
    
/// <summary>
    
/// TestExcel 的摘要说明。
    
/// </summary>

    public class TestExcel : System.Web.UI.Page
    
{
        
protected System.Web.UI.WebControls.Button Button1;
    
        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
        }


        
#region Web 窗体设计器生成的代码
        
override protected void OnInit(EventArgs e)
        
{
            
//
            
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            
//
            InitializeComponent();
            
base.OnInit(e);
        }

        
        
/// <summary>
        
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
        
/// 此方法的内容。
        
/// </summary>

        private void InitializeComponent()
        
{    
            
this.Button1.Click += new System.EventHandler(this.Button1_Click);
            
this.Load += new System.EventHandler(this.Page_Load);

        }

        
#endregion


        
private void Button1_Click(object sender, System.EventArgs e)
        
{
            
try
            
{
                
string DownloadPath=Server.MapPath(".");    //副本的文件夹路径。
                
//副本的文件名。
                string TempFileName = DateTime.Now.ToString("yyyyMMdd"+ DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + ".XLS"
                
this.txtTempFileName.Text=TempFileName;
                
object missing = System.Reflection.Missing.Value;
                
object missing2 = System.Reflection.Missing.Value;
                ApplicationClass myExcel
=new ApplicationClass();

                Workbook myBook
=(Workbook)myExcel.Workbooks.Add(missing);
                Worksheet curSheet 
= (Worksheet)myBook.Sheets[1];
                
//设置Excel样式
                Range r1=(Range)myExcel.Cells[1,2];

                Range r2
=(Range)myExcel.Cells[3,4];

                r1.Font.Bold
=true;
                r2.Font.Bold
=true;


                
string DownloadFilePath=DownloadPath+"\\"+TempFileName;

                 System.Data.DataTable dt
=this.GetTable();
                
int rc=dt.Rows.Count;
                
//绘制边框
                Range rBorders=(Range)curSheet.get_Range(myExcel.Cells[7,1],myExcel.Cells[7+rc+1,10]);
                rBorders.Borders.LineStyle
=1;
                curSheet.get_Range(myExcel.Cells[
7,1],myExcel.Cells[7+rc+1,1]).Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;//设置左边线加粗
                curSheet.get_Range(myExcel.Cells[7,1],myExcel.Cells[7,10]).Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//设置设置上边线加粗
                curSheet.get_Range(myExcel.Cells[7+rc+1,1],myExcel.Cells[7+rc+1,10]).Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick;//设置下边线加粗
                curSheet.get_Range(myExcel.Cells[7,10],myExcel.Cells[7+rc+1,10]).Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;//设置右边线加粗



                
//Excel的表头信息
                myExcel.Cells[1,2]="表头信息";

                myExcel.Cells[
2,2]="New Added:" + DateTime.Now.ToString();
                myExcel.Cells[
3,4]="VENDOR  CODE  LIST  -  BY  PRODUCTS.";
                myExcel.Cells[
4,4]="****************************************";

                myExcel.Cells[
5,9]="DATE From:" + DateTime.Now.ToString();
                myExcel.Cells[
6,9]="DATE To:" + DateTime.Now.ToString();

                myExcel.Cells[
7,5]="PARTS SUPPLIER";

                
//设置Excel表列头
                myExcel.Cells[8,1]="Item";
                myExcel.Cells[
8,2]="OrgCode";
                myExcel.Cells[
8,3]="VendorCode";
                myExcel.Cells[
8,4]="VendorName";
                myExcel.Cells[
8,5]="A";
                myExcel.Cells[
8,6]="B";
                myExcel.Cells[
8,7]="C";
                myExcel.Cells[
8,8]="PayMentType";
                myExcel.Cells[
8,9]="TermsCode";
                myExcel.Cells[
8,10]="CreateTime";
                
//设置表头字体风格
                curSheet.get_Range(myExcel.Cells[7,1],myExcel.Cells[8,10]).Font.Bold=true;
                
int j=1;//j为总结的Item数目的变量
                int i=9;
                
while (i-8<=dt.Rows.Count)
                
{
                    myExcel.Cells[i,
1]=j.ToString();
                    myExcel.Cells[i,
2]=dt.Rows[i-9]["Name"].ToString().Trim();
                    myExcel.Cells[i,
3]=dt.Rows[i-9]["cost"].ToString().Trim();
                    myExcel.Cells[i,
4]=dt.Rows[i-9]["bug"].ToString().Trim();
                    myExcel.Cells[i,
5]="";
                    myExcel.Cells[i,
6]="";
                    myExcel.Cells[i,
7]="";
                    
                    
//设置颜色,否则日期显示成"######"格式。
                    Range rCol10=(Range)myExcel.Cells[i,10];
                    rCol10
=null;
                    
//从1开始循环
                    j++;
                    i
++;
                }
 

                myBook.Saved
=true;
                myBook.SaveAs(DownloadFilePath,missing2,
"","",false,false,XlSaveAsAccessMode.xlNoChange,1,false,missing,missing,missing);

                myBook.Close(
falsenull,null);
                myExcel.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
                myBook 
= null;
                myExcel 
= null;
                GC.Collect();
                
//下载文件
                HttpResponse response = HttpContext.Current.Response; 
                response.Clear();
                response.WriteFile(DownloadFilePath);
                
string httpHeader="attachment;filename=backup.Xls";
                response.AppendHeader(
"Content-Disposition", httpHeader);
                response.Flush();
                
//删除临时文件
                System.IO.File.Delete(DownloadFilePath);
                
                killExcelProcess();
            }

            
catch(Exception Ex)
            
{
                
throw Ex;
            }

        }

        
/// <summary>
        
/// 删除Excel进程
        
/// </summary>

        private void  killExcelProcess(){
            
//结束 Excel 进程
            foreach(System.Diagnostics.Process xlProcess in System.Diagnostics.Process.GetProcesses()){
                
if( xlProcess.ProcessName.ToUpper().Equals("EXCEL")) {
                    
//结束 excel 进程 
                    xlProcess.Kill();
                }

            }

                
        }

        
/// <summary>
        
/// 构建临时DataTable
        
/// </summary>
        
/// <returns></returns>

        private System.Data.DataTable GetTable()
        
{
            System.Data.DataTable dt 
= new System.Data.DataTable();
            dt.Columns.Add(
"Name");
            dt.Columns.Add(
"cost");
            dt.Columns.Add(
"bug");
            DataRow rw 
= dt.NewRow();
            rw[
"Name"]= "";
            rw[
"Cost"]= "12";
            rw[
"bug"]= "5";
            dt.Rows.Add(rw);
            rw 
= dt.NewRow();
            rw[
"Name"]= "";
            rw[
"Cost"]= "15";
            rw[
"bug"]= "2";
            dt.Rows.Add(rw);
            rw 
= dt.NewRow();
            rw[
"Name"]= "";
            rw[
"Cost"]= "8";
            rw[
"bug"]= "1";
            dt.Rows.Add(rw);
            
return dt;
        }

    }

}


 

原文地址:https://www.cnblogs.com/echo/p/161461.html