NPOI开源地址:http://npoi.codeplex.com/

NPOI教程: http://tonyqus.sinaapp.com/

具体的不在这里写了,感兴趣的可以去官网。

先来说导出的例子

private void ExportExcel()
{
DataTable table_data = MAYIXUE.BLL.NPOIUtility.GetValue(); HSSFWorkbook hssfworkbook = new HSSFWorkbook();
ISheet sheet1 = hssfworkbook.CreateSheet("mayixue的NPOI测试1"); ICellStyle cellStyle = hssfworkbook.CreateCellStyle();
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");
ICellStyle stringStyle = hssfworkbook.CreateCellStyle();
stringStyle.VerticalAlignment = VerticalAlignment.CENTER; //取得列宽
int columnCount = table_data.Columns.Count;
int[] arrColWidth = new int[columnCount];
int width = ;
foreach (DataColumn column in table_data.Columns)
{
arrColWidth[column.Ordinal] = width;
} int rowIndex = ;
string temp_col1 = "";
int col1_s = ; foreach (DataRow row in table_type.Rows)
{
#region 新建表,填充列头,样式
if (rowIndex == || rowIndex == )
{
if (rowIndex != )
{
sheet1 = hssfworkbook.CreateSheet();
} #region 列头及样式 IRow headerRow = sheet1.CreateRow(); ICellStyle headStyle = hssfworkbook.CreateCellStyle();
headStyle.Alignment = HorizontalAlignment.CENTER;
headStyle.VerticalAlignment = VerticalAlignment.CENTER; IFont font = hssfworkbook.CreateFont();
font.FontHeightInPoints = ;
font.Boldweight = ;
headStyle.SetFont(font); foreach (DataColumn column in table_type.Columns)
{
headerRow.CreateCell(column.Ordinal).SetCellValue(Convert.ToInt32(column.ColumnName)); headerRow.GetCell(column.Ordinal).CellStyle = headStyle;
sheet1.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + ) * );//设置列宽 } #endregion rowIndex = ;
}
#endregion #region 填充内容 int j = ;
IRow dataRow = sheet1.CreateRow(rowIndex);
foreach (DataColumn column in table_data.Columns)
{
ICell newCell = dataRow.CreateCell(column.Ordinal); string drValue = row[column].ToString(); switch (column.DataType.ToString())
{
case "System.String"://字符串类型
newCell.SetCellValue(drValue);
newCell.CellStyle = stringStyle;
break;
case "System.Double":
if (drValue != "")
{
double doubV = ;
double.TryParse(drValue, out doubV);
newCell.SetCellValue(doubV);
}
else
{
newCell.SetCellValue("");
}
newCell.CellStyle = cellStyle;
break;
} #region 单元格合并(这里只合并第一列) if (j == && temp_col1 != drValue)
{
if (temp_col1 != "")
{
sheet1.AddMergedRegion(new CellRangeAddress(col1_s, rowIndex - , , ));
}
temp_c1 = drValue;
col1_s = rowIndex;
} #endregion j++;
}
#endregion rowIndex++;
} //冻结窗口 锁定表头和第一列
sheet1.CreateFreezePane(, , , ); //输出
context.Response.ContentType = "application/vnd.ms-excel";
context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "mayixue的NPOI测试.xls"));
context.Response.Clear(); MemoryStream file = new MemoryStream();
hssfworkbook.Write(file);
file.WriteTo(context.Response.OutputStream);
context.Response.End();
}

再来看下导入Excel到DataTable

/// <summary>
/// 读取Excel文件到DataSet中
/// </summary>
/// <param name="filePath">文件路径</param>
/// <returns></returns>
private DataTable ExcelToDataTable(string filePath)
{
DataTable dt = new DataTable(); HSSFWorkbook hssfworkbook;
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
hssfworkbook = new HSSFWorkbook(file);
}
ISheet sheet = hssfworkbook.GetSheetAt();
System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); IRow headerRow = sheet.GetRow();
int cellCount = headerRow.LastCellNum; for (int j = ; j < cellCount; j++)
{
ICell cell = headerRow.GetCell(j);
dt.Columns.Add(cell.ToString());
} for (int i = (sheet.FirstRowNum + ); i <= sheet.LastRowNum; i++)
{
IRow row = sheet.GetRow(i);
DataRow dataRow = dt.NewRow(); for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
dataRow[j] = row.GetCell(j).ToString();
} dt.Rows.Add(dataRow);
}
return dt;
}

NPOI升级后语法上有些变动(这个例子中红色标注地方),(我是从1.2.2直接更新到2.0的,期间发生过什么这里不做描述)

这个例子的实现,离不开优秀文章的帮助,在这里向作者表示感谢。

参考文章:

.net 使用NPOI或MyXls把DataTable导出到Excel

NPOI - Initialisation of record 0x862 left 2 bytes remaining still to be read.

POI设置EXCEL单元格格式为文本、小数、百分比、货币、日期、科学计数法和中文大写

用NPOI操作EXCEL--锁定列

.NET使用NPOI2.0导入导出Excel的更多相关文章

  1. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  2. thinkphp导入导出excel表单数据

    在PHP项目经常要导入导出Excel表单. 先去下载PHPExcel类库文件,放到相应位置. 我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/ 导入 在页面上传e ...

  3. 导入导出Excel工具类ExcelUtil

    前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...

  4. Java利用POI导入导出Excel中的数据

         首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地 ...

  5. jxl导入/导出excel

    1.jxl导入/导出excel案例,黏贴即可运行 package junit.test; import java.io.File; import java.io.IOException; import ...

  6. 从SQL Server中导入/导出Excel的基本方法(转)

    从sql server中导入/导出 excel 的基本方法 /*=========== 导入/导出 excel 的基本方法 ===========*/ 从excel文档中,导入数据到sql数据库中,很 ...

  7. C#导入导出Excel表的数据

    一:C#导入导出EXCEL文件的类 代码如下: 首先将Microsoft Excel 14.0 Object Library 引用导入 using System; using System.Data; ...

  8. Aspose.Cells.dll引用导入导出Excel

    Aspose.Cells 导入导出EXCEL 文章出处:http://hi.baidu.com/leilongbing/item/c11467e1819e5417595dd8c1 修改样式       ...

  9. Aspose.Cells 导入导出EXCEL(转)

    Aspose.Cells 导入导出EXCEL      修改样式        Workbook workbook = new Workbook(); //工作簿          Worksheet ...

随机推荐

  1. 《WePayUI组件设计的秘密》——2016年第一届前端体验大会分享

    本文是博主参加第一届前端体验大会 | 物勒工名做的分享<WePayUI组件设计的秘密>,内容主要分为2个部分: 一.浅析UI库/框架的未来 讨论的UI库或者框架,主要包含展示和交互的css ...

  2. BZOJ 2154: Crash的数字表格 [莫比乌斯反演]

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2924  Solved: 1091[Submit][Status][ ...

  3. url中的特殊符号含义

    1. # 10年9月,twitter改版.一个显著变化,就是URL加入了"#!"符号.比如,改版前的用户主页网址为http://twitter.com/username改版后,就变 ...

  4. swift 简介和常量与变量 --- swift 入门

    一.思维导图 二. 代码 //创建UIView 和按钮 let views = UIView(frame: CGRect(x:20, y: 20, width: 100, height: 100))/ ...

  5. [LeetCode] Maximum Size Subarray Sum Equals k 最大子数组之和为k

    Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...

  6. C#文件帮助类FoderHelper

    using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; us ...

  7. http 413 wcf

    在网上搜到413的解决办法有多种,看具体项目找到对应的解决办法 如果是wcf返回的413,与serverRuntime无关,只要在Binding中设置最大接收值即可, <binding name ...

  8. 【Quartz】将定时任务持久化到数据库

    之前的文章所做的demo是将定时任务的信息保存在内存中的,见以下配置 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore 如果,我们需要在 ...

  9. iOS学习-圆形进度条

    效果: #import <UIKit/UIKit.h> @interface HsProfitRatePieWidgets : UIView { UILabel *_textLabel; ...

  10. vuex(1.0版本写法)

    Vuex 是一个专门为 Vue.js 应用所设计的集中式状态管理架构. 官方文档:http://vuex.vuejs.org/zh-cn/  2.0和1.0都能在此找到 每一个 Vuex 应用的核心就 ...