1. 程式人生 > >在ASP.NET MVC中利用Aspose.cells 將查詢出的數據導出為excel,並在瀏覽器中下載。

在ASP.NET MVC中利用Aspose.cells 將查詢出的數據導出為excel,並在瀏覽器中下載。

width tdi 新增 column 需求 options 解決 印象 ats

正題前的嘮叨

本人是才出來工作不久的小白菜一顆,技術很一般,總是會有遇到一些很簡單的問題卻不知道怎麽做,這些問題可能是之前解決過的。發現這個問題,想著提升一下自己的技術水平,將一些學的新的‘好’東西記錄下來,一是加深印象;二是以後可以作為參考;三是希望博友們可以提出不足和可以優化的地方,一起討論。

這個是我去一家公司沒多久,讓我做的小功能,主要是導出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,並在瀏覽器中下載。