.net生成Excel,并下载
生成Excel的方式有很多种,这里记录两个最简单的:
1.将数据保存为html,然后输出到客户端,保存为Excel文件;
2.通过\t\n生成字符串,然后输出到客户端,保存为Excel。
以上两者的原理都是一致的,只是生成的字符串长相不一致而已。我这里使用的是mvc,所以要下载的话,直接生成一个超链接指向当前这个生成文件的Action,用Ajax好像没办法,但是如果当前这个超链接只是请求一个文件,页面也不会刷新,比如一个按钮点击事件:直接windows.location.href="/control/action",如此就可以直接下载,当前页面也不会刷新。
先上共有的代码:
HttpResponseBase resp= HttpContext.Response;
resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置编码格式,防止中文乱码
resp.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("月报表.xls",Encoding.UTF8));//解决生成的文件名中文乱码
resp.ContentType = "application/ms-excel";
然后是生成数据的过程,这里就分为两种:
1.生成table的html
这里需要获取数据库的数据,然后按自己要的格式生成table,可以对table设置样式之类的,所有对table设置的样式,将会影响生成的Excel,同样可以给table加表头,当然table外面要不要加那些<html>、<body>这些,都不重要,可加可不加,示例如下:
<table border='1'>//设置border=1则生成的表格会有黑色表框
<tr>
<td>1</td><td>2</td><td>3</td><td>4</td>
</tr>
</table>
2.通过\t\n控制Excel样式
在这里,每加一个\t就会生成Excel中的一格,每加一个\n就会换行,这就是原理,所以大家可以拿到数据之后,对数据列表循环,每个数据item是一行
每列数据对应插入到Excel中的一格,示例如下:
foreach (var item in list)
{
ls_item += item.agentName + "\t";
ls_item += item.tourNo + "\t";
ls_item += item.travelerName + "\t";
ls_item += item.checkinDate + "\t";
ls_item += item.checkoutDate + "\t";
ls_item += item.rooms + "\t";
ls_item += item.nights + "\t";
ls_item += item.RoomPrice + "\t";
ls_item += item.minorTotal + "\t\n";//最后加个\n换行
}
以上代码为数据填充的部分,接下来就是将数据输出到客户端,只要两句话:
resp.Write(内容的字符串);
resp.End();
以上就是生成Excel的方法,当然这里是直接输出到客户端,所以没有生成多余的文件在服务器,如果非要生成文件在服务器,然后提供链接给客户端下载,其实就是将数据用文件流输出,保存为文件,然后将生成的文件路径返回给客户端,然后让客户端来请求这个文件路径,就能够下载了,示例如下:
StreamWriter sw = new StreamWriter(path, false, Encoding.GetEncoding("gb2312"));
sw.Write(str);//保存文件
sw.Close();
return Content("../DownLoad/file.xls");//不要忘了后缀.xls
生成word文件,方法也是一样的,只是有某些小地方需要修改:
resp.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode("file.doc", Encoding.UTF8));//后缀为doc
resp.ContentType = "application/msword";//文件内容为msword
其他都一致了。
当然生成这些文件的方法还有很多种,这里说的应该是最简单的一种。
.net生成Excel,并下载的更多相关文章
- phpexcel生成excel并下载
Loader::import('PHPExcel.Classes.PHPExcel'); // tp5中只需将phpexcel文件放入extend文件夹中,即可采用该方法引入,需要先 use thin ...
- 使用node.js生成excel报表下载(excel-export express篇)
引言:日常工作中已经有许多应用功能块使用了nodejs作为web服务器,而生成报表下载也是我们在传统应用. java中提供了2套类库实现(jxl 和POI),.NET 作为微软的亲儿子更加不用说,各种 ...
- java动态生成excel打包下载
@SuppressWarnings("unchecked") public String batchExport() throws DBException{ @SuppressWa ...
- Asp.net MVC 简单实现生成Excel并下载
由于项目上的需求,需要导出指定条件的Excel文件.经过一翻折腾终于实现了. 现在把代码贴出来分享 (直接把我们项目里面的一部份辅助类的代码分享一下) 我们项目使用的是Asp.Net MVC4.0模式 ...
- 后台生成excel前端下载
后台生成Excel时前端获取下载 Controller控制器: package com.example.test.controller; import com.example.test.common. ...
- ASP.NET网页生成EXCEL并下载(利用DataGrid或GridView等)
前几天要在后台查询数据库内容(用entity framework),将查询出来的信息(List或DataTable形式)转成EXCEL供用户下载.经过谷歌.百度搜索,终于搜出了一些代码.似乎可用了,结 ...
- php ajax生成excel并下载
目标:使用php,通过ajax请求的方式生成一个excel,然后下载. 思路:大致思路是发送一个ajax请求到后台,后台php处理后生成一个excel文件,然后把生成的文件放到一个临时目录,然后把文件 ...
- NPOI生成excel并下载
NPOI文件下载地址:http://npoi.codeplex.com/ 将文件直接引用至项目中即可,,,,, 虽然网上资料很多,但有可能并找不到自己想要的功能,今天闲的没事,所以就稍微整理了一个简单 ...
- java利用poi生成excel文件后下载本地
1.该功能需要poi的jar包,链接: http://pan.baidu.com/s/1migAtNq 密码: 38fx. 2.首先新建一个实体类,用以存放单个数据 public class Test ...
随机推荐
- Linux 开放服务端口
CentOS 6.5上安装Tomcat 服务器,需要开放服务端口,供其他计算机访问部署在Tomcat中的Web应用.下面是开放端口的方法. 我知道的方法有两种.下面以开放8080端口为例. 方法一:命 ...
- Linux 下github的使用
*初始化git仓库,使用git init命令 *添加文件到git仓库分两步: 1.使用git add filename :可分多次使用,添加多个文件到暂存区 2.使用git commit -m “ ...
- 基于visual Studio2013解决C语言竞赛题之0524职工年龄
题目
- 计算机中丢失MSVCP110.dll
1.安装Microsoft visual c++ 2.下载MSVCP110.dll复制到C:\system32 3.使用DirectX修复工具
- CF(437C)The Child and Toy(馋)
意甲冠军:给定一个无向图,每个小点右键.操作被拉动所有点逐一将去,直到一个点的其余部分,在连边和点拉远了点,在该点右点的其余的费用.寻找所需要的最低成本的运营完全成本. 解法:贪心的思想,每次将剩余点 ...
- ASP.NET aspx页面中 写C#脚本; ASP.NET 指令(<%@%>);
1 <h2>Welcome</h2> <ul> <% for (int i = 0; i <= Convert.ToInt32(ViewData[&qu ...
- C++中rand()函数的用法
C++中rand()函数的用法 2011-12-30 11:03:59| 分类: C / C++|举报|字号 订阅 一.C++中不能使用random()函数 random函数不是ANSI C标准 ...
- 工作随记 warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
错误信息:F:\BUILD\IDS7020\trunk\manage_src\dev\java_src\tds7030-web\Ant\build.xml:344: warning: 'include ...
- 一天一个类--ArrayList之一
今天开始打算将JDK7种的一些类的源码分析一下,笔者认为了解源码就是了解其实现过程,这是非常重要的,而不是简单的记住方法的使用,关键是了解其思想和目的这才是重要的.所以笔者决定首先将从一些容器下手.[ ...
- Android--开发过程中使用到的长度单位
px:表示屏幕实际的像素. in:表示英寸. mm:毫米. pt:表示一个点,是屏幕的物理尺寸. dp:(与密度无关的像素)逻辑长度单位,在160dpi屏幕上,1dp = 1px = 1/160英寸 ...