asp.net里导出excel表方法汇总

1、由dataset生成

  1. 1、由dataset生成  
  2. public void CreateExcel(DataSet ds,string typeid,string FileName)  
  3.    {  
  4.    HttpResponse resp;  
  5.    resp = Page.Response;  
  6.    resp.ContentEncoding = System.Text.Encoding.GetEncoding(“GB2312”);  
  7.    resp.AppendHeader(“Content-Disposition”, “attachment;filename=” + FileName);     
  8.    string colHeaders= “”, ls_item=””;  
  9.    int i=0;  
  10.    //定义表对象与行对像,同时用DataSet对其值举办开头化  
  11.    DataTable dt=ds.Tables[0];  
  12.    DataRow[] myRow=dt.Select(“”);  
  13.    // typeid==”1″时导出为EXCEL格式文件;typeid==”2″时导出为XML格式文件  
  14.    if(typeid==”1″)  
  15.     {  
  16.     //取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符  
  17.     for(i=0;i     colHeaders+=dt.Columns[i].Caption.ToString()+”\t”;  
  18.     colHeaders +=dt.Columns[i].Caption.ToString() +”\n”;     
  19.     //向HTTP输出流中写入取得的数目音讯  
  20.     resp.Write(colHeaders);  
  21.     //逐行处理数据    
  22.     foreach(DataRow row in myRow)  
  23.      {  
  24.      //在当前行中,逐列得到数据,数据里面以\t分割,截至时加回车符\n  
  25.      for(i=0;i      ls_item +=row[i].ToString() + “\t”;       
  26.      ls_item += row[i].ToString() +”\n”;  
  27.      //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据      
  28.      resp.Write(ls_item);  
  29.      ls_item=””;  
  30.     }  
  31.    }  
  32.    else  
  33.     {  
  34.     if(typeid==”2″)  
  35.      {  
  36.      //从DataSet中直接导出XML数据同时写到HTTP输出流中  
  37.      resp.Write(ds.GetXml());  
  38.     }      
  39.    }  
  40.    //写缓冲区中的数据到HTTP头文件中  
  41.    resp.End();  
  42. }  
  43. 2、由datagrid生成  
  44. public void ToExcel(System.Web.UI.Control ctl)    
  45.    {  
  46.    HttpContext.Current.Response.AppendHeader(“Content-Disposition”,”attachment;filename=Excel.xls”);  
  47.    HttpContext.Current.Response.Charset =”UTF-8″;      
  48.    HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default;  
  49.    HttpContext.Current.Response.ContentType =”application/ms-excel”;//image/JPEG;text/HTML;image/GIF;vnd.msexcel/  
  50. msword  
  51.    ctl.Page.EnableViewState =false;     
  52.    System.IO.StringWriter tw = new System.IO.StringWriter() ;  
  53.    System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);  
  54.    ctl.RenderControl(hw);  
  55.    HttpContext.Current.Response.Write(tw.ToString());  
  56.    HttpContext.Current.Response.End();  
  57. }  
  58. 用法:ToExcel(datagrid1);  
  59. 3、这个用dataview  
  60. public void OutputExcel(DataView dv,string str)  
  61. {  
  62.    //  
  63.    // TODO: 在此地添加构造函数逻辑  
  64.    //  
  65.                            //dv为要出口到Excel的数量,str为标题名称  
  66.    GC.Collect();  
  67.    Application excel;// = new Application();  
  68.    int rowIndex=4;  
  69.    int colIndex=1;  
  70.    _Workbook xBk;  
  71.    _Worksheet xSt;  
  72.    excel= new ApplicationClass();  
  73.     
  74.    xBk = excel.Workbooks.Add(true);  
  75.      
  76.    xSt = (_Worksheet)xBk.ActiveSheet;  
  77.    //  
  78.    //取得标题  
  79.    //  
  80.    foreach(DataColumn col in dv.Table.Columns)  
  81.     {  
  82.     colIndex++;  
  83.     excel.Cells[4,colIndex] = col.ColumnName;  
  84.     xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[4,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置标题格  
  85. 式为居中对齐  
  86.    }  
  87.    //  
  88.    //取得表格中的数据  
  89.    //  
  90.    foreach(DataRowView row in dv)  
  91.     {  
  92.     rowIndex ++;  
  93.     colIndex = 1;  
  94.     foreach(DataColumn col in dv.Table.Columns)  
  95.      {  
  96.      colIndex ++;  
  97.      if(col.DataType == System.Type.GetType(“System.DateTime”))  
  98.       {  
  99.       excel.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString(“yyyy-MM-dd”);  
  100.       xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment =  
  101. XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐  
  102.      }  
  103.      else  
  104.       if(col.DataType == System.Type.GetType(“System.String”))  
  105.       {  
  106.       excel.Cells[rowIndex,colIndex] = “’”+row[col.ColumnName].ToString();  
  107.       xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment =  
  108. XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐  
  109.      }  
  110.      else  
  111.       {  
  112.       excel.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();  
  113.      }  
  114.     }  
  115.    }  
  116.    //  
  117.    //加载一个合计行  
  118.    //  
  119.    int rowSum = rowIndex + 1;  
  120.    int colSum = 2;  
  121.    excel.Cells[rowSum,2] = “合计”;  
  122.    xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,2]).HorizontalAlignment = XlHAlign.xlHAlignCenter;  
  123.    //  
  124.    //设置选中的有些的水彩  
  125.    //  
  126.    xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Select();  
  127.    xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//设置为浅肉色,共计有  
  128. 56种  
  129.    //  
  130.    //取得任何表格的题目  
  131.    //  
  132.    excel.Cells[2,2] = str;  
  133.    //  
  134.    //设置总体表格的题目格式  
  135.    //  
  136.    xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Bold = true;  
  137.    xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Size = 22;  
  138.    //  
  139.    //设置报表表格为最适于宽度  
  140.    //  
  141.    xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Select();  
  142.    xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Columns.AutoFit();  
  143.    //  
  144.    //设置总体表格的题目为跨列居中  
  145.    //  
  146.    xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Select();  
  147.    xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).HorizontalAlignment = XlHAlign.xlHAlignCenterAcrossSelection;  
  148.    //  
  149.    //绘制边框  
  150.    //  
  151.    xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Borders.LineStyle = 1;  
  152.    xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,2]).Borders[XlBordersIndex.xlEdgeLeft].Weight =  
  153. XlBorderWeight.xlThick;//设置左边线加粗  
  154.    xSt.get_Range(excel.Cells[4,2],excel.Cells[4,colIndex]).Borders[XlBordersIndex.xlEdgeTop].Weight =  
  155. XlBorderWeight.xlThick;//设置上面线加粗  
  156.    xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeRight].Weight =  
  157. XlBorderWeight.xlThick;//设置左侧线加粗  
  158.    xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeBottom].Weight =  
  159. XlBorderWeight.xlThick;//设置下边线加粗  
  160.    //  
  161.    //呈现效果  
  162.    //  
  163.    excel.Visible=true;  
  164.    //xSt.Export(Server.MapPath(“.”)  
  165. +”file://”+this.xlfile.Text+”.xls”,SheetExportActionEnum.ssExportActionNone,Microsoft.Office.Interop.OWC.SheetExportForma  
  166. t.ssExportHTML/);  
  167.    xBk.SaveCopyAs(Server.MapPath(“.”)+”file://”+this.xlfile.Text+”.xls/ “);  
  168.    ds = null;  
  169. bet体育在线,            xBk.Close(false, null,null);  
  170.      
  171.             excel.Quit();  
  172.             System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk);  
  173.             System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);  
  174.     System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt);  
  175.             xBk = null;  
  176.             excel = null;  
  177.    xSt = null;  
  178.             GC.Collect();  
  179.    string path = Server.MapPath(this.xlfile.Text+”.xls”);  
  180.    System.IO.FileInfo file = new System.IO.FileInfo(path);  
  181.    Response.Clear();  
  182.    Response.Charset=”GB2312″;  
  183.    Response.ContentEncoding=System.Text.Encoding.UTF8;  
  184.    // 添加头信息,为”文件下载/另存为”对话框指定默认文件名  
  185.    Response.AddHeader(“Content-Disposition”, “attachment; filename=” + Server.UrlEncode(file.Name));  
  186.    // 添加头音信,指定文件大小,让浏览器可以显示下载进度  
  187.    Response.AddHeader(“Content-Length”, file.Length.ToString());  
  188.      
  189.    // 指定重临的是一个不可以被客户端读取的流,必须被下载  
  190.    Response.ContentType = “application/ms-excel”;  
  191.      
  192.    // 把公文流发送到客户端  
  193.    Response.WriteFile(file.FullName);  
  194.    // 停止页面的履行  
  195.     
  196.    Response.End();  
  197. }  

public void CreateExcel(DataSet ds,string typeid,string FileName)  
  {
   HttpResponse resp;
   resp = Page.Response;
   resp.ContentEncoding = System.Text.Encoding.GetEncoding(“GB2312”);
   resp.AppendHeader(“Content-Disposition”, “attachment;filename=” +
FileName);    
   string colHeaders= “”, ls_item=””;
   int i=0;
 
   //定义表对象与行对像,同时用DataSet对其值举办先河化
   DataTable dt=ds.Tables[0];
   DataRow[] myRow=dt.Select(“”);  
   // typeid==”1″时导出为EXCEL格式文件;typeid==”2″时导出为XML格式文件
   if(typeid==”1″)
   {
   
//取得数据表各列标题,各标题之间以\t分割,最终一个列标题后加回车符
    for(i=0;i    
colHeaders+=dt.Columns[i].Caption.ToString()+”\t”;
    colHeaders +=dt.Columns[i].Caption.ToString() +”\n”;    
    //向HTTP输出流中写入取得的数额音信
    resp.Write(colHeaders);  
    //逐行处理多少   
    foreach(DataRow row in myRow)
    {
     //在当前行中,逐列拿到多少,数据里面以\t分割,停止时加回车符\n
     for(i=0;i      ls_item +=row[i].ToString() + “\t”;      
     ls_item += row[i].ToString() +”\n”;
     //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据     
     resp.Write(ls_item);
     ls_item=””;
    }
   }
   else
   {
    if(typeid==”2″)
    {  
     //从DataSet中一向导出XML数据同时写到HTTP输出流中
     resp.Write(ds.GetXml());
    }     
   }
   //写缓冲区中的数据到HTTP头文件中
   resp.End();
 
 
  }
2、由datagrid生成

public void ToExcel(System.Web.UI.Control ctl)   
  {
  
HttpContext.Current.Response.AppendHeader(“Content-Disposition”,”attachment;filename=Excel.xls”);
   HttpContext.Current.Response.Charset =”UTF-8″;     
   HttpContext.Current.Response.ContentEncoding
=System.Text.Encoding.Default;
   HttpContext.Current.Response.ContentType
=”application/ms-excel”;//image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword
   ctl.Page.EnableViewState =false;    
   System.IO.StringWriter  tw = new System.IO.StringWriter() ;
   System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter
(tw);
   ctl.RenderControl(hw);
   HttpContext.Current.Response.Write(tw.ToString());
   HttpContext.Current.Response.End();
  }
 
用法:ToExcel(datagrid1);
 

3、这个用dataview

public void OutputExcel(DataView dv,string str)
{
   //
   // TODO: 在这边添加构造函数逻辑
   //
                           //dv为要出口到Excel的数目,str为标题名称
   GC.Collect();
   Application excel;// = new Application();
   int rowIndex=4;
   int colIndex=1;
 
   _Workbook xBk;
   _Worksheet xSt;
 
   excel= new ApplicationClass();
   
   xBk = excel.Workbooks.Add(true);
    
   xSt = (_Worksheet)xBk.ActiveSheet;
 
   //
   //取得标题
   //
   foreach(DataColumn col in dv.Table.Columns)
   {
    colIndex++;
    excel.Cells[4,colIndex] = col.ColumnName;
   
xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[4,colIndex]).HorizontalAlignment
= XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐
   }
 
   //
   //取得表格中的数据
   //
   foreach(DataRowView row in dv)
   {
    rowIndex ++;
    colIndex = 1;
    foreach(DataColumn col in dv.Table.Columns)
    {
     colIndex ++;
     if(col.DataType == System.Type.GetType(“System.DateTime”))
     {
      excel.Cells[rowIndex,colIndex] =
(Convert.ToDateTime(row[col.ColumnName].ToString())).ToString(“yyyy-MM-dd”);
     
xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment
= XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐
     }
     else
      if(col.DataType == System.Type.GetType(“System.String”))
     {
      excel.Cells[rowIndex,colIndex] =
“‘”+row[col.ColumnName].ToString();
     
xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment
= XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐
     }
     else
     {
      excel.Cells[rowIndex,colIndex] =
row[col.ColumnName].ToString();
     }
    }
   }
   //
   //加载一个合计行
   //
   int rowSum = rowIndex + 1;
   int colSum = 2;
   excel.Cells[rowSum,2] = “合计”;
  
xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,2]).HorizontalAlignment
= XlHAlign.xlHAlignCenter;
   //
   //设置选中的一对的颜色
   //
  
xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Select();
  
xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Interior.ColorIndex
= 19;//设置为浅黑色,共计有56种
   //
   //取得任何表格的标题
   //
   excel.Cells[2,2] = str;
   //
   //设置总体表格的标题格式
   //
   xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Bold =
true;
   xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Size =
22;
   //
   //设置报表表格为最适于宽度
   //
  
xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Select();
  
xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Columns.AutoFit();
   //
   //设置总体表格的标题为跨列居中
   //
  
xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Select();
  
xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).HorizontalAlignment
= XlHAlign.xlHAlignCenterAcrossSelection;
   //
   //绘制边框
   //
  
xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Borders.LineStyle
= 1;
  
xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,2]).Borders[XlBordersIndex.xlEdgeLeft].Weight
= XlBorderWeight.xlThick;//设置左侧线加粗
  
xSt.get_Range(excel.Cells[4,2],excel.Cells[4,colIndex]).Borders[XlBordersIndex.xlEdgeTop].Weight
= XlBorderWeight.xlThick;//设置下面线加粗
  
xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeRight].Weight
= XlBorderWeight.xlThick;//设置左侧线加粗
  
xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeBottom].Weight
= XlBorderWeight.xlThick;//设置上边线加粗
   //
   //呈现效果
   //
   excel.Visible=true;
 
  
//xSt.Export(Server.MapPath(“.”)+”\\”+this.xlfile.Text+”.xls”,SheetExportActionEnum.ssExportActionNone,Microsoft.Office.Interop.OWC.SheetExportFormat.ssExportHTML);
   xBk.SaveCopyAs(Server.MapPath(“.”)+”\\”+this.xlfile.Text+”.xls”);
 
   ds = null;
            xBk.Close(false, null,null);
    
            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();
   string path = Server.MapPath(this.xlfile.Text+”.xls”);
 
   System.IO.FileInfo file = new System.IO.FileInfo(path);
   Response.Clear();
   Response.Charset=”GB2312″;
   Response.ContentEncoding=System.Text.Encoding.UTF8;
   // 添加头信息,为”文件下载/另存为”对话框指定默认文件名
   Response.AddHeader(“Content-Disposition”, “attachment; filename=” +
Server.UrlEncode(file.Name));
   // 添加头消息,指定文件大小,让浏览器可以显得下载进度
   Response.AddHeader(“Content-Length”, file.Length.ToString());
    
   // 指定重返的是一个无法被客户端读取的流,必须被下载
   Response.ContentType = “application/ms-excel”;
    
   // 把文件流发送到客户端
   Response.WriteFile(file.FullName);
   // 为止页面的履行
   
   Response.End();
}
 

相关文章