ASP.NET导出Excel文件

第一种最常见,并且最简单的方式,直接把GridView导出,导出格式为文本表格形式。

protected void btnSaveExcel_Click(object sender, EventArgs e)
        {
            string FileName = "xxx";
            System.IO.StringWriter objSW = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter objHTW = new System.Web.UI.HtmlTextWriter(objSW);
            try
            {
                //設定格式
                Response.Clear();
                Response.Buffer = true;
                Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", FileName));
                Response.ContentType = "application/ms-excel";// "application/vnd.ms-excel";
                Response.Charset = "UTF-8";
                this.EnableViewState = false;                this.GridViewData.RenderControl(objHTW);
                Response.Write(objSW.ToString());
                Response.End();
            }
            catch (Exception ex)
            {
                string aa = ex.Message.ToString();
            }
            finally
            {
                objSW.Close();
                objSW = null;
                objHTW.Close();
                objHTW = null;
            }
        }
///必须重载VerifyRenderingInServerForm, 不然会报错
        public override void VerifyRenderingInServerForm(Control control)
        {
            //base.VerifyRenderingInServerForm(control);
        }

第二种:不用安装Excel,生成原生Excel格式方法

如果你和我一样要实现不调用Excel组件实现Excel数据导出的话,那我严重向你推荐MyXls,MyXls是用C#开源项目,可以应用于asp.net 或者 .net应用程序上。它根据微软公开的Excle文档格式文件(BIFF),以二进制格式直接生成excel文档,支持Excel versions 97 - 2007 。这意味着你可以不用在服务器上安装office就能够以excle格式输出数据库中存储的数据了,这对于许多项目来说都是很有用的

第一步,当然是下在MyXls,地址:http://sourceforge.net/projects/myxls/

第二步,添加引用org.in2bits.MyXls.dll

第三步,实现数据导出,我这里是将一个DataTable作为数据导出,导出后内容格式和DataTable一致,具体代码如下:

        private void Output(DataTable dt)
        {
            org.in2bits.MyXls.XlsDocument doc = new org.in2bits.MyXls.XlsDocument();
            doc.FileName = DateTime.Now.ToString().Replace("-", "").Replace(":", "").Replace(" ", "") + ".xls";//excel文件名称
            org.in2bits.MyXls.Worksheet sheet = doc.Workbook.Worksheets.AddNamed("sheet1");//Excel工作表名称
            org.in2bits.MyXls.Cells cells = sheet.Cells;
            int colnum = dt.Columns.Count;//获取DataTable列数

            for (int i = 0; i < colnum; i++)
            {
                cells.Add(1, (i + 1), dt.Columns[i].Caption.ToString());//导出DataTable列名
            }
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < colnum; j++)
                {
                    cells.Add((i + 2), (j + 1), dt.Rows[i][j].ToString());
                }
            }
            //doc.Save(@"D:\");  //保存到指定位置
            doc.Send();//把写好的excel文件输出到客户端
        }

生成多个WorkSheet

XlsDocument xls = new XlsDocument();//新建一个xls文档
xls.FileName = "MyXlsDemo.xls";//设定Excel文件名 

xls.SummaryInformation.Author = "Terry Li"; //填加Excel文件作者信息
xls.SummaryInformation.Subject = "MyXls Demo";//填加文件主题信息
xls.DocumentSummaryInformation.Company = "in2bits.org";//填加文件公司信息 

string sheetName = "第一个Sheet Demo";#region    

string sheetName = "第一个Sheet Demo";
Worksheet sheet = xls.Workbook.Worksheets.Add(sheetName);//填加名为"第一个Sheet Demo"的sheet页
Cells cells = sheet.Cells;//Cells实例是sheet页中单元格(cell)集合
//单元格1-base
Cell cell = cells.Add(2, 3, "三");//设定第2行,第3例单元格的值
cell.HorizontalAlignment = HorizontalAlignments.Centered;//设定文字居中
cell.Font.FontName = "行楷";//设定字体
cell.Font.Height = 30 * 20;//设定字大小(字体大小是以 1/20 point 为单位的)
cell.UseBorder = true;//使用边框
cell.BottomLineStyle = 2;//设定边框底线为粗线
cell.BottomLineColor = Colors.Red;//设定颜色为红色
cell.RightLineStyle = 2;
cell.RightLineColor = Colors.Red; 

//cell的格式还可以定义在一个xf对象中
XF cellXF = xls.NewXF();//为xls生成一个XF实例(XF是cell格式对象)
cellXF.HorizontalAlignment = HorizontalAlignments.Centered;//设定文字居中
cellXF.Font.FontName = "隶书";//设定字体
cellXF.Font.Height = 30 * 20;//设定字大小(字体大小是以 1/20 point 为单位的)
cellXF.UseBorder = true;//使用边框
cellXF.BottomLineStyle = 2;//设定边框底线为粗线
cellXF.BottomLineColor = Colors.Green;//设定颜色为绿色
cellXF.LeftLineStyle = 2; //设定边框左线为粗线
cellXF.LeftLineColor = Colors.Green; 

cell = cells.Add(3, 3, "国", cellXF);//以设定好的格式填加cell 

cellXF.Font.FontName = "仿宋_GB2312";
cellXF.BottomLineStyle = 2; //设定边框底线为粗线
cellXF.BottomLineColor = Colors.Blue;//设定颜色为蓝色
cellXF.RightLineStyle = 2;//设定边框右线为粗线
cellXF.RightLineColor = Colors.Blue;//设定颜色为蓝色
cellXF.LeftLineStyle = 0;
cell = cells.Add(4, 3, "志", cellXF);//格式可以多次使用 

//ColumnInfo colInfo = new ColumnInfo(xls, sheet);//生成列格式对象
////设定colInfo格式的起作用的列为第2列到第5列(列格式为0-base)
//colInfo.ColumnIndexStart = 1;//起始列为第二列
//colInfo.ColumnIndexEnd = 5;//终止列为第六列
//colInfo.Width = 15 * 256;//列的宽度计量单位为 1/256 字符宽
//sheet.AddColumnInfo(colInfo);//把格式附加到sheet页上(注:AddColumnInfo方法有点小问题,不给把colInfo对象多次附给sheet页)
//colInfo.ColumnIndexEnd = 6;//可以更改列对象的值
//ColumnInfo colInfo2 = new ColumnInfo(xls, sheet);//通过新生成一个列格式对象,才到能设定其它列宽度
//colInfo2.ColumnIndexStart = 7;
//colInfo2.ColumnIndexEnd = 8;
//colInfo2.Width = 20 * 256;
//sheet.AddColumnInfo(colInfo2); 

MergeArea meaA = new MergeArea(2, 3, 5, 7);//一个合并单元格实例(合并第2行、第5列 到 第3行、第7例)
sheet.AddMergeArea(meaA);//填加合并单元格
cellXF.VerticalAlignment = VerticalAlignments.Centered;
cellXF.Font.FontName = "隶书";
//cellXF.Font.Height = 48 * 20;
//cellXF.Font.Bold = true;
cellXF.Pattern = 1;//设定单元格填充风格。如果设定为0,则是纯色填充(无色),1代表没有间隙的实色
cellXF.PatternBackgroundColor = Colors.Red;//填充的底色
cellXF.PatternColor = Colors.Green;//设定填充线条的颜色
cell = cells.Add(2, 5, "晋/陈寿", cellXF);
#endregion 

sheet.Cells.Merge(7, 9, 1, 4);
cell = cells.Add(7, 1, "MyXls 合并单元格 Demo");
cell.HorizontalAlignment = HorizontalAlignments.Centered;
cell.VerticalAlignment = VerticalAlignments.Centered; 

for (int sheetNumber = 1; sheetNumber <= 4; sheetNumber++)
{
    sheetName = "Sheet " + sheetNumber;
    int rowMin = sheetNumber;
    int rowCount = sheetNumber + 10;
    int colMin = sheetNumber;
    int colCount = sheetNumber + 10;
    sheet = xls.Workbook.Worksheets.Add(sheetName);
    cells = sheet.Cells;
    for (int r = 0; r < rowCount; r++)
    {
        if (r == 0)
        {
            for (int c = 0; c < colCount; c++)
            {
                cells.Add(rowMin + r, colMin + c, "Column" + (c + 1)).Font.Bold = true;
            }
        }
        else
        {
            for (int c = 0; c < colCount; c++)
            {
                int val = r + c;
                cell = cells.Add(rowMin + r, colMin + c, val+ ":51CTO五岁了!");
                if (val % 2 != 0)
                {
                    cell.HorizontalAlignment = HorizontalAlignments.Centered;
                    cell.Font.FontName = "Times New Roman";
                    cell.Font.Underline = UnderlineTypes.Double;
                    cell.Font.ColorIndex = 2;
                    cell.Rotation = 45; //字符倾斜45度
                }
            }
        }
    }
} 

xls.Send();//XlsDocument.SendMethods.Inline

效果

该代码出自(http://terryli.blog.51cto.com/704315/392125

时间: 2024-10-11 13:13:59

ASP.NET导出Excel文件的相关文章

asp.net 导出excel文件

之前做过winfrom程序的导出excel文件的功能,感觉非常简单.现在试着做asp.net中导出excel的功能,之前用的是Microsoft.Office.Interop.Excel这个对象来实现数据导出excel,在asp.net上完全被它给恶心到了.首先是不能弹出保存对话框,然后又是在代码执行到Microsoft.Office.Interop.Excel.Application myexcel = new Microsoft.Office.Interop.Excel.Applicatio

关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法

转载自 阿姆的博客 关于asp.net C# 导出Excel文件打开Excel文件格式与扩展名指定格式不一致的解决办法 导致“文件格式与扩展名指定格式不一致”这个问题,是因为大多数人在导出excel文件的时候,都是默认保存excel的格式, 也就是直接workbook.Save(path)或者workbook.SaveAs(path).进而忽略了SaveAs方法里面的参数.与保存excel文件格式有 关的是它第二个参数FileForMat. FileFormat 类型:System.Object

asp.net 输出(导出) excel 文件(实用)

废话不多说直接上代码,因为文中有中间业务处理,用到的朋友需要去整改,原理: 拼写table插入数据,输出数据流即可! /// <summary> /// 商品导出Excel /// </summary> /// <returns></returns> public ActionResult ProjectToExcel() { string subjectNo = Request.Params["SNo"] ?? ""

Asp.net导出Excel乱码的解决方法

通过跟踪Asp.net服务器代码,没有乱码,然而导出Excel到浏览器后,打开时出现乱码. 解决方法是添加编码格式的前缀字节码:Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble()); ? 1 2 3 4 5 6 7 8 9 10 11 12 13 Response.Clear(); Response.AddHeader("content-disposition","attachment;filenam

使用Open Xml按模版导出Excel文件(上)

完整内容请参见我的网站 http://www.iyummy.com.cn/Blog/Detail/3 我们在做应用系统中经常需要将数据库中的数据导出成为Excel文件.如果是要导出报表的话,最好是能够根据定义好的模版生成一个美观的Excel. 以前要生成有样式的Excel.一般是使用Xml形式的Excel修改,或者使用Excel的Api.前者要修改样式的话特别麻烦,后者在Asp.net里会起很多进程. 庆幸的是从office 2007开始,微软使用了OpenXml来定义office的文件.使用r

[转] Asp.Net 导出 Excel 数据的9种方案

湛刚 de BLOG 原文地址 Asp.Net 导出 Excel 数据的9种方案 简介 Excel 的强大之处在于它不仅仅只能打开Excel格式的文档,它还能打开CSV格式.Tab格式.website table 等多钟格式的文档.它具备自动识别行号,字符,格式化数字等功能,例如:如果你在Excel 单元格中输入数字 "123456789012" 会自动转化为"1.23457E+11". 背景介绍 正因为Excel的强大和易用,大家都喜欢将数据导出为 Excel 备

asp.net 导出excel 中文乱码解决方法 (转)

用我转载的上一篇文章 Asp.net中把DataTable或DataGrid导出为Excel 导出的文档,中文有乱码现象,其实要解决中文乱码很简单,设置一下字符集.如下: // 设置编码和附件格式 curContext.Response.ContentType = "application/vnd.ms-excel"; curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312&

基于Vue + axios + WebApi + NPOI导出Excel文件

一.前言 项目中前端采用的Element UI 框架, 远程数据请求,使用的是axios,后端接口框架采用的asp.net webapi,数据导出成Excel采用NPOI组件.其业务场景,主要是列表页(如会员信息,订单信息等)表格数据导出,如表格数据进行了条件筛选,则需要将条件传至后端api,筛选数据后,导出成Excel. 思考过前端导出的3种方案: 1.使用location.href 打开接口地址.缺点: 不能传token至后端api, 无法保证接口的安全性校验,并且接口只能是get方式请求.

asp mvc 导出txt 文件泛型方法

asp mvc 导出txt 文件泛型方法分享: public static void ExportFile<T>(T obj) { StringBuilder str = new StringBuilder(); //列出obj 对象中的所有属性 System.Reflection.PropertyInfo[] properties = obj.GetType().GetProperties(); if (properties != null && properties.Len