平時做項目過程中經常會遇到一些導入導出的功能,今天偶得一小空 整理一下
(如果有不對的地方還請大家指正,平時解決問題就順手記錄一下,以方便其他的小伙伴參考)
首先如下基礎的項目過程圖:
1.基礎的自己構建的html
2.jQuery.Upload插件
好,入正題,今天主要記錄一下下載機能,以NPOI下載方法為例
下載其實方法多多,每個人可能都有自己的常用方法,但我感覺下載無非兩種方式,
1.直接手動生成一份文檔,填充數據,下載
HSSFWorkbook book = new HSSFWorkbook(); ISheet sheet = book.CreateSheet("舉例下載"); sheet.SetColumnWidth(0,16*256);//設置第一列的寬度 sheet.SetColumnWidth(1,12 * 256);//設置第二列的寬度 for (int rowId = 0; rowId <= 10; rowId++) { IRow row = sheet.CreateRow(rowId); for (int i = 0; i < 2; i++) { ICell cell = row.CreateCell(i); cell.SetCellType(CellType.String); cell.SetCellValue("測試"+i); } } var ms = new MemoryStream(); book.Write(ms); ms.Flush(); ms.Position = 0; string fileName = "測試舉例.xls"; return File(ms, "application/vnd.ms-excel", fileName);
2.加載預定義的一份模板文件,填充數據,下載
//讀模板的方式加載 string filePath = System.Web.HttpContext.Current.Server.MapPath("~/Template/BasicInfoTemplete.xlsx"); IWorkbook workbook; FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Read); workbook = WorkbookFactory.Create(fs); ISheet sheet = workbook.GetSheetAt(0);//獲取Excel中的第一個Sheet ICellStyle cellStyle = workbook.CreateCellStyle(); //設置單元格上下左右邊框線 cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; //文字水平和垂直對齊方式 cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; ICell Cell = null; IRow row = null; for (int i = 2; i < 10; i++) { row = sheet.CreateRow(i); for (int j = 1; j <= 5; j++) { Cell = row.CreateCell(j); Cell.CellStyle = cellStyle; Cell.SetCellValue(i+"測試舉例"+j); } } var ms = new NpoiMemoryStream(); ms.AllowClose = false; workbook.Write(fs); workbook.Write(ms); ms.Flush(); ms.Position = 0; ms.AllowClose = false; return File(ms, "application/vnd.ms-excel", "測試舉例.xlsx");
html中調用
<a href="/UploadCarInfo/DownLoadBasicInfo" target="ajaxDownload"><i class="fa fa-download"></i> 車型參考</a> <iframe name="ajaxDownload" ></iframe>
以上都是很基礎的,比如其他的一些驗證或try catch什麼的暫未全部列出,比如有什麼公共方法TableToExcel等什麼一些公共方法網上一找一大堆,我就未一一列出具體下載細節;
第二種方式可能會遇到【無法訪問已關閉】這樣的問題,所以如代碼所示NpoiMemoryStream這個類,我繼承自MemoryStream這個系統類,重寫系統類中 關閉流的那個方法(Close),改為我可以手動控制即可解決問題;
個人總結:遇到問題往往不是第一時間去解決問題,除非你非常熟悉了;取而代之而是去思考一下問題的解決思路,有的問題無非就那些套路,具體裡面怎麼解決我想面試的時候 也不會問的非常詳細吧......