NPOI之C#下載Excel

来源:http://www.cnblogs.com/xbblogs/archive/2017/05/24/6900757.html
-Advertisement-
Play Games

Java中這個類庫叫POI,C#中叫NPOI,很多從Java一直到.Net平臺的類庫為了區別大部分都是在前面加個N,比如Hibernate和NHibernate。 npoi下載地址 一、使用NPOI下載大致分以下步驟: 1、創建workbook 2、創建sheet 3、創建row和cell 4、填充 ...


Java中這個類庫叫POI,C#中叫NPOI,很多從Java一直到.Net平臺的類庫為了區別大部分都是在前面加個N,比如Hibernate和NHibernate。

npoi下載地址

一、使用NPOI下載大致分以下步驟:

  1、創建workbook

  2、創建sheet

  3、創建row和cell

  4、填充數據

  5、設置cell的樣式和字體

二、HSSFWorkbook和XSSFWorkbook 兩者用法基本一樣

  HSSFWorkbook 創建的是Excel2003

    HSSFSheet、HSSFCellStyle、HSSFFont等

  XSSFWorkbook 創建的是Excel2007

    XSSFSheet、XSSFCellStyle、XSSFFont等

三、行或列合併

   sheet.AddMergedRegion(new CellRangeAddress(0, 1, 0, 0)); //起始行  結束行 起始列 結束列

   sheet.GetRow(0).GetCell(0).SetCellValue("姓名");//賦值

   賦值時必須使用合併後左上角單元格的行列坐標

四、代碼(以Excel2003為例):

using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;

public ActionResult Index()
        {

            List<string> headList = new List<string>();
            headList.Add("語文");
            headList.Add("數學");
            headList.Add("英語");
            headList.Add("政治");

            List<string> nameList = new List<string>();
            nameList.Add("張三");
            nameList.Add("李四");
            nameList.Add("王五");
            nameList.Add("趙六");
            nameList.Add("勝七");
            nameList.Add("朱重八");
            nameList.Add("九喇嘛");

            MemoryStream memoryStream = new MemoryStream();
            HSSFWorkbook workbook = new HSSFWorkbook();

            HSSFSheet sheet = workbook.CreateSheet();
            //創建單元格設置對象
            HSSFCellStyle cellStyle = workbook.CreateCellStyle();
            //設置水平、垂直居中
            cellStyle.Alignment = HSSFCellStyle.ALIGN_CENTER;
            cellStyle.VerticalAlignment = HSSFCellStyle.VERTICAL_CENTER;
            //單元格填充顏色
            cellStyle.FillForegroundColor = HSSFColor.PALE_BLUE.index;
            cellStyle.FillPattern = HSSFCellStyle.SOLID_FOREGROUND;
            //設置邊框
            cellStyle.BorderBottom = HSSFCellStyle.BORDER_THIN;
            cellStyle.BorderLeft = HSSFCellStyle.BORDER_THIN;
            cellStyle.BorderRight = HSSFCellStyle.BORDER_THIN;
            cellStyle.BorderTop = HSSFCellStyle.BORDER_THIN;

            //創建設置字體對象
            HSSFFont font = workbook.CreateFont();
            font.FontHeightInPoints = 16;//設置字體大小
            font.Boldweight = short.MaxValue; //加粗
            font.FontName = "宋體";
            cellStyle.SetFont(font);


            //創建Excel行和單元格
            for (int i = 0; i < nameList.Count + 2; i++)
            {
                HSSFRow newRow = sheet.CreateRow(i);
                for (int j = 0; j <headList.Count+1; j++)
                {
                    newRow.CreateCell(j);
                }
            }

            //設置Excel表頭
            sheet.AddMergedRegion(new CellRangeAddress(0, 1, 0, 0)); //起始行  結束行 起始列 結束列
            sheet.GetRow(0).GetCell(0).CellStyle = cellStyle;
            sheet.GetRow(1).GetCell(0).CellStyle = cellStyle;
            sheet.GetRow(0).GetCell(0).SetCellValue("姓名");//姓名

            sheet.AddMergedRegion(new CellRangeAddress(0, 0, 1, 4)); //起始行  結束行 起始列 結束列
            sheet.GetRow(0).GetCell(1).CellStyle = cellStyle;
            sheet.GetRow(0).GetCell(4).CellStyle = cellStyle;
            sheet.GetRow(0).GetCell(1).SetCellValue("課程");//課程

            for (int i = 0; i < headList.Count; i++)
            {
                sheet.GetRow(1).GetCell(i + 1).CellStyle = cellStyle;
                sheet.GetRow(1).GetCell(i + 1).SetCellValue(headList[i]);//具體課程
            }

            //導入數據
            for (int i = 0; i < nameList.Count; i++)
            {
                sheet.GetRow(i + 2).GetCell(0).SetCellValue(nameList[i]);
                for (int j = 0; j < 4; j++)
                {
                     sheet.GetRow(i + 2).GetCell(j+1).SetCellValue(i*j);
                }
            }

            workbook.Write(memoryStream);
            memoryStream.Seek(0,SeekOrigin.Begin);
          
            Response.Clear();
            Response.AddHeader("content-disposition", "attachment;filename=" + Server.UrlEncode("test.xls"));
            Response.ContentType = "application/octet-stream";
            Response.Charset = "gb2312";
            Response.ContentEncoding = Encoding.UTF8;
            Response.BinaryWrite(memoryStream.GetBuffer());
            Response.Flush();
            Response.End();
            return new EmptyResult();
        }

 最後結果:

 

轉載請註明出處!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 文章轉載自 https://github.com/yipianfengye/android-zxingLibrary 在具體介紹該掃描庫之前我們先看一下其具體的使用方式,看看是不是幾行代碼就可以集成二維碼掃描的功能。 在module的build.gradle中執行compile操作 在demo Ap ...
  • 最近沒事看了一下 WKWebView ,就把自己總結的記錄一下,方便查看. 註:一下為個人總結,會有不足,熱烈歡迎大神指點 1> 創建導入:#import <WebKit/WebKit.h> WKWebView *webView = [[WKWebView alloc] initWithFrame: ...
  • 一,工程圖。 二,代碼。 AppDelegate.h AppDelegate.m ...
  • 不知道大家有沒有發現,在一個 Objective-C 和 Swift 混編的 App 中,當把一個 OC 中的參數轉到 Swift 時,Swift 會自動把這個變數進行強制解包。舉個例子,我在 OC 中定義這樣一個變數: 它轉成 Swift 就變成了這樣: 這樣看上去合情合理。Swift 中有 St ...
  • 首先看一下什麼是GTID: GTID(Global Transaction ID)是對於一個已提交事務的編號,並且是一個全局唯一的編號。 GTID實際上是由UUID+TID組成的。其中UUID是一個MySQL實例的唯一標識。TID代表了該實例上已經提交的事務數量,並且隨著事務提交單調遞增。根據GTI ...
  • Neo4j使用Cypher查詢圖形數據,Cypher是描述性的圖形查詢語言,語法簡單,功能強大,由於Neo4j在圖形資料庫家族中處於絕對領先的地位,擁有眾多的用戶基數,使得Cypher成為圖形查詢語言的事實上的標準。本文作為入門級的教程,我不會試圖分析Cypher語言的全部內容,本文的目標是循序漸進 ...
  • " 1、同義詞 " " 2、Flashback 技術 " " 3、連接字元串的寫法 " " 4、轉義字元 & 特殊運算符 " " 5、文件類型 " " 6、查看參數 & 修改參數 " " 7、AWR 工具 " " 8、學習方法 & 學習資料 " 1、同義詞 概念 同義詞是資料庫對象的一個別名,常用於 ...
  • ———————————————————————————————————————————— 直流電動機應用實例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...