c#导出Excel

问题:用户查询一些数据,需要对页面上的数据生成excel文件。

分析:写文件,用excel进程,或者使用response方法(都是通过网上查资料,个人就理解成这两个)

   使用excel进程有一个确定,就是程序代码是在服务器上的,如果服务器上没有装excel,那么问题无法解决;就算装了,但是导出的文件

  还是在服务器上,无法(相对来说)传到客户端。那么就使用response方法了。

 

具体实现:以下的东东,都是自己查阅大量网上资料,和自己总结。

首先,对于从数据库取出的数据,结果放在list中,然后调用下面方法,这个方法主要是控制excel中显示的格式以及内容。

  public void exportExcel(List<ArchivedWcsTask> wcstask, List<ArchivedMovement> movement,string title){//接收需要导出的数据//命名导出表格的StringBuilder变量StringBuilder sHtml = new StringBuilder(string.Empty);//打印表头sHtml.Append("<table border=\"1\" width=\"100%\">");sHtml.Append("<tr height=\"40\"><td colspan=\"6\" align=\"center\" style='font-size:24px'><b>" + title + "</b></td></tr>");//打印列名sHtml.Append("<tr height=\"20\" align=\"center\" ><td>任务号</td><td>条码号</td><td>起点</td><td>终点</td><td>创建时间</td><td>任务</td></tr>");//循环读取List集合 for (int i = 0; i < wcstask.Count; i++){sHtml.Append("<tr height=\"20\" align=\"left\"><td>"+ wcstask[i].TaskCode  + "</td><td>" + wcstask[i].ContainerCodes+ "</td><td>"  + wcstask[i].StartLocation+ "</td><td>" + wcstask[i].EndLocation+ "</td><td>" + wcstask[i].CompletedAt.ToString() + "</td><td>"+ movement.Single(x => x.Id == wcstask[i].MovementId).Tag + "</td></tr>");}sHtml.Append("</table>");string fileName = DateTime.Parse(wcstask.FirstOrDefault().CompletedAt.ToString()).ToString("yyyyMMddHHmmss") + ".xls";//调用输出Excel表的方法ExportToExcel("application/ms-excel", fileName, sHtml.ToString());}

上面的那个ExportToExcel("application/ms-excel", fileName, sHtml.ToString()),这个方法才是调用response导出excel。

 

  public void ExportToExcel(string FileType, string FileName, string ExcelContent){System.Web.HttpContext.Current.Response.Charset = "UTF-8";System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8).ToString());System.Web.HttpContext.Current.Response.ContentType = FileType;System.IO.StringWriter tw = new System.IO.StringWriter();System.Web.HttpContext.Current.Response.Output.Write(ExcelContent.ToString());System.Web.HttpContext.Current.Response.Flush();System.Web.HttpContext.Current.Response.End();}

 

 

 

至此,导出excel已经完成。

实例:这是一个页面的GET方法,由于是业务的需求,不得不用GET,一般情况用POST方法要好点。。。

 

     [HttpGet][OpenSessionInViewFilter]public ActionResult ExportHistoryTask(string taskcode, string containercode, string taskStartLoc, string taskEndLoc, DateTime? startTime, DateTime? endTime){Wms.WmsRepositories repositories = OpenSessionInViewFilterAttribute.Current.WmsRepositories;if (endTime != null){endTime = endTime.Value.Date.AddDays(1.0);}var list = repositories.WcsTaskRepository.GetHistoryTasks(taskcode, containercode, taskStartLoc, taskEndLoc, startTime, endTime);List<ArchivedMovement> temp = repositories.MovementRepository.GetHistoryMovement(list);if (list.Count <= 0){ViewBag.msg = "结果为空,无法导出";return View();}string title = "您导出条件为:";title += (string.IsNullOrEmpty(taskcode) == true) ? "" : "任务号:" + taskcode;title += (string.IsNullOrEmpty(containercode) == true) ? "" : "条码号:" + containercode;title += (string.IsNullOrEmpty(taskStartLoc) == true) ? "" : "起点:" + taskStartLoc;title += ((string.IsNullOrEmpty(taskEndLoc)) == true) ? "" : "终点:" + taskEndLoc; ;title += ((string.IsNullOrEmpty(startTime.ToString())) == true) ? "" : "时间范围:" + startTime.ToString();title += ((string.IsNullOrEmpty(endTime.ToString())) == true) ? "-" : "----" + endTime.ToString();exportExcel(list, temp, title);ViewBag.msg = "导出成功!";//    return View();return View();}

 

 

上面那个界面的代码:

 

@{Layout = null;}正在导出中。。。

 

调用这个界面的代码:

<script type="text/javascript" src="/Scripts/DatePicker/WdatePicker.js"></script>
@*<script src="/Scripts/jquery-1.8.3.min.js" type="text/javascript"></script>*@
<script type="text/javascript">$(document).ready(function () {$("a").click(function () {var taskcode = $("#taskcode").val();var containercode = $("#containercode").val();var taskStartLoc = $("#taskStartLoc").val();var taskEndLoc = $("#taskEndLoc").val();var starttime = $("#starttime").val();var endtime = $("#endtime").val();$(this).attr("href", "/TaskView/ExportHistoryTask?taskcode=" + taskcode+ "&containercode=" + containercode + "&taskStartLoc=" + taskStartLoc+ "&taskEndLoc=" + taskEndLoc + "&startTime=" + starttime + "&endTime=" + endtime);});});
</script>
@using (Ajax.BeginForm("HistoryView", null, new AjaxOptions { UpdateTargetId = "list", LoadingElementId = "loading_img", OnBegin = "onListLoadBegin", OnFailure = "onListLoadFailure", OnSuccess = "onListLoadSuccess" }, new { id = "spec_form" }))
{<div id="index"><span>任务号:</span><span><input type="text" id="taskcode" name="taskcode" /></span><span>条码号:</span><span><input type="text" id="containercode" name="containercode" /></span><span>任务起点:</span><span><input type="text" id="taskStartLoc" name="taskStartLoc" /></span><span>任务终点:</span><span><input type="text" id="taskEndLoc" name="taskEndLoc" /></span><span>时间起点</span><span><input type="text" id="starttime" name="startTime" class="Wdate"onclick="WdatePicker({skin:'whyGreen'})" /></span> <span>时间终点</span><span><inputtype="text" id="endtime" name="endTime" class="Wdate" onclick="WdatePicker({skin:'whyGreen'})" /></span><input type="submit" value="查询" /><input type="reset" value="重置" /><input type="hidden" id="pageIndex" name="pageIndex" value="1" /></div>
}
<div id="list" style="margin: 20px;">
</div><a>导出历史任务表</a>
<img style="display:none; " id="loading_img" src="@Url.Content("~/Content/loading.gif")" alt="loading" />
@Html.Partial("IndexJs")

 

转载于:https://www.cnblogs.com/shenghaishiweini/p/3186971.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Java 8流遍历递归数据结构

Streams API是Java 8中的真正瑰宝&#xff0c;我一直在为它们寻找或多或少的意外用途。 我最近写过有关将它们用作ForkJoinPool门面的文章 。 这是另一个有趣的例子&#xff1a;遍历递归数据结构。 事不宜迟&#xff0c;请看一下代码&#xff1a; class Tree {private int va…

mysql把用户权限授予新用户_MySQL新建普通用户和库并授予新用户对新库的所有权限...

新建库新建cmf和amon两个库&#xff0c;并指定默认字符集mysql> create database cmf DEFAULT CHARACTER SET utf8;Query OK, 1 row affected (0.00 sec)mysql> create database amon DEFAULT CHARACTER SET utf8;Query OK, 1 row affected (0.00 sec)新建用户新建cmf和a…

快速入门:OpenShift上的Spring Boot和WildfFly 8.2

与Spring Boot&#xff0c;WildFly和OpenShift相比&#xff0c;这是真正的“快速入门”&#xff0c;与我上一篇更具描述性的文章相反。 先决条件 在开始构建应用程序之前&#xff0c;我们需要安装一个OpenShift免费帐户和客户端工具。 步骤1&#xff1a;建立WildFly应用程式 …

java开发环境搭建 pdf_01搭建java web开发环境.pdf

01搭建java web开发环境.pdf还剩19页未读&#xff0c;继续阅读下载文档到电脑&#xff0c;马上远离加班熬夜&#xff01;亲&#xff0c;很抱歉&#xff0c;此页已超出免费预览范围啦&#xff01;如果喜欢就下载吧&#xff0c;价低环保&#xff01;内容要点&#xff1a;( 7)在 M…

linux培训笔记1

第五章 文件和目录的管理 linux命令的基本格式 #命令 [选项] [参数] 1、linux下的常用命令 (1)ls 查看(列出)目录下的内容 -l 查看文件详细信息 drwxr-xr-x. 23 root root 4096 5月 31 15:06 var 文件类型和…

Java 8 Optional不仅用于替换空值

总览 在Java 8中&#xff0c;您可以返回Optional而不是返回null。 就像您在Java 7中所做的那样。这取决于您是否倾向于忘记检查null还是使用静态代码分析检查对nullalbe的引用&#xff0c;这可能有很大的不同。 但是&#xff0c;还有一种更引人注目的情况是将Optional视为具有…

WCF学习笔记之序列化

DataContractAttribute 与 DataMenberAttribute DataContractAttribute该特性只能用于枚举、类和结构体&#xff0c;而不能用于接口&#xff1b;又因为DataContractAttribute是不可以被继承的&#xff0c;所以要所有作为数据契约的类型自身必须有这么一个特性&#xff1b;而且一…

转载[POJ题型分类]

北大ACM题分类 主流算法&#xff1a; 1.搜索 //回溯 2.DP&#xff08;动态规划&#xff09;  3.贪心  4.图论 //Dijkstra、最小生成树、网络流 5.数论 //解模线性方程 6.计算几何 //凸壳、同等安置矩形的并的面积与周长 7.组合数学 //Polya定理 8.模拟  9.数据结构 //…

在AWS Elastic MapReduce上运行PageRank Hadoop作业

在上一篇文章中&#xff0c;我描述了执行PageRank计算的示例&#xff0c;该示例是使用Apache Hadoop进行Mining Massive Dataset课程的一部分。 在那篇文章中&#xff0c;我接受了Java中现有的Hadoop作业&#xff0c;并做了一些修改&#xff08;添加了单元测试&#xff0c;并通…

java sort 第二个参数_详解java Collections.sort的两种用法

Collections是一个工具类&#xff0c;sort是其中的静态方法&#xff0c;是用来对List类型进行排序的&#xff0c;它有两种参数形式&#xff1a;public static > void sort(List list) {list.sort(null);}public static void sort(List list, Comparator super T> c) {lis…

MVC3 中使用Unity实现依赖注入

前言&#xff1a;前段时间一直在研究依赖注入&#xff0c;不过不是在MVC框架中使用&#xff0c;今天突然想到在MVC中使用Unity实现依赖注入&#xff0c;一时慌了&#xff0c;不知道从何下手&#xff0c;接着就是网上不停的找资料&#xff0c;下面我把我找到的资料分享下&#x…

避免在ConcurrentHashMap.computeIfAbsent()中进行递归

有时我们会提供糟糕的建议。 就像该文章中有关如何将Java 8用于缓存的功能性方法来计算斐波那契数的文章一样 。 正如我们的读者之一马蒂亚斯&#xff08;Matthias&#xff09;在评论中注意到的那样 &#xff0c;提出的算法可能永远不会停止。 考虑以下程序&#xff1a; publi…

java调用wvsc.exe_c语言 函数的调用方法

欢迎加入编程爱好者 QQ群 群号 57616770中都只有一个主函数main()&#xff0c;但实用程序往往由多个函数组成。函数是&#xff23;源程序的基本模块&#xff0c;通过对函数模块的调在第一章中已经介绍过&#xff0c;&#xff23;源程序是由函数组成的。虽然在前面各章的程序用实…

ms2005 SQL Server设置改为SQL Server身份验证

1.为 SQL Server 2005 Express Edition 或 SQL Server 2005 Developer Edition 启用远程连接 必须为要从远程计算机连接到的每个 SQL Server 2005 实例启用远程连接。为此&#xff0c;请按照下列步骤操作&#xff1a; 1.单击“开始”&#xff0c;依次指向“程序”、“Microsoft…

JPA和Hibernate级联类型的初学者指南

介绍 JPA将实体状态转换转换为数据库DML语句。 由于对实体图进行操作很常见&#xff0c;因此JPA允许我们将实体状态更改从父级传播到子级 。 通过CascadeType映射配置此行为。 JPA与Hibernate级联类型 Hibernate支持所有JPA级联类型和一些其他旧式级联样式。 下表绘制了JPA级…

EE JSP:使用JSTL标记库生成动态内容

除了在JSP中编写自己的定制标记之外&#xff0c;您还将发现Java EE实际上提供了一组Java标准标记库&#xff08;JSTL&#xff09;供您使用。 这些内置标签包括重复&#xff08;for-loop&#xff09;标签&#xff0c;条件标签&#xff0c;变量声明和输出标签等。库还带有许多实用…

Sublime text 2下alignment插件无效的解决办法

在sublime text 2中安装了alignment插件&#xff0c;但使用快捷键‘ctrlalta无效&#xff0c;经过各种方法依然无效&#xff0c;最后找到了这个“Doesnt work at all for me (full steps)”&#xff0c;方法就是用sb打开%sb 路径%\Data\Packages\Alignment目录下的alignment.py…

php入口函数,php 常用的系统函数

字符串函数strlen&#xff1a;获取字符串长度&#xff0c;字节长度substr&#xff1a;字符串截取&#xff0c;获取字符串(按照字节进行截取)strchr&#xff1a;与substr相似&#xff0c;从指定位置截取一直到最后strrchr(获取文件后缀名)&#xff1a;与strchr一样&#xff0c;只…

startActivityForResult的使用和用法

startActivityForResult的使用和用法 startActivityForResult 和 onActivityResult在activity间传递数据AndroidManifest.xml<applicationandroid:icon"drawable/ic_launcher"android:label"string/app_name" ><activityandroid:name".KakuL…

如何使用Java泛型映射不同的值类型

有时&#xff0c;一般的开发人员会遇到这样的情况&#xff0c;即他必须在特定容器内映射任意类型的值。 但是&#xff0c;Java集合API仅提供与容器相关的参数化。 例如&#xff0c;这将HashMap的类型安全使用限制为单个值类型。 但是&#xff0c;如果您想混合苹果和梨怎么办&am…