標籤:效果 bsp 工作 new span 大會 get 資料匯出 student
正題前的嘮叨
本人是才出來工作不久的小白菜一顆,技術很一般,總是會有遇到一些很簡單的問題卻不知道怎麼做,這些問題可能是之前解決過的。發現這個問題,想著提升一下自己的技術水平,將一些學的新的‘好’東西記錄下來,一是加深印象;二是以後可以作為參考;三是希望博友們可以提出不足和可以最佳化的地方,一起討論。
這個是我去一家公司沒多久,讓我做的小功能,主要是匯出excel並在瀏覽器下載下來。 但是會有不同的細微的需求差別。
第一次發部落格,有描述不清楚的地方還請見諒,希望各位多多指點。
進入正題
簡單的需求描述
將查詢出來已經轉化好了的list<T> xxx 的資料的某些列,匯入到excel之中,並在瀏覽器中下載下來。(這裡用Student代替)
開始實現
1.student表的列如所示
2.使用的dll :Aspose.Cells.dll (5.3.1.0)。
3.部分實現代碼:
樣式及表頭
Workbook workbook = new Workbook(); Worksheet worksheet = workbook.Worksheets[0]; Cells cells = worksheet.Cells; cells.InsertRow(0); Aspose.Cells.Style style = workbook.Styles[workbook.Styles.Add()];//新增樣式 style.HorizontalAlignment = TextAlignmentType.Center;//文字置中 style.Font.Size = 11;//文字大小 style.Font.IsBold = true;//粗體 cells.SetRowHeight(0, 20); //設定行高
List<string> listHead = new List<string>(); listHead.Add("學生編號"); listHead.Add("學生姓名"); listHead.Add("學生年齡"); listHead.Add("電話"); for (int i = 0; i < listHead.Count; i++) { cells[0, i].PutValue(listHead[i]); cells[0, i].SetStyle(style); cells.SetColumnWidth(i, 30); }
寫入內容部分
for (int i = 1; i <= list1.Count; i++) { cells[i, 0].PutValue(list1[i-1].Id); cells[i, 1].PutValue(list1[i-1].Name); cells[i, 2].PutValue(list1[i-1].Age); cells[i, 3].PutValue(list1[i-1].Tel); }
最開始用的是這種笨重的方法來寫入內容,但是這樣子會遍曆很多次,如果資料量大會十分的慢,所一找了一下文檔,發現一個簡單的方法
寫入內容部分最佳化
worksheet.Cells.ImportCustomObjects(list, new string[] {"Id","Name","Age","Tel"}, false, 1, 0, list.Count, true, "", false);
跟進去看各個參數
public int ImportCustomObjects(ICollection list, string[] propertyNames, bool isPropertyNameShown, int firstRow, int firstColumn, int rowNumber, bool insertRows, string dateFormatString, bool convertStringToNumber)
看參數名稱應該比較清楚了。分別是需要匯入的list,要寫入的列,是否將屬性名稱顯示出來,寫入excel的開始行,開始列.....
這樣就比較簡潔明了,效率也比之前快許多
儲存excel
workbook.Save(System.Web.HttpContext.Current.Response, "學生資訊.xls", ContentDisposition.Attachment, new XlsSaveOptions(SaveFormat.Xlsx));
也解釋不清楚這裡,大概意思就是把寫入的excel資訊,Respose給前台。
前台的調用
<script> $(function() { $(".export_excel").click(function() { downExcel(‘/aspose/exportexcel‘); }); }); function downExcel(iframeUrl) { if (!iframeUrl) { return; } var body = document.getElementsByTagName("body")[0]; var downloadIframe = document.createElement("iframe"); downloadIframe.setAttribute("src", iframeUrl); downloadIframe.setAttribute("style", "display:none;") body.appendChild(downloadIframe); } </script>
這裡就是用ifram開啟。也可以直接用windows.open(‘url’);來實現
$(function() { $(".export_excel").click(function() { window.open(‘/aspose/exportexcel‘); }); });
最後excel效果
結語
效果基本達到需求,後面需求會變更,這種方式就不能完全滿足需求,由於今時間太晚了,下次再來寫,謝謝大家,請多指教,大家晚安!
在ASP.NET MVC中利用Aspose.cells 將查詢出的資料匯出為excel,並在瀏覽器中下載。