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

p {
display: block;
margin: 3px 0 0 0;
}

-->

.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 }

有了这段代码之后,我们希望进一步封装,新建一个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();
            }
        }
    }

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

时间: 2025-01-02 06:32:55

.NET基础架构方法—DataTableToExcel通用方法的相关文章

.NET基础架构方法—DataTableToList通用方法

p { display: block; margin: 3px 0 0 0; } --> .NET架构基础方法—DataTableToList通用方法 我们经常需要将从数据库中所读取的数据以DataTable类型返回,也经常需要遍历DataTable转换为List>T<.我们也经常需要为每一个DataTable转换为List单独编写适合他们数据库架构地方法.下面上代码: public static class DataTableTools<T> where T : class

Effective java经验之谈,通用方法

对于通用方法,其实应用的场景是比较多的,我们在写一个类的时候,就要考虑是否要编写该方法的通用方法.这使得我们为以后该类的扩展性与使用方面提供很大的便利. 1.      覆盖equals时请遵守通用约定.自反性,对称性,传递性,一致性,非空性.编写子类equals的方法的时候,可以考虑是否可以用复合,不使用继承来解决问题.Instanceof进行参数检测,如果参数null,也将返回false. 2.      覆盖equals时总要覆盖hashCode. 1.对象属性不变化,返回的hashcod

微软云基础架构Hyper-scale Datacenter

每天醒来,可能很多人的习惯都是打开手机,看看微信,刷刷朋友圈,或者看看新闻,去咖啡店,打开电脑搜索一些关键字,观看视频,电视剧--可是你有没有想过你每一次键盘的敲击,每一次微信的语音的发送,数据会流向哪里,会怎么传播,我们怎么会快速的得到离我最近的餐厅信息?事实上,你所使用的所有这些服务,都运行在一个个的数据中心中,而数据中心正是信息世界中数据交换,流动,计算的心脏. 越来越多的大型IT公司将自己的数据中心和云端基础设施作为其重要的战略资产和核心竞争力的一部分,也有人可能看到过网上流出的goog

微软云基础架构 Hyper-scale Datacenter

每天醒来,可能很多人的习惯都是打开手机,看看微信,刷刷朋友圈,或者看看新闻,去咖啡店,打开电脑搜索一些关键字,观看视频,电视剧--可是你有没有想过你每一次键盘的敲击,每一次微信的语音的发送,数据会流向哪里,会怎么传播,我们怎么会快速的得到离我最近的餐厅信息?事实上,你所使用的所有这些服务,都运行在一个个的数据中心中,而数据中心正是信息世界中数据交换,流动,计算的心脏. 越来越多的大型IT公司将自己的数据中心和云端基础设施作为其重要的战略资产和核心竞争力的一部分,也有人可能看到过网上流出的goog

Java远程过程调用基础:构建可自适应的动态代理对象的通用方法

[toc] Java远程过程调用基础:构建可自适应的动态代理对象的通用方法 前言 关于动态代理的知识,这里不再过多说明.这里要介绍的是,如何创建一个可自适应任意接口的动态代理对象的通用方法,也就是说,引用对象可为任意接口,举个例子,假如返回动态代理对象的方法是getProxy,而同时存在两个接口UserInterface和ProductInterface,这时可以这样使用: UserInterface user = getProxy(UserInterface.class); ProductIn

华为荣耀3C最新版ROM的root,(4.7.1和4.8.1等等通用方法)

手头一台honor 3c的机器,应该是线刷的时候,把IMEI给刷掉了,导致移动2G卡无法上网.刷了4.7.1或者4.8.1,尝试了所有方法都root失败了. 正好我手头有6582的代码,我想,既然系统没有root权限,那么我自己编一个工程版的rom,然后把boot.img的中的ramdisk提取了, 然后,用这个ramdisk替代官方包里面的ramdisk,那么不就是一个工程版的rom吧 使用我上传的tools工具,成功分解合并完成.http://download.csdn.net/detail

面向对象二次整理(基础,属性引用,方法引用.绑定方法)

概念之类的去百度一下... 基础 类 属性 实例变量 类变量(默认共享) 私有属性(__var) 方法 构造方法 析构方法或析构函数 私有方法 对象: 实例化一个类之后得到的对象 封装 把一些功能的实现细节不对外暴露 类的初始化(__init__): 就是给对象定义一些自己的特征,不能有返回值 继承 代码的重用 单继承 多继承 2.7的经典类-->深度优先,新式类-->广度优先 3.x 均是广度优先 class Foo() 多态 接口重用,一种接口,多种实现 高级属性: 静态方法 与类无关,不

linux通用邻居基础架构

1.为每一个协议提供一个缓存来存放L3到L2的转换结果. 2.提供在缓存中添加.删除.改变和查找一个特定映射项的函数.查找函数必须要快,因为它会影响整个系统的性能. 3.为每一个协议缓存的数据项提供一种老化机制. 4.当缓存已满时并且正好要创建新的映射项时,提供选择替换策略. 5.为每一个邻居提供一个请求队列.当准备要发送一个封包并且其L2地址还不在地址缓存中是,就必须把这个封包放到缓冲区中,直到发出solicitation请求,并且收到应答.参见27章排队一节. 为了让每一种协议都适应邻居自系

hibernate学习笔记4---HQL、通用方法的抽取实现

一.通用方法的抽取实现 由于hibernate中对增删改查的一切操作都是面向对象的,所以将增删改查抽取成通用方法,以满足不同的表的增删改查操作,简化jdbc代码. 具体例子如下: [java] view plaincopyprint? package cn.itcast.hibernate; import java.io.Serializable; import org.hibernate.Session; import org.hibernate.SessionFactory; import