程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> NPOI 導出excel兩種方式 和 錯誤 無法訪問已關閉的流解決方式,npoiexcel

NPOI 導出excel兩種方式 和 錯誤 無法訪問已關閉的流解決方式,npoiexcel

編輯:C#入門知識

NPOI 導出excel兩種方式 和 錯誤 無法訪問已關閉的流解決方式,npoiexcel


平時做項目過程中經常會遇到一些導入導出的功能,今天偶得一小空 整理一下

(如果有不對的地方還請大家指正,平時解決問題就順手記錄一下,以方便其他的小伙伴參考)

首先如下基礎的項目過程圖:

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),改為我可以手動控制即可解決問題;

 

個人總結:遇到問題往往不是第一時間去解決問題,除非你非常熟悉了;取而代之而是去思考一下問題的解決思路,有的問題無非就那些套路,具體裡面怎麼解決我想面試的時候 也不會問的非常詳細吧......

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved