NPOIHelper.cs (NPOI 2.1.1)

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Data;
  6 using System.IO;
  7 using NPOI.XSSF.UserModel;
  8 using NPOI.SS.UserModel;
  9
 10 namespace NetLib
 11 {
 12     public static class NPOIHelper
 13     {
 14         public static void ExportToFile(DataSet dataSet, string fileFullPath)
 15         {
 16             List<DataTable> dts = new List<DataTable>();
 17             foreach (DataTable dt in dataSet.Tables) dts.Add(dt);
 18             ExportToFile(dts, fileFullPath);
 19         }
 20         public static void ExportToFile(DataTable dataTable, string fileFullPath)
 21         {
 22             List<DataTable> dts = new List<DataTable>();
 23             dts.Add(dataTable);
 24             ExportToFile(dts, fileFullPath);
 25         }
 26         public static void ExportToFile(IEnumerable<DataTable> dataTables, string fileFullPath)
 27         {
 28             IWorkbook workbook = new XSSFWorkbook();
 29             int i = 0;
 30             foreach(DataTable dt in dataTables)
 31             {
 32                 string sheetName = string.IsNullOrEmpty(dt.TableName)
 33                     ? "Sheet " + (++i).ToString()
 34                     : dt.TableName;
 35                 ISheet sheet = workbook.CreateSheet(sheetName);
 36
 37                 IRow headerRow = sheet.CreateRow(0);
 38                 for (int j = 0; j < dt.Columns.Count; j++)
 39                 {
 40                     string columnName = string.IsNullOrEmpty(dt.Columns[j].ColumnName)
 41                         ? "Column " + j.ToString()
 42                         : dt.Columns[j].ColumnName;
 43                     headerRow.CreateCell(j).SetCellValue(columnName);
 44                 }
 45
 46                 for (int a = 0; a < dt.Rows.Count; a++)
 47                 {
 48                     DataRow dr = dt.Rows[a];
 49                     IRow row = sheet.CreateRow(a + 1);
 50                     for (int b = 0; b < dt.Columns.Count; b++)
 51                     {
 52                         row.CreateCell(b).SetCellValue(dr[b] != DBNull.Value ? dr[b].ToString() : string.Empty);
 53                     }
 54                 }
 55             }
 56
 57             using (FileStream fs = File.Create(fileFullPath))
 58             {
 59                 workbook.Write(fs);
 60             }
 61         }
 62
 63         public static List<DataTable> GetDataTablesFrom(string xlsxFile)
 64         {
 65             if (!File.Exists(xlsxFile))
 66                 throw new FileNotFoundException("文件不存在");
 67
 68             List<DataTable> result = new List<DataTable>();
 69             Stream stream = new MemoryStream(File.ReadAllBytes(xlsxFile));
 70             IWorkbook workbook = new XSSFWorkbook(stream);
 71             for (int i = 0; i < workbook.NumberOfSheets; i++)
 72             {
 73                 DataTable dt = new DataTable();
 74                 ISheet sheet = workbook.GetSheetAt(i);
 75                 IRow headerRow = sheet.GetRow(0);
 76
 77                 int cellCount = headerRow.LastCellNum;
 78                 for (int j = headerRow.FirstCellNum; j < cellCount; j++)
 79                 {
 80                     DataColumn column = new DataColumn(headerRow.GetCell(j).StringCellValue);
 81                     dt.Columns.Add(column);
 82                 }
 83
 84                 int rowCount = sheet.LastRowNum;
 85                 for (int a = (sheet.FirstRowNum + 1); a < rowCount; a++)
 86                 {
 87                     IRow row = sheet.GetRow(a);
 88                     if (row == null) continue;
 89
 90                     DataRow dr = dt.NewRow();
 91                     for (int b = row.FirstCellNum; b < cellCount; b++)
 92                     {
 93                         if (row.GetCell(b) == null) continue;
 94                         dr[b] = row.GetCell(b).ToString();
 95                     }
 96
 97                     dt.Rows.Add(dr);
 98                 }
 99                 result.Add(dt);
100             }
101             stream.Close();
102
103             return result;
104         }
105     }
106 }

NPOI 项目: http://npoi.codeplex.com/

本地下载:http://files.cnblogs.com/bruceleeliya/NPOI2.1.1.zip

时间: 2024-10-15 14:52:35

NPOIHelper.cs (NPOI 2.1.1)的相关文章

NPOIHelper.cs

using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; n

NPOI操作Excel 002:读取Excel

本文讲述如何通过NPOI来读取Excel.需要准备的dll见:http://blog.csdn.net/yysyangyangyangshan/article/details/42614181环境.net2.0,Excel版本2003.NPOI读取Excel比较简单,只要抓住Excel的几个主要点即可.一般Excel通过这几部分构成的,book,sheet页,然后是sheet页里的行列.读取Excel则是先找到book,然后book内的sheet,之后就根据sheet里的第几行第几列进行读取内容

Topshelf+Quartz.net+Dapper+Npoi(二)

quartznet 上篇说到quartznet这个东东,topshelf+quartznet有很多不错的文章,可以查看七七同学的文章(http://www.cnblogs.com/jys509/p/4628926.html).这里我主要说说cron表达式,如果玩过linux下定时任务的肯定不陌生. 官方英文介绍地址:http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.html cron exp

到处到Excel中NPOI

源地址:http://www.cnblogs.com/dreamof/archive/2010/06/02/1750151.html\ 1.NPOI官方网站:http://npoi.codeplex.com/ 可以到此网站上去下载最新的NPOI组件版本 2.NPOI在线学习教程(中文版): http://www.cnblogs.com/tonyqus/archive/2009/04/12/1434209.html 感谢Tony Qu分享出NPOI组件的使用方法 3..NET调用NPOI组件导入导

基于NPOI的Excel数据导入

从Excel导入数据最令人头疼的是数据格式的兼容性,特别是日期类型的兼容性.为了能够无脑导入日期,折腾了一天的NPOI.在经过测试确实可以导入任意格式的合法日期后,写下这篇小文,与大家共享.完整代码请移步:https://github.com/xuanbg/Utility 概述: 这个帮助类是一个泛型类,泛型参数对应的实体类还起到模板的作用.如果你的Excel文件使用与实体类不同的列标题的话,可以通过给属性加上Alias特性,将列标题和属性进行对应.例如: Excel格式如图: 实体类: 1 u

NPOI导入excel为datatable (xls xlsx xlsm)

使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中 http://www.cnblogs.com/songrun/p/3547738.html NPOI 2.0教程 – 自动识别Excel 2003或2007格式 http://tonyqus.sinaapp.com/archives/482 NPOI 2.0 教程 http://tonyqus.sinaapp.com/npoi2tutorial using System; using System.Collection

npoi批量

npoi批量导入实现及相关技巧 批量导入功能对于大部分后台系统来说都是不可或缺的一部分,常见的场景-基础数据的录入(部门,用户),用批量导入方便快捷.最近项目需要用到批量导入,决定花点时间写套比较通用的Excel导入功能.经过考虑,最终的实现需要达到 1.不同业务导入无需考虑npoi相关操作,只需要关注自己的业务逻辑,这里的业务逻辑最重要的两点(数据校验和数据保存)  2.导入异常(模板不匹配,数据填写错误...),提醒信息准确精细,达到帮助用户修正数据的目地 在线体验地址:http://tm.

NPOI操作excel——利用反射机制,NPOI读取excel数据准确映射到数据库字段

> 其实需求很明确,就是一大堆不一样的excel,每张excel对应数据库的一张表,我们需要提供用户上传excel,我们解析数据入库的功能实现. 那么,这就涉及到一个问题:我们可以读出excel的表头,但是怎么知道每个表头具体对应数据库里面的字段呢? 博主经过一段时间的思考与构思,想到一法:现在的情况是我们有excel表A,对应数据库表B,但是A与B具体属性字段的映射关系我们不知.那我们是不是可以有一个A到B的映射文件C呢? 我想,说到这,大家就很明了了... 第一步:为每张excel创建一个与

NPOIHelper

1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.IO; 5 using System.Text; 6 using System.Web; 7 using NPOI; 8 using NPOI.HPSF; 9 using NPOI.HSSF; 10 using NPOI.HSSF.UserModel; 11 using NPOI.HSSF.Util; 12 using N