.Net Excel操作之NPOI(一)简介
一、NPOI简介
NPOI是一个开源项目,可以读/写xls,doc,ppt文件,有着广泛的应用。
使用NPOI能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作。
CodeFlex地址:http://npoi.codeplex.com/
Nuget地址:https://www.nuget.org/packages/NPOI
二、安装
Nuget命令
- Install-Package NPOI
或者使用Nuget包管理安装
安装结果:
三、Excel操作示例
1.Excel函数问题:
- Excel 2003版本,最大行数是65536行。
- HSSFWorkbook workbook = new HSSFWorkbook();
- Excel 2007版本以上,最大行数是1048576行。
- XSSFWorkbook workbook = new XSSFWorkbook();
2.创建Excel文件,并写入数据
- //创建工作簿
- HSSFWorkbook wk = new HSSFWorkbook();
- //创建名称为mySheet的表
- ISheet tb = wk.CreateSheet("mySheet");
- //创建第一行,此行为第二行
- IRow row = tb.CreateRow();
- for (int i = ; i < ; i++)
- {
- ICell cell = row.CreateCell(i); //创建单元格,写入数据
- cell.SetCellValue(i);
- }
- //保存到文件
- //打开一个xls文件,如果没有自行创建
- //如果存在则重新创建
- using (FileStream fs = File.OpenWrite(LocalPathHelper.GetCurrentData() + "\\testone.xls"))
- {
- wk.Write(fs);
- Console.WriteLine("导出数据成功!");
- }
3.创建Excel文件并设置单元格样式
- /// <summary>
- /// 创建xml 常用操作
- /// </summary>
- public static void TestTwo()
- {
- IWorkbook wb = new HSSFWorkbook();
- //创建表
- ISheet sh = wb.CreateSheet("zhiyuan");
- //设置单元的宽度
- sh.SetColumnWidth(, * );
- sh.SetColumnWidth(, * );
- sh.SetColumnWidth(, * );
- sh.SetColumnWidth(, * );
- int i = ;
- #region 练习合并单元格
- sh.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(, , , ));
- //CellRangeAddress()该方法的参数次序是:开始行号,结束行号,开始列号,结束列号。
- IRow row0 = sh.CreateRow();
- row0.Height = * ;
- ICell icell1top0 = row0.CreateCell();
- icell1top0.CellStyle = Getcellstyle(wb, stylexls.头);
- icell1top0.SetCellValue("标题合并单元");
- #endregion
- i++;
- #region 设置表头
- IRow row1 = sh.CreateRow();
- row1.Height = * ;
- ICell icell1top = row1.CreateCell();
- icell1top.CellStyle = Getcellstyle(wb, stylexls.头);
- icell1top.SetCellValue("网站名");
- ICell icell2top = row1.CreateCell();
- icell2top.CellStyle = Getcellstyle(wb, stylexls.头);
- icell2top.SetCellValue("网址");
- ICell icell3top = row1.CreateCell();
- icell3top.CellStyle = Getcellstyle(wb, stylexls.头);
- icell3top.SetCellValue("百度快照");
- ICell icell4top = row1.CreateCell();
- icell4top.CellStyle = Getcellstyle(wb, stylexls.头);
- icell4top.SetCellValue("百度收录");
- #endregion
- using (FileStream stm = File.OpenWrite(LocalPathHelper.GetCurrentData() + "\\site.xls"))
- {
- wb.Write(stm);
- Console.WriteLine("导出数据成功");
- }
- }
- #region 定义单元格常用到样式的枚举
- public enum stylexls
- {
- 头,
- url,
- 时间,
- 数字,
- 钱,
- 百分比,
- 中文大写,
- 科学计数法,
- 默认
- }
- #endregion
- #region 定义单元格常用到样式
- static ICellStyle Getcellstyle(IWorkbook wb, stylexls str)
- {
- ICellStyle cellStyle = wb.CreateCellStyle();
- //定义几种字体
- //也可以一种字体,写一些公共属性,然后在下面需要时加特殊的
- IFont font12 = wb.CreateFont();
- font12.FontHeightInPoints = ;
- font12.FontName = "微软雅黑";
- IFont font = wb.CreateFont();
- font.FontName = "微软雅黑";
- //font.Underline = 1;下划线
- IFont fontcolorblue = wb.CreateFont();
- fontcolorblue.Color = HSSFColor.OliveGreen.Blue.Index;
- fontcolorblue.IsItalic = true;//下划线
- fontcolorblue.FontName = "微软雅黑";
- //边框
- cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Dotted;
- cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Hair;
- cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Hair;
- cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Dotted;
- //边框颜色
- cellStyle.BottomBorderColor = HSSFColor.OliveGreen.Blue.Index;
- cellStyle.TopBorderColor = HSSFColor.OliveGreen.Blue.Index;
- //背景图形,我没有用到过。感觉很丑
- cellStyle.FillForegroundColor = HSSFColor.White.Index;
- // cellStyle.FillPattern = FillPatternType.NO_FILL;
- cellStyle.FillBackgroundColor = HSSFColor.Blue.Index;
- //水平对齐
- cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left;
- //垂直对齐
- cellStyle.VerticalAlignment = VerticalAlignment.Center;
- //自动换行
- cellStyle.WrapText = true;
- //缩进;当设置为1时,前面留的空白太大了。希旺官网改进。或者是我设置的不对
- cellStyle.Indention = ;
- //上面基本都是设共公的设置
- //下面列出了常用的字段类型
- switch (str)
- {
- case stylexls.头:
- // cellStyle.FillPattern = FillPatternType.LEAST_DOTS;
- cellStyle.SetFont(font12);
- break;
- case stylexls.时间:
- IDataFormat datastyle = wb.CreateDataFormat();
- cellStyle.DataFormat = datastyle.GetFormat("yyyy/mm/dd");
- cellStyle.SetFont(font);
- break;
- case stylexls.数字:
- cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");
- cellStyle.SetFont(font);
- break;
- case stylexls.钱:
- IDataFormat format = wb.CreateDataFormat();
- cellStyle.DataFormat = format.GetFormat("¥#,##0");
- cellStyle.SetFont(font);
- break;
- case stylexls.url:
- fontcolorblue.Underline = FontUnderlineType.Single;
- cellStyle.SetFont(fontcolorblue);
- break;
- case stylexls.百分比:
- cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00%");
- cellStyle.SetFont(font);
- break;
- case stylexls.中文大写:
- IDataFormat format1 = wb.CreateDataFormat();
- cellStyle.DataFormat = format1.GetFormat("[DbNum2][$-804]0");
- cellStyle.SetFont(font);
- break;
- case stylexls.科学计数法:
- cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00E+00");
- cellStyle.SetFont(font);
- break;
- case stylexls.默认:
- cellStyle.SetFont(font);
- break;
- }
- return cellStyle;
- }
- #endregion
4.读取Excel文件数据
- StringBuilder sbr = new StringBuilder();
- using (FileStream fs = File.OpenRead(LocalPathHelper.GetCurrentData() + "\\site.xls"))
- {
- HSSFWorkbook wk = new HSSFWorkbook(fs);//读取xls文件中的数据写入wk中
- for (int i = ; i < wk.NumberOfSheets; i++) //NumberOfSheets是总共的表数
- {
- ISheet sheet = wk.GetSheetAt(i); //读取当前表数据
- for (int j = ; j <= sheet.LastRowNum; j++) //LastRowNum 最后一行的索引,从0开始
- {
- IRow row = sheet.GetRow(j);//获取当前行数据
- if (row != null)
- {
- sbr.Append("\r\n--------------------------------\r\n");
- for (int k = ; k <= row.LastCellNum; k++) //LastCellNum 最后一列的索引,从0开始
- {
- ICell cell = row.GetCell(k); //获取当前单元格
- if (cell != null)
- {
- sbr.Append(cell.ToString() + "\t");
- }
- }
- }
- }
- }
- }
- //将读取的Xml文件数据写入到txt中
- using (StreamWriter sw = new StreamWriter(new FileStream(LocalPathHelper.GetCurrentData() + "\\test1.txt", FileMode.Append)))
- {
- sw.Write(sbr.ToString());
- sw.Flush();
- Console.WriteLine("读取数据成功!");
- }
更多:
.Net Excel操作之NPOI(一)简介的更多相关文章
- .Net Excel操作之NPOI(二)常用操作封装
一.Excel数据导出常用操作 1.指定表头和描述 2.指定数据库中读出的数据集合 二.ExcelExport封装 /// <summary> /// Excel常用的表格导出逻辑封装 / ...
- c#开源Excel操作库--NPOI
前言 以前也用C#操作过excel,用的是OleDb或者offic的com组件,但是总是非常的麻烦,依赖限制较多,所以果断寻找开源方案,JAVA上面已经有非常成熟的POI,就这样,找到了移.Net的移 ...
- Excel操作--使用NPOI导入导出Excel为DataTable
1.ExcelHelper封装 namespace NPOI操作Excel { public class ExcelHelper { /// <summary> /// DataTable ...
- Npoi导入导出Excel操作
之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求. 在winform上面实现excel操作:http://www.cnblogs.com/Cal ...
- C#项目中操作Excel文件——使用NPOI库
转载自:http://blog.csdn.net/dcrmg/article/details/52356236# 感谢-牧野- 实际C#项目中经常会涉及到需要对本地Excel文件进行操作,特别是一些包 ...
- 使用NPOI进行Excel操作
一.NPOI组件导入 右键项目菜单,“管理NuGet程序包” 直接搜索“NPOI”即会出现列表,下载第一个进行安装即可 安装完成后项目引用会出现以下几项 二.基础使用 添加引用 using NPOI. ...
- MFC -- Excel操作简介(基于VS2010)
一.添加与 Excel 操作相关的头文件 项目 -> 类向导,在右上方有一个下拉栏,选择其中的 类型库中的MFC类(T),即可看到下图所示界面,选择“文件”选项,然后在下方的位置选项中添加本地文 ...
- Excel阅读器NPOI
什么是NPOI? NPOI 它是 POI 项目的 .NET 版本号. POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就能够在没有安装 Office ...
- 老牌开源Office操作组件NPOI现已支持.NET Core
昨天在微信群里听到老牌Excel开发利器NPOI的作者瞿总说4.6.1版本的NPOI已经支持.NET Standard 2.0了,这也就意味着你可以在.NET Core中使用NPOI了. 作者:依乐祝 ...
随机推荐
- Angular快速学习笔记(4) -- Observable与RxJS
介绍RxJS前,先介绍Observable 可观察对象(Observable) 可观察对象支持在应用中的发布者和订阅者之间传递消息. 可观察对象可以发送多个任意类型的值 -- 字面量.消息.事件. 基 ...
- django model 条件过滤 queryset.filter(**condtions) 用法
1.下述代码查询model对应数据库中日期等于2018-05-22的数据: queryset = model.objects.all() condtions: {'date': '2018-05-22 ...
- Floyd求最小环!(转载,非原创) 附加习题(原创。)HDU-1599
//Floyd 的 改进写法可以解决最小环问题,时间复杂度依然是 O(n^3),储存结构也是邻接矩阵 int mincircle = infinity; Dist = Graph; ;k<nVe ...
- Cookie安全漫谈(转)
add by zhj: 我也同意作者的观点,JavaScript 操作 Cookie 是一种不正常的做法:可以用 JavaScript 操作 Cookie 完成的功能,一样可以在服务端来完成. js操 ...
- Java持久化之 -- 傲娇的NIO
NIO: Jdk 1.4+ New IO 面向通道和缓冲区 所在包:java.nio 执行流程: 数据总数由通道写入到buffer , 或者是从buffer写入通道 完全替换IO(面向流 单向的) ...
- handlebars.min.js的使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- codevs 水过 骑马修栅栏
[问题描述] 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个一个栅栏.你必须编一个程序,读入栅 ...
- "Unchecked-Send"漏洞分析
author:sf197tl;dr国内并没有一个文档有讲述该漏洞的,正好闲着没事.就写下这篇文章.在网上也搜寻了一些资料,通过自己的翻译才有今天的这篇文章.该漏洞在DASP TOP 10中可以查看到. ...
- C语言sscanf和sprintf输入输出使用及Strlen、Memset解释
sscanf() - 从一个字符串中读进与指定格式相符的数据. swscanf()- 用于处理宽字符字符串,和sscanf功能相同 通过学习和使用个人认为,在字符串格式不是很复杂,但是也并不 ...
- 收集的一些MikroTik RouterOS 5.x破解版
链接:https://pan.baidu.com/s/1RyREMfrpLkpQ-AIcDQES_Q 密码:byhd