久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

立即注冊 登錄
返回首頁

uid:83710的個人空間

日志

NPOI創建Excel以內存流下載

已有 4003 次閱讀2015-6-25 17:01 | Excel

     NPOI一個不依賴Office安裝程序的導入導出Excel與Word動態鏈接庫,去年的時候在WPF(C/S)上用它做過一個數據庫導入導出Excel的程序。前段時間看了看發現根本看不懂了。。。
    記錄一下NPOI在.Net中的使用心得吧。

    功能說明:從數據庫中獲取一個DataTable導出成Excel并發送到客戶端

    主要步驟:
    1、從數據庫獲取并完善DataTable內容(刪除不必要的列新增必要的列)
    2、生成*.xls文件并寫入內存流
    3、發送內存流到客戶端,形成文件下載

    詳細說明:
    1、獲取數據源
    直接調用SQL語句獲取數據源DataTable就可以了,下面進行DataTable數據的維護。
    // 獲取數據源(注:數據源的來源不做詳細說明)
    DataTable data = CBLLTransportSendCar.GetSaleReport(time, dQueryDate, out strError);
    // 刪除不必要的列【 i 】為列索引從【0】開始
    data.Columns.RemoveAt(i);
    // 添加新列
    data.Columns.Add("ColumnName",typeof(string));
 

    2、用NPOI創建Excel
    先到NPOI官網下載【*.dll】動態鏈接庫并引入到項目中(引用所有*.dll)
    網址:http://npoi.codeplex.com/  ;
            
    string[] strHead = {"Column1","Column2","Column3"};
    MemoryStream ms = new MemoryStream();
     try
     {
        IWorkbook workbook = new HSSFWorkbook();    // 創建Workbook對象
         ISheet sheet = workbook.CreateSheet("Sheet1");  // 創建工作表
        // 設置表頭
         IRow row = sheet.CreateRow(0);  // 創建一行、指定行號為第一行
         for (int i = 0; i < strHead.Length; i++)
         {
            ICell cell = row.CreateCell(i); // 創建一列
            cell.SetCellValue(strHead[i]);  // 設置列的內容
         }
         // 設置內容
        for (int j = 0; j < dt.Rows.Count; j++)
         {
            IRow rowCotent = sheet.CreateRow(j + 1);
            for (int i = 0; i < strHead.Length; i++)
            {
                ICell cell = rowCotent.CreateCell(i); // 創建一列
                cell.SetCellValue(dt.Rows[j][i].ToString());  // 設置列的內容
             }
         }
        workbook.Write(ms); // Excel寫入內存流中
        ms.Flush();
        ms.Position = 0;    // 指定內存流起始值
        if (workbook != null)
        {
            workbook.Clear();   // 關閉
        }
    }
    catch (Exception ex)
    {
    }
    
    3、 發送流到客戶端以形成下載文件行駛
    如要是下載實體文件(即存放在服務器本地的文件)直接鏈接到文件的相對路徑就可以了,但是此文中的Excel文件則是存放在內存流中,需要特殊處理。處理方式很簡單,就是修改請求的報頭就可以了,告訴協議“
我發送的是一個文件你丫別把他當HTML輸出了!”
    Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");    // 設置流的字符編碼,Windows的為【gb2312】
    Response.ContentType = "application/octet-stream";    // 通知協議說我攜帶的是一個流不是HTML
    Response.AppendHeader("Content-Disposition", "filename=" + strTitle + "銷售報表.xls");    // 【filename】說明這個文件的文件名以及格式
    Response.BinaryWrite(ms.GetBuffer());     // 從內存流中以無符號字節數組形式發送



2014-12-05補充

    今天利用NPOI導出Excel的時候設計到了單元格的合并,很簡單,只需要一個方法就可以了。我們先看一下想要的效果
 


    代碼:
    IWorkbook workbook = new HSSFWorkbook();    // 創建Workbook對象
    ISheet sheet = workbook.CreateSheet("Sheet1");  // 創建工作表
    // 設置表頭
    IRow row = sheet.CreateRow(0);  // 創建一行
    ICell cell1 = row.CreateCell(0);
    cell1.SetCellValue("機臺號");
    sheet.AddMergedRegion(new CellRangeAddress(0, 1, 0, 0));    // 設置合并單元格

     
sheet.AddMergedRegion(new CellRangeAddress(firstRowNumber, lastRowNumber, firstColumnNumber, lastRowNumber));

    前兩個參數表示從第幾行到第幾行合并,后兩個參數表示從第幾列到第幾列合并! 

路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

返回頂部
主站蜘蛛池模板: 久久亚洲国产精品日日av夜夜 | 逼逼网 | 看片wwwwwwwwwww | 国产亚洲精品a | 日韩精品在线观看网站 | 九九视频在线观看 | 精品无码久久久久久国产 | 天天干天天谢 | 国产超碰人人爽人人做人人爱 | 精品视频一区二区 | 一级黄色片美国 | 国产精品一区在线 | 综合久久av | 视频一区在线 | 自拍偷拍中文字幕 | 国产精品免费观看 | 成人欧美一区二区三区在线播放 | 久久精品亚洲 | 亚洲欧美精品久久 | 欧美精品一区二区在线观看 | 免费精品久久久久久中文字幕 | 爱爱视频在线观看 | 久久国产精品首页 | 国产成人综合在线 | 天天拍天天操 | 日本一二区视频 | 国产精品99久久久久久久久久久久 | 国产片一区二区三区 | 欧美日韩国产精品激情在线播放 | 久久久久久国产精品免费 | 99re在线播放 | 午夜手机在线视频 | 国产不卡在线观看 | 亚洲一区二区精品视频 | 一区二区在线免费观看 | 天天天操操操 | 亚洲人成在线播放 | 欧美在线国产精品 | 一区二区三区视频 | 五月婷婷丁香婷婷 | 隔壁老王国产在线精品 |