.NET架构基础方法—DataTableToExcel通用方法(NPOI)

今天封装DataTaleToExcel通用方法,也是大家开发中特别常用的。首先去下载NPOI,链接http://npoi.codeplex.com/ ,使用包中的net4.0版本的dll,全部引用。官网中已经给了足够的示例,我只拿来异步分,给类命名为ExcelTools.cs 。下面上代码

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Data;
  4 using System.IO;
  5 using System.Linq;
  6 using System.Text;
  7 using System.Threading.Tasks;
  8 using NPOI.HPSF;
  9 using NPOI.HSSF.UserModel;
 10
 11 namespace CommonUtilities
 12 {
 13     public static class ExcelTools
 14     {
 15         public static HSSFWorkbook workbook;
 16
 17         public static void InitializeWorkbook()
 18         {
 19             ////create a entry of DocumentSummaryInformation
 20             if (workbook == null)
 21                 workbook = new HSSFWorkbook();
 22         }
 23         #region
 24         /// <summary>
 25         /// 将DataTable转成Stream输出.
 26         /// </summary>
 27         /// <param name="SourceTable">The source table.</param>
 28         /// <returns></returns>
 29         public static Stream RenderDataTableToExcel(DataTable SourceTable)
 30         {
 31             workbook = new HSSFWorkbook();
 32             InitializeWorkbook();
 33             MemoryStream ms = new MemoryStream();
 34             HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet();
 35             HSSFRow headerRow = (HSSFRow)sheet.CreateRow(0);
 36
 37             // handling header.
 38             foreach (DataColumn column in SourceTable.Columns)
 39                 headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
 40
 41             // handling value.
 42             int rowIndex = 1;
 43
 44             foreach (DataRow row in SourceTable.Rows)
 45             {
 46                 HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);
 47
 48                 foreach (DataColumn column in SourceTable.Columns)
 49                 {
 50                     dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
 51                 }
 52
 53                 rowIndex++;
 54             }
 55
 56             workbook.Write(ms);
 57             ms.Flush();
 58             ms.Position = 0;
 59
 60             sheet = null;
 61             headerRow = null;
 62             workbook = null;
 63
 64             return ms;
 65         }
 66
 67
 68         public static void WriteSteamToFile(MemoryStream ms, string FileName)
 69         {
 70             FileStream fs = new FileStream(FileName, FileMode.Create, FileAccess.Write);
 71             byte[] data = ms.ToArray();
 72
 73             fs.Write(data, 0, data.Length);
 74             fs.Flush();
 75             fs.Close();
 76
 77             data = null;
 78             ms = null;
 79             fs = null;
 80         }
 81         public static void WriteSteamToFile(byte[] data, string FileName)
 82         {
 83             FileStream fs = new FileStream(FileName, FileMode.Create, FileAccess.Write);
 84             fs.Write(data, 0, data.Length);
 85             fs.Flush();
 86             fs.Close();
 87             data = null;
 88             fs = null;
 89         }
 90         public static Stream WorkBookToStream(HSSFWorkbook InputWorkBook)
 91         {
 92             MemoryStream ms = new MemoryStream();
 93             InputWorkBook.Write(ms);
 94             ms.Flush();
 95             ms.Position = 0;
 96             return ms;
 97         }
 98         public static HSSFWorkbook StreamToWorkBook(Stream InputStream)
 99         {
100             HSSFWorkbook WorkBook = new HSSFWorkbook(InputStream);
101             return WorkBook;
102         }
103         public static HSSFWorkbook MemoryStreamToWorkBook(MemoryStream InputStream)
104         {
105             HSSFWorkbook WorkBook = new HSSFWorkbook(InputStream as Stream);
106             return WorkBook;
107         }
108         public static MemoryStream WorkBookToMemoryStream(HSSFWorkbook InputStream)
109         {
110             //Write the stream data of workbook to the root directory
111             MemoryStream file = new MemoryStream();
112             InputStream.Write(file);
113             return file;
114         }
115         public static Stream FileToStream(string FileName)
116         {
117             FileInfo fi = new FileInfo(FileName);
118             if (fi.Exists == true)
119             {
120                 FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Read);
121                 return fs;
122             }
123             else return null;
124         }
125         public static Stream MemoryStreamToStream(MemoryStream ms)
126         {
127             return ms as Stream;
128         }
129         #endregion
130         #region
131
132         /// <summary>
133         /// 将DataTable转成Workbook(自定资料形态)输出.
134         /// </summary>
135         /// <param name="SourceTable">The source table.</param>
136         /// <returns></returns>
137         public static HSSFWorkbook RenderDataTableToWorkBook(DataTable SourceTable)
138         {
139             workbook = new HSSFWorkbook();
140             InitializeWorkbook();
141             MemoryStream ms = new MemoryStream();
142             HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet();
143             HSSFRow headerRow = (HSSFRow)sheet.CreateRow(0);
144
145             // handling header.
146             foreach (DataColumn column in SourceTable.Columns)
147                 headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
148
149             // handling value.
150             int rowIndex = 1;
151
152             foreach (DataRow row in SourceTable.Rows)
153             {
154                 HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);
155
156                 foreach (DataColumn column in SourceTable.Columns)
157                 {
158                     dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
159                 }
160
161                 rowIndex++;
162             }
163             return workbook;
164         }
165
166         /// <summary>
167         /// 将DataTable资料输出成Excel.
168         /// </summary>
169         /// <param name="SourceTable">The source table.</param>
170         /// <param name="FileName">Name of the file.</param>
171         public static void RenderDataTableToExcel(DataTable SourceTable, string FileName)
172         {
173             MemoryStream ms = RenderDataTableToExcel(SourceTable) as MemoryStream;
174             WriteSteamToFile(ms, FileName);
175         }
176
177         /// <summary>
178         /// 從位元读取取资料到DataTable.
179         /// </summary>
180         /// <param name="ExcelFileStream">The excel file stream.</param>
181         /// <param name="SheetName">Name of the sheet.</param>
182         /// <param name="HeaderRowIndex">Index of the header row.</param>
183         /// <param name="HaveHeader">if set to <c>true</c> [have header].</param>
184         /// <returns></returns>
185         public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, string SheetName, int HeaderRowIndex, bool HaveHeader)
186         {
187             workbook = new HSSFWorkbook(ExcelFileStream);
188             InitializeWorkbook();
189             HSSFSheet sheet = (HSSFSheet)workbook.GetSheet(SheetName);
190
191             DataTable table = new DataTable();
192
193             HSSFRow headerRow = (HSSFRow)sheet.GetRow(HeaderRowIndex);
194             int cellCount = headerRow.LastCellNum;
195
196             for (int i = headerRow.FirstCellNum; i < cellCount; i++)
197             {
198                 string ColumnName = (HaveHeader == true) ? headerRow.GetCell(i).StringCellValue : "f" + i.ToString();
199                 DataColumn column = new DataColumn(ColumnName);
200                 table.Columns.Add(column);
201             }
202
203             int rowCount = sheet.LastRowNum;
204             int RowStart = (HaveHeader == true) ? sheet.FirstRowNum + 1 : sheet.FirstRowNum;
205             for (int i = RowStart; i <= sheet.LastRowNum; i++)
206             {
207                 HSSFRow row = (HSSFRow)sheet.GetRow(i);
208                 DataRow dataRow = table.NewRow();
209
210                 for (int j = row.FirstCellNum; j < cellCount; j++)
211                     dataRow[j] = row.GetCell(j).ToString();
212             }
213
214             ExcelFileStream.Close();
215             workbook = null;
216             sheet = null;
217             return table;
218         }
219
220         /// <summary>
221         /// 從位元流读取资料到DataTable.
222         /// </summary>
223         /// <param name="ExcelFileStream">The excel file stream.</param>
224         /// <param name="SheetIndex">Index of the sheet.</param>
225         /// <param name="HeaderRowIndex">Index of the header row.</param>
226         /// <param name="HaveHeader">if set to <c>true</c> [have header].</param>
227         /// <returns></returns>
228         public static DataTable RenderDataTableFromExcel(Stream ExcelFileStream, int SheetIndex, int HeaderRowIndex, bool HaveHeader)
229         {
230             workbook = new HSSFWorkbook(ExcelFileStream);
231             InitializeWorkbook();
232             HSSFSheet sheet = (HSSFSheet)workbook.GetSheetAt(SheetIndex);
233
234             DataTable table = new DataTable();
235
236             HSSFRow headerRow = (HSSFRow)sheet.GetRow(HeaderRowIndex);
237             int cellCount = headerRow.LastCellNum;
238
239             for (int i = headerRow.FirstCellNum; i < cellCount; i++)
240             {
241                 string ColumnName = (HaveHeader == true) ? headerRow.GetCell(i).StringCellValue : "f" + i.ToString();
242                 DataColumn column = new DataColumn(ColumnName);
243                 table.Columns.Add(column);
244             }
245
246             int rowCount = sheet.LastRowNum;
247             int RowStart = (HaveHeader == true) ? sheet.FirstRowNum + 1 : sheet.FirstRowNum;
248             for (int i = RowStart; i <= sheet.LastRowNum; i++)
249             {
250                 HSSFRow row = (HSSFRow)sheet.GetRow(i);
251                 DataRow dataRow = table.NewRow();
252
253                 for (int j = row.FirstCellNum; j < cellCount; j++)
254                 {
255                     if (row.GetCell(j) != null)
256                         dataRow[j] = row.GetCell(j).ToString();
257                 }
258
259                 table.Rows.Add(dataRow);
260             }
261
262             ExcelFileStream.Close();
263             workbook = null;
264             sheet = null;
265             return table;
266         }
267         #endregion
268     }
269 }

View Code

有了这段代码之后,我们希望进一步封装,新建一个DataTableRender.cs类,在这个类中,我只封装出一个方法,其他方法都可以通过调用ExcelTools.cs类中的方法来进一步封装。代码如下:

 public static class DataTableRender{/// <summary>/// /// </summary>/// <param name="dt">DataTable</param>/// <param name="path">当前 FileStream 对象将封装的文件的相对路径或绝对路径。</param>public static void DateTableToExcel(DataTable dt, string path){MemoryStream stream = (MemoryStream)ExcelTools.RenderDataTableToExcel(dt);byte[] buffer = stream.ToArray();using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write)){fs.Write(buffer, 0, buffer.Length);fs.Flush();}}}

就这样简单的方便了你今后的开发。

.NET基础架构方法—DataTableToExcel通用方法相关推荐

  1. jquery-自定义通用方法-jquery通用方法-所有对象的通用方法

    $对象拓展方法 定义方式 $.each({ 键:函数 })使用方式 $.键() >演示过程 还记得$的each方法吗 我们可以给$添加方法 演示步骤: 初始,是没有pyhui这个方法的 接下来, ...

  2. Android基础之结束所有Activity通用方法

    出处:http://blog.csdn.net/chenliguan/article/details/47295163 一.问题描述 做Android项目,退出程序时,有时不能退出所有的activit ...

  3. aws terraform_如何使用Terraform管理您的AWS基础架构

    aws terraform 什么是Terraform? (What is Terraform?) Hashicorp Terraform Hashicorp Terraform Hashicorp T ...

  4. VMware Horizon 8 2303 - 虚拟桌面基础架构 (VDI) 和应用软件

    请访问原文链接:https://sysin.org/blog/vmware-horizon-8/,查看最新版.原创作品,转载请保留出处. 作者主页:sysin.org Version 2303 Doc ...

  5. 云基础架构安全_这是使您的云基础架构稳定,安全和可扩展的方法。

    云基础架构安全 启动DevOps很难 (Startup DevOps is hard) There are a lot of things to worry about as a startup. M ...

  6. Java基础知识之方法的通用格式、注意事项与带参数的方法

    文章目录 一.方法调用过程 二.带参数的方法 三.方法的通用格式 一.方法调用过程 1.方法定义 public static void 方法名(){//方法体 } 2.方法调用过程 图片:@黑马程序员 ...

  7. 不止中台:全面的架构演进趋势和方法

    付老师这篇一万四千字的长文,有不少独创性的真知灼见.比如中台实施组合拳,不拘泥一家.EBA vs DDD等.在十万加爽文式快餐阅读更容易被follow的时代,本文重发,谨以此献给能读懂或者打算读懂的读 ...

  8. 终于,「最近邻搜索」有通用方法了

    作者:Kevin Hartnett 编译:Bing 如果你打算开一家咖啡馆,你一定想知道:"附近最近的一家咖啡馆在哪?"了解这些信息有助于应对商业竞争. 这种现象是计算机科学中广泛 ...

  9. 【CORE JAVA】反射应用:通用方法-扩展数组长度

    为什么80%的码农都做不了架构师?>>>    /** * 通用数组扩展方法 * 可以使用Object类型的变量引用任何类型的对象 * 用Array.newInstance(comp ...

最新文章

  1. PCL点云配准(2)
  2. Mysql主从同步异常处理
  3. 如何利用MongoDB实现高性能,高可用的双活应用架构?
  4. freemarker小例子
  5. 各类科技活动获奖公示网站
  6. Java流程控制03 循环结构 While循环 DoWhile循环 For循环 增强型For循环
  7. Android 系统编译环境设置及源代码编译
  8. 20175213 2018-2019-2 《Java程序设计》第3周学习总结
  9. 架构师必备!java架构师资格证书
  10. 赛尔号星球大战游戏攻略
  11. JVM虚拟机与Android虚拟机
  12. 电脑连接移动设备android驱动程序,安卓手机连接电脑操作最简单的方法介绍
  13. UART串口通信协议
  14. 计算机技术与软件业余资格测验证书,在大学能否领到网络工程师资格证?网络工程师考核..._出版资格_帮考网...
  15. Python基于pyzbar、opencv、pyqt5库,实现二维码识别 gui 应用程序开发
  16. 【历史上的今天】12 月 3 日:世界上第一条短信;Fortran 语言之父诞生;百度贴吧上线
  17. log4j2 pattern详解
  18. 2022 apollo感知深度访谈简记
  19. python网络编程初级总结(1)
  20. 贵金属白银走势图分析怎么入手?

热门文章

  1. 如何确定图片名未改变 php,这里未改变的是数据库中默认的数据,比如修改时间?,还有发布用户名?...
  2. java报表的导出excel_java导出excel报表
  3. linux脚本登录启动失败,在Linux上检查用户登录成功与失败的shell脚本
  4. xadmin 显示外键字段
  5. 【BZOJ3684】大朋友和多叉树(拉格朗日反演)
  6. 汇编语言之第六章包含多个段的程序
  7. [leetcode]207. Course Schedule课程表
  8. HDFS Federation
  9. Posix线程编程指南(4) 线程终止
  10. Grunt 入门指南3:创建Tasks