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

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

1、由dataset生成

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、使用微软的C++写的ACTIVEX控件:http://download.microsoft.com/download/OfficeXPDev/sample/1.0/WIN98MeXP/EN-US/Dsoframerctl.exe

3、由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);

4、这个用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();

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/111161.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • nv121_nvl2函数用法

    nv121_nvl2函数用法#include#include#include#include#includetypedefunsignedcharuint8_t; /**  *@paramsrcinputnv12rawdataarray  *@paramdstoutputnv12rawdataresult,  *thememor

  • 集合框架——HashTable和HashMap的区别[通俗易懂]

    集合框架——HashTable和HashMap的区别[通俗易懂]继承类不同HashTable继承Dictionary类,HashMap继承AbstractMap类线程安全级别不同HashTable是线程安全的类,每个public方法都有Synchronized修饰,HashMap不是线程安全的是否允许null的要求不同HashTable:key不允许为null,value不允许为nullHashMap:key允许为null,value允许为n…

  • Eclipse快捷键_10个最高效的快捷键

    1. ctrl+shift+r:打开资源    这可能是所有快捷键组合中最省时间的了。这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个字母,比如applic*.xml。美中不足的是这组快捷键并非在所有视图下都能用。2. ctrl+o:快速outline    如果想要查看当前类的方法或某个特定方法,但又不想把代码拉上拉下,也不想使用查找功能的话

  • ScheduledExecutorService 使用

    ScheduledExecutorService 使用ScheduledExecutorService,我平时没有用过,他的最大优点除了线程池的特性以外,可以实现循环或延迟任务。ScheduledExecutorService,是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。需要注意,只有当调度任务来的时候,ScheduledExecutorService才会真正启动一个线程,其余时间ScheduledExecutorService都是出于轮询任务的状态。先来个简单的延迟任务调…

  • 的一个折衷互联网工程开发效率和系统性能

    的一个折衷互联网工程开发效率和系统性能

  • 建立本地数据库

    建立本地数据库首先下载安装MySQL,参考:http://www.runoob.com/mysql/mysql-install.html,安装完成后直接打开(安装过程中要求设置用户名和密码,此时输入的密码要记住,后面要使用)然后下载NavicatforMySQL,本人觉得这个比较简单,很适合初学者,安装完成之后点击File(文件)–新建文件,连接名可不填,主机名:localhost,用户名是安装MySQL…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号