npoi 導出excel

来源:http://www.cnblogs.com/RobotWorlds-li/archive/2016/02/25/5213883.html
-Advertisement-
Play Games

首先用Vs自帶的Nuget包管理器下載並安裝npoi 2.0,如果沒有NuGet程式包選項,在菜單-->工具-->擴展管理器中搜索NuGet。 然後寫一個方法讀取DataTable中的內容,並輸出到MemoryStream中 這是我的NPOIHelper 1 using System; 2 usin


首先用Vs自帶的Nuget包管理器下載並安裝npoi 2.0,如果沒有NuGet程式包選項,在菜單-->工具-->擴展管理器中搜索NuGet。

然後寫一個方法讀取DataTable中的內容,並輸出到MemoryStream中

這是我的NPOIHelper

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Web;
  5 using System.Data;
  6 using System.IO;
  7 using NPOI.HSSF.UserModel;
  8 using NPOI.HPSF;
  9 using System.Text;
 10 using NPOI.SS.Util;
 11 using NPOI.SS.UserModel;
 12 
 13 /// <summary>
 14 ///NPOIHelper 的摘要說明
 15 /// </summary>
 16 public static class NPOIHelper
 17 {
 18 public static HSSFWorkbook workbook; 
 19 public static void CloseWorkBook()
 20 {
 21 workbook = null;
 22 }
 23 public static void OpenWorkBook() {
 24 workbook = new HSSFWorkbook();
 25 }
 26 /// <summary>
 27 /// DataTable導出到Excel的MemoryStream
 28 /// </summary>
 29 /// <param name="dtSource">源DataTable</param>
 30 /// <param name="strHeaderText">表頭文本</param>
 31 public static void Export(DataTable dtSource, string strHeaderText) {
 32 
 33 HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet();
 34 
 35 #region 右擊文件 屬性信息
 36 {
 37 DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
 38 dsi.Company = "北京通信科技有限公司";
 39 workbook.DocumentSummaryInformation = dsi;
 40 
 41 SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
 42 //si.Author = "文件作者信息"; //填加xls文件作者信息
 43 //si.ApplicationName = "創建程式信息"; //填加xls文件創建程式信息
 44 //si.LastAuthor = "最後保存者信息"; //填加xls文件最後保存者信息
 45 //si.Comments = "作者信息"; //填加xls文件作者信息
 46 //si.Title = "標題信息"; //填加xls文件標題信息
 47 //si.Subject = "主題信息";//填加文件主題信息
 48 si.CreateDateTime = DateTime.Now;
 49 workbook.SummaryInformation = si;
 50 }
 51 #endregion
 52 
 53 HSSFCellStyle dateStyle = (HSSFCellStyle)workbook.CreateCellStyle();
 54 HSSFDataFormat format = (HSSFDataFormat)workbook.CreateDataFormat();
 55 dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");
 56 
 57 HSSFCellStyle tdStyle = (HSSFCellStyle)workbook.CreateCellStyle();
 58 //設置單元格邊框 
 59 tdStyle.VerticalAlignment = VerticalAlignment.CENTER;//垂直居中
 60 tdStyle.BorderBottom = BorderStyle.THIN;
 61 tdStyle.BorderLeft = BorderStyle.THIN;
 62 tdStyle.BorderRight = BorderStyle.THIN;
 63 tdStyle.BorderTop = BorderStyle.THIN;
 64 //取得列寬
 65 int[] arrColWidth = new int[dtSource.Columns.Count];
 66 foreach (DataColumn item in dtSource.Columns) {
 67 arrColWidth[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length;
 68 }
 69 for (int i = 0; i < dtSource.Rows.Count; i++) {
 70 for (int j = 0; j < dtSource.Columns.Count; j++) {
 71 int intTemp = Encoding.GetEncoding(936).GetBytes(dtSource.Rows[i][j].ToString()).Length;
 72 if (intTemp > arrColWidth[j]) {
 73 arrColWidth[j] = intTemp;
 74 }
 75 }
 76 }
 77 int rowIndex = 0;
 78 foreach (DataRow row in dtSource.Rows) {
 79 #region 新建表,填充表頭,填充列頭,樣式
 80 if (rowIndex == 65535 || rowIndex == 0) {
 81 if (rowIndex != 0) {
 82 sheet = (HSSFSheet)workbook.CreateSheet();
 83 }
 84 
 85 #region 表頭及樣式
 86 {
 87 HSSFRow headerRow = (HSSFRow)sheet.CreateRow(0);
 88 headerRow.HeightInPoints = 25;
 89 headerRow.CreateCell(0).SetCellValue(strHeaderText);
 90 
 91 HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle();
 92 headStyle.Alignment = HorizontalAlignment.CENTER;
 93 HSSFFont font = (HSSFFont)workbook.CreateFont();
 94 
 95 font.FontHeightInPoints = 20;
 96 font.Boldweight = 700;
 97 headStyle.SetFont(font);
 98 headerRow.GetCell(0).CellStyle = headStyle;
 99 sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, dtSource.Columns.Count - 1));
100 //headerRow.Dispose();
101 }
102 #endregion
103 
104 
105 #region 列頭及樣式
106 {
107 HSSFRow headerRow = (HSSFRow)sheet.CreateRow(1);
108 HSSFCellStyle headStyle = (HSSFCellStyle)workbook.CreateCellStyle();
109 headStyle.Alignment = HorizontalAlignment.CENTER;
110 HSSFFont font = (HSSFFont)workbook.CreateFont();
111 //設置單元格邊框 
112 headStyle.BorderBottom = BorderStyle.THIN;
113 headStyle.BorderLeft = BorderStyle.THIN;
114 headStyle.BorderRight = BorderStyle.THIN;
115 headStyle.BorderTop = BorderStyle.THIN;
116 
117 font.FontHeightInPoints = 10;
118 font.Boldweight = 700;
119 headStyle.SetFont(font);
120 foreach (DataColumn column in dtSource.Columns) {
121 headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
122 headerRow.GetCell(column.Ordinal).CellStyle = headStyle;
123 
124 //設置列寬
125 sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256);
126 }
127 //headerRow.Dispose();
128 }
129 #endregion
130 
131 rowIndex = 2;
132 }
133 #endregion
134 
135 
136 #region 填充內容
137 HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);
138 foreach (DataColumn column in dtSource.Columns) {
139 HSSFCell newCell = (HSSFCell)dataRow.CreateCell(column.Ordinal);
140 newCell.CellStyle = tdStyle;
141 
142 string drValue = row[column].ToString();
143 switch (column.DataType.ToString()) {
144 case "System.String"://字元串類型
145 newCell.SetCellValue(drValue);
146 break;
147 case "System.DateTime"://日期類型
148 DateTime dateV;
149 DateTime.TryParse(drValue, out dateV);
150 newCell.SetCellValue(dateV);
151 
152 newCell.CellStyle = dateStyle;//格式化顯示
153 break;
154 case "System.Boolean"://布爾型
155 bool boolV = false;
156 bool.TryParse(drValue, out boolV);
157 newCell.SetCellValue(boolV);
158 break;
159 case "System.Int16"://整型
160 case "System.Int32":
161 case "System.Int64":
162 case "System.Byte":
163 int intV = 0;
164 int.TryParse(drValue, out intV);
165 newCell.SetCellValue(intV);
166 break;
167 case "System.Decimal"://浮點型
168 case "System.Double":
169 double doubV = 0;
170 double.TryParse(drValue, out doubV);
171 newCell.SetCellValue(doubV);
172 break;
173 case "System.DBNull"://空值處理
174 newCell.SetCellValue("");
175 break;
176 default:
177 newCell.SetCellValue("");
178 break;
179 }
180 
181 }
182 #endregion
183 
184 rowIndex++;
185 }
186 using (MemoryStream ms = new MemoryStream()) {
187 workbook.Write(ms);
188 }
189 }
190 
191 public static MemoryStream Export2(DataTable dt, string p) {
192 Export(dt,p);
193 MemoryStream ms = new MemoryStream();
194 ISheet sheet=workbook.GetSheet("Sheet1");
195 int FirstRow=2;
196 int LastRow=sheet.LastRowNum;
197 int Start=0;
198 int End=0;
199 string temp = "";
200 HSSFCellStyle dateStyle = (HSSFCellStyle)workbook.CreateCellStyle();
201 dateStyle.Alignment = HorizontalAlignment.RIGHT;
202 dateStyle.VerticalAlignment = VerticalAlignment.CENTER;
203 for (int i = FirstRow; i < LastRow; i++) {
204 for (int j = 1; j < 5; j++) {
205 if (j == 1)
206 {
207 IRow row=sheet.GetRow(i);
208 if (row == null) continue; //沒有數據的行預設是null
209 if (row.GetCell(j) == null){continue;} //同理,沒有數據的單元格都預設是null
210 ICell cell=row.GetCell(j);
211 string cellText=cell.StringCellValue;
212 if (cellText == temp)//上下行相等,記錄要合併的最後一行
213 {
214 End = i;
215 }
216 else//上下行不等,記錄
217 {
218 if (Start != End) {
219 for (int n = Start; n < End; n++) {
220 ICell tempcell=sheet.GetRow(n).GetCell(2);
221 tempcell.SetCellValue(""+( End-Start+1 ));
222 tempcell.CellStyle = dateStyle;
223 }
224 for (int m = 1; m < 5; m++) {
225 CellRangeAddress region = new CellRangeAddress(Start, End, m,m);
226 sheet.AddMergedRegion(region);
227 }
228 
229 }
230 Start = i;
231 End = i;
232 temp = cellText;
233 }
234 }
235 
236 }
237 }
238 workbook.Write(ms);
239 return ms;
240 }
241 }
NPOIHelper

 使用方法是:

NPOIHelper.OpenWorkBook();
DataTable dt=EconomicHelper4.GetSumProjectManager();
NPOIHelper.Export(dt,“管理");                          //Export1用於生成DataTable
DataTable dt2 = EconomicHelper4.GetExtensionProjectManager();
MemoryStream ms = NPOIHelper.Export2(dt2, "數據");            //Export2用於合併單元格  
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
Response.BinaryWrite(ms.ToArray());
ms.Close();
ms.Dispose();
NPOIHelper.CloseWorkBook();


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

-Advertisement-
Play Games
更多相關文章
  • 一、什麼是SSH? 簡單說,SSH是一種網路協議,用於電腦之間的加密登錄。 如果一個用戶從本地電腦,使用SSH協議登錄另一臺遠程電腦,我們就可以認為,這種登錄是安全的,即使被中途截獲,密碼也不會泄露。 最早的時候,互聯網通信都是明文通信,一旦被截獲,內容就暴露無疑。1995年,芬蘭學者Tatu
  • 1. 先編輯一個解壓腳本ins.sh 1 #!/bin/bash 2 preline=10 3 line=`wc -l $0|awk '{print $1}'` 4 line=`expr $line - $preline` 5 tail -n $line $0 |tar xz -C ./ 6 #do
  • 安裝 Centos 7後, 習慣性的安裝 Xmanager 3或4, 都不能正常工作, 無奈之下開始安裝 VNCServer。 (個人習慣使用Xmanager, 因為不需要安裝,只要配置一下就能用, 而且一直很穩定) 為了節省以後安裝 vncserver 的時間,寫這篇文章作備忘用 安裝/配置: 使
  • 這是一個關於怎樣在你的 CentOS 7 上安裝配置 VNC 服務的教程。當然這個教程也適合 RHEL 7 。在這個教程里,我們將學習什麼是 VNC 以及怎樣在 CentOS 7 上安裝配置 VNC 伺服器 。 我們都知道 這是一個關於怎樣在你的 CentOS 7 上安裝配置 VNC 服務的教程。當
  • 【一些前言廢話】一名web開發尤其是後端不懂LAMP環境的搭建,那就攤上事了,有些人說他一直用win下的wampServer這種傻瓜式環境搭建,用的挺好的,也有人說他用雲伺服器,搭配“一鍵搭建LAMP環境”大法也挺好用的,是的,這些在初學的時候都是可以先用上的,但是“不知其所以然”的習慣一旦養成,很
  • 作者:r1ce 原創作品轉載請註明出處 《Linux內核分析》 MOOC課程http://mooc.study.163.com/course/USTC-1000029000 關於電腦是如何工作的,這是一個容易概括卻難以詳解的問題。大家非常清楚的馮諾依曼體系,以存儲程式為最重要的特性,實際上就是CP
  • 在linux環境下輸入getevent命令遙控器按一個鍵,出現的第二行,第二個數,就是這個鍵對應的16進位,轉成10進位之後放入system\usr\keylayout\Vendor_2389_Product_00a8_Version_0200.kl文件中,然後讓這個鍵對應1,2,DPAD_UP,C
  • 添加 yum 源 Centos 6.x 的源 # rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # rpm -Uvh http://rpms.famillecollet
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...