下载excel在webform以及winform之间的区别还真是不少,之前我在9you做多了winform,会用到interop来下载word和excel,甚至在webbrower控件上显示这些信息,到了2010以后openxml大行其道后,我们越来越熟悉用openxml来扣ExcelWorksheet来得到里面的内容,再通过LoadFromDataTable来填充到我们的excel,更有摄甚着,可以用parellal的task来做异步并行来提高导出多个表到工作簿,但是这些一旦用来在web则完全不是那会事情了,因为下载的excel永远在服务器本地,我们需要公布其服务器的地址来给客户下载。之前在东方财富用了这个方法,但是没有领导这个简单的流操作才是避开权限的关键。不用去用a标签的type为file来指定下载地址,这样可以由客户端自己决定保存到哪里。我这里有两种方法来实现下载,NPOI和Myxls,NPO用在mvc上比较好用,而Myxls用在webform的Page上比较好用。

   /// <summary>/// NPOI插件保存excel到网页,用于MVC4/// </summary>/// <returns></returns>public ActionResult DownLoadExcel(){string Path = AppDomain.CurrentDomain.BaseDirectory + "Resource\\Config\\DatetimeConfig.xml";XElement xele = XElement.Load(Path);if ((string)xele.Attribute("content") != ""){DateTime dateTime = DateTime.Parse((string) xele.Attribute("content"));TimeSpan span = DateTime.Now - dateTime;if (span.TotalMinutes < 1){return new EmptyResult(); }}//延迟30分钟再可以提交string sql = "SELECT  [UserID],[UserCode],[UserName],[ParentID],[Position],[Mobile],[Email],[Levels],[AttentionTime]FROM Users WHERE CreateStatus = 1 AND(AttentionState = 1); ";DataTable dt = ObjectContainer.Instance.GetObject<ISqlExportService>().GetDataTableFromSql(Request, sql);//创建Excel文件的对象  NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();//添加一个sheet  NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");//给sheet1添加第一行的头部标题  NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);//row1.RowStyle.FillBackgroundColor = "";  for (int i = 0; i < dt.Columns.Count; i++){row1.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);}//将数据逐步写入sheet1各个行  for (int i = 0; i < dt.Rows.Count; i++){NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1);for (int j = 0; j < dt.Columns.Count; j++){rowtemp.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString().Trim());}}string strdate = DateTime.Now.ToString("yyyyMMddhhmmss");//获取当前时间  // 写入到客户端   System.IO.MemoryStream ms = new System.IO.MemoryStream();book.Write(ms);ms.Seek(0, SeekOrigin.Begin);DateTime = DateTime.Now;xele.SetAttributeValue("content", DateTime);xele.Save(AppDomain.CurrentDomain.BaseDirectory + "Resource\\Config\\DatetimeConfig.xml");return File(ms, "application/vnd.ms-excel", strdate + "Excel.xls");}

然后前端用ActionReult或者FileResult都可以返回,@Html.ActionLink("点击导出Excel", "DownLoadExcel", "SqlExportService")

而webform可以用MyXls插件,这两个都可以在Nuget上得到。

   /// <summary>/// MyXls组件保存网页Excel,用于webform的Page.Response/// </summary>public void ExportExcelForPercentForWeb(string sheetName, string xlsname){XlsDocument xls = new XlsDocument();Worksheet sheet = xls.Workbook.Worksheets.Add(sheetName);try{string sql = "SELECT  [UserID],[UserCode],[UserName],[ParentID],[Position],[Mobile],[Email],[Levels],[AttentionTime]FROM Users WHERE CreateStatus = 1 AND(AttentionState = 1); ";DataTable table = ObjectContainer.Instance.GetObject<ISqlExportService>().GetDataTableFromSql(Request, sql);if (table == null || table.Rows.Count == 0) { return; }//XlsDocument xls = new XlsDocument();//Worksheet sheet = xls.Workbook.Worksheets.Add(sheetName);//填充表头  foreach (DataColumn col in table.Columns){sheet.Cells.Add(1, col.Ordinal + 1, col.ColumnName);}//填充内容  for (int i = 0; i < table.Rows.Count; i++){for (int j = 0; j < table.Columns.Count; j++){sheet.Cells.Add(i + 2, j + 1, table.Rows[i][j].ToString());}}//保存  //xls.FileName = xlsname;//xls.Save();#region 客户端保存using (MemoryStream ms = new MemoryStream()){xls.Save(ms);ms.Flush();ms.Position = 0;sheet = null;xls = null;HttpResponse response = System.Web.HttpContext.Current.Response;response.Clear();response.Charset = "UTF-8";response.ContentType = "application/vnd.ms-excel";//"application/vnd.ms-excel";System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename=" + xlsname));//System.Web.HttpContext.Current.Response.WriteFile(fi.FullName);byte[] data = ms.ToArray();System.Web.HttpContext.Current.Response.BinaryWrite(data);}#endregion//xls = null;}catch (Exception ex){}finally{sheet = null;xls = null;}}

当然MyXls也能保存到服务器本地。

        /// <summary>/// MyXls组件保存本地Excel,用于webform的Page.Response/// </summary>public  void ExportExcelForPercent(string sheetName, string xlsname){string sql = "SELECT  [UserID],[UserCode],[UserName],[ParentID],[Position],[Mobile],[Email],[Levels],[AttentionTime]FROM Users WHERE CreateStatus = 1 AND(AttentionState = 1); ";DataTable table = ObjectContainer.Instance.GetObject<ISqlExportService>().GetDataTableFromSql(Request, sql);if (table == null || table.Rows.Count == 0) { return; }XlsDocument xls = new XlsDocument();Worksheet sheet = xls.Workbook.Worksheets.Add(sheetName);//填充表头  foreach (DataColumn col in table.Columns){sheet.Cells.Add(1, col.Ordinal + 1, col.ColumnName);}//填充内容  for (int i = 0; i < table.Rows.Count; i++){for (int j = 0; j < table.Columns.Count; j++){sheet.Cells.Add(i + 2, j + 1, table.Rows[i][j].ToString());}}//保存  xls.FileName = xlsname;xls.Save();xls = null;}

更多的内容可以看我的例子,https://github.com/orichisonic/SqlToExcel.git

导出datatable到excel然后让web客户端下载到本地相关推荐

  1. 简洁的导出 datatable到excel,不用组件

    简洁的导出 datatable到excel var lines = new List<string>();string[] columnNames = dataTable.Columns. ...

  2. SpringBoot将数据放入Excel里面通过浏览器直接下载到本地

    SpringBoot将数据放入Excel里面通过浏览器直接下载到本地 说明 依赖 代码 效果 说明 以前做java方面的导出下载的时候,都是先把数据导出到linux服务器里面的某个目录,然后才是通过浏 ...

  3. ashx导出dataTable为Excel

    一,datatable导出Excel,用户可以选择路径,方法如下: /// <summary>/// DataTable导出到Excel/// </summary>/// &l ...

  4. 获取jqGrid中的所有数据导出并生成Excel文件流供用户下载(post请求实现文件下载)...

    最近有一个需求是: 将jqGrid表格中的数据生成报表Excel文件返回给用户. 我的想法是获取jqGrid中的数据然后生成json数据,传给后端,生成文件流,响应到前端,保存为excel文件. aj ...

  5. php手机端下载excel,PHPExcel:在客户端下载Excel文件

    问题已解决:对于可能存在此问题的其他用户 – 请注意PHP文件的编码.如果您使用PHPExcel,它必须是ANSII编码而不是UTF8,否则将彻底下载EXCEL.添加的标题(答案1)在我更改了文件本身 ...

  6. 在服务器端生成Excel文件然后从服务器下载的本地的代码

    这个方法适用所有类型文件,你可以适当修改代码就行了 protected void Button1_Click(object sender, EventArgs e)         {         ...

  7. (原创)datagrid数据导出到excel文件给客户端下载的几种方法

    方法一:导出到csv文件,存放在服务器端任一路径,然后给客户下载 优点: 1.可以进行身份认证后给客户下载,如果放到非web目录就没有对应的url,客户无法随时下载. 2.也是因为生成了文件,所以占用 ...

  8. datagrid数据导出到excel文件给客户端下载的几种方法

    新做项目客户要求把数据倒入到EXCEL中,在网上查询到如下方法,我用的第二种方法,非常不错,贴上供大家分享: 方法一:导出到csv文件,存放在服务器端任一路径,然后给客户下载 优点: 1.可以进行身份 ...

  9. 数据导出到excel文件给客户端下载的几种方法

    (原创)datagrid数据导出到excel文件给客户端下载的几种方法 看到这个觉得这个人很厉害,mvp啊. 我就改成这个样子了.  Response.Clear();         Respons ...

最新文章

  1. 广州.NET俱乐部活动通知(11月17日)
  2. 《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.2 DDR2 SDRAM芯片
  3. Android 之PackageManager框架
  4. java 挖矿代码_我的大脑被挖矿代码搞的不能好好思考了
  5. 抖音申请企业蓝v认证的流程是怎样的?
  6. R语言学习笔记-Error in ts(x):对象不是矩阵问题解决
  7. excel如何拟合直线(怎样用excel拟合直线)
  8. Java调用百度API实现翻译
  9. 如何使用TCPA300电流放大器和电流探头进行电流测试
  10. 图层蒙版和图层剪贴路径_PS蒙版使用教程、快速蒙版、剪切蒙版、矢量蒙版、图层蒙版要点...
  11. CSS设置字体大小、字体粗细、字体风格
  12. 数学建模竞赛 经验分享
  13. 【广州华锐互动】VR数字虚拟展厅为企业提升品牌形象和知名度
  14. Word 2016怎么安装公式编辑器
  15. 2022-2023年度江苏省职业院校技能大赛“网络安全”赛项中职组圆满成功
  16. peerDependencies WARNING 警告剖析
  17. numpy中,矩阵的三种转置transpose、getT、getH的区别
  18. 使用Apache Spark SQL探索标普500和石油价格
  19. c语言led左右循环程序,c语言编写程序,将led从左往右,再从右往左依次往返点亮...
  20. 线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)

热门文章

  1. Android终端实现个人中心界面
  2. ubuntu 16.04 内存清理方法总结
  3. R语言数据分析笔记——t检验(含正态性检验和方差齐性检验在SPSS和R语言中的操作t检验(单样本、双独立样本、配对样本)在Excel、SPSS、R语言中的操作)
  4. 数据结构与算法(1)--二叉树
  5. 入门级短信推送,你还不会吗?
  6. Why That Big Meal You Just Ate Made You Hungry
  7. 纯干货-17 分布式深度学习原理、算法详细介绍
  8. 云主机和物理机有什么区别?
  9. Dbus启动问题 Failed to get D-Bus connection: Operation not permitted
  10. odoo13-14电商插件