c#导出Excel
問題:用戶查詢一些數(shù)據(jù),需要對頁面上的數(shù)據(jù)生成excel文件。
分析:寫文件,用excel進(jìn)程,或者使用response方法(都是通過網(wǎng)上查資料,個(gè)人就理解成這兩個(gè))
?? 使用excel進(jìn)程有一個(gè)確定,就是程序代碼是在服務(wù)器上的,如果服務(wù)器上沒有裝excel,那么問題無法解決;就算裝了,但是導(dǎo)出的文件
? 還是在服務(wù)器上,無法(相對來說)傳到客戶端。那么就使用response方法了。
?
具體實(shí)現(xiàn):以下的東東,都是自己查閱大量網(wǎng)上資料,和自己總結(jié)。
首先,對于從數(shù)據(jù)庫取出的數(shù)據(jù),結(jié)果放在list中,然后調(diào)用下面方法,這個(gè)方法主要是控制excel中顯示的格式以及內(nèi)容。
public void exportExcel(List<ArchivedWcsTask> wcstask, List<ArchivedMovement> movement,string title){//接收需要導(dǎo)出的數(shù)據(jù)//命名導(dǎo)出表格的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>任務(wù)號</td><td>條碼號</td><td>起點(diǎn)</td><td>終點(diǎn)</td><td>創(chuàng)建時(shí)間</td><td>任務(wù)</td></tr>");//循環(huán)讀取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";//調(diào)用輸出Excel表的方法ExportToExcel("application/ms-excel", fileName, sHtml.ToString());}上面的那個(gè)ExportToExcel("application/ms-excel", fileName, sHtml.ToString()),這個(gè)方法才是調(diào)用response導(dǎo)出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();}?
?
?
至此,導(dǎo)出excel已經(jīng)完成。
實(shí)例:這是一個(gè)頁面的GET方法,由于是業(yè)務(wù)的需求,不得不用GET,一般情況用POST方法要好點(diǎn)。。。
?
[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 = "結(jié)果為空,無法導(dǎo)出";return View();}string title = "您導(dǎo)出條件為:";title += (string.IsNullOrEmpty(taskcode) == true) ? "" : "任務(wù)號:" + taskcode;title += (string.IsNullOrEmpty(containercode) == true) ? "" : "條碼號:" + containercode;title += (string.IsNullOrEmpty(taskStartLoc) == true) ? "" : "起點(diǎn):" + taskStartLoc;title += ((string.IsNullOrEmpty(taskEndLoc)) == true) ? "" : "終點(diǎn):" + taskEndLoc; ;title += ((string.IsNullOrEmpty(startTime.ToString())) == true) ? "" : "時(shí)間范圍:" + startTime.ToString();title += ((string.IsNullOrEmpty(endTime.ToString())) == true) ? "-" : "----" + endTime.ToString();exportExcel(list, temp, title);ViewBag.msg = "導(dǎo)出成功!";// return View();return View();}?
?
上面那個(gè)界面的代碼:
?
@{Layout = null;}正在導(dǎo)出中。。。?
調(diào)用這個(gè)界面的代碼:
<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>任務(wù)號:</span><span><input type="text" id="taskcode" name="taskcode" /></span><span>條碼號:</span><span><input type="text" id="containercode" name="containercode" /></span><span>任務(wù)起點(diǎn):</span><span><input type="text" id="taskStartLoc" name="taskStartLoc" /></span><span>任務(wù)終點(diǎn):</span><span><input type="text" id="taskEndLoc" name="taskEndLoc" /></span><span>時(shí)間起點(diǎn)</span><span><input type="text" id="starttime" name="startTime" class="Wdate"onclick="WdatePicker({skin:'whyGreen'})" /></span> <span>時(shí)間終點(diǎn)</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>導(dǎo)出歷史任務(wù)表</a> <img style="display:none; " id="loading_img" src="@Url.Content("~/Content/loading.gif")" alt="loading" /> @Html.Partial("IndexJs")?
轉(zhuǎn)載于:https://www.cnblogs.com/shenghaishiweini/p/3186971.html
總結(jié)
- 上一篇: iOS modal view的关闭和显示
- 下一篇: linux培训笔记1