NPOI学习笔记
NPOI最简单的创建一个Excel,并且在指定单元格内填写一些数据
HSSFWorkbook workbook = new HSSFWorkbook(file);
ISheet sheet = workbook.CreateSheet("许嵩");
sheet.CreateRow().CreateCell().SetCellValue("我是牛逼村的");
sheet.GetRow().CreateCell().SetCellValue("蜀云泉真帅啊");
FileStream file = new FileStream("蜀云泉.xls",FileMode.Create);
workbook.Write(file);
file.Close();
不过这个没意思,大部分人在使用导出Excel的时候,不会傻傻的自己去创建一个新的Excel,使用模板才是最方便的方法。
模板的使用方法:
我在bin下面新建了两个文件夹,一个是模板,一个是结果。模板里面存放了一个excel模板,那做的是花里胡哨的,代码如下:
string fileDir = Environment.CurrentDirectory + "\\模板\\蜀云泉真帅.xls";
FileStream Dir = new FileStream(fileDir, FileMode.Open, FileAccess.Read);
HSSFWorkbook workbook = new HSSFWorkbook(Dir);
ISheet sheet = workbook.GetSheet("Sheet1"); sheet.GetRow().GetCell().SetCellValue("我");
sheet.GetRow().GetCell().SetCellValue("的");
sheet.GetRow().GetCell().SetCellValue("妈");
sheet.GetRow().GetCell().SetCellValue("呀");
sheet.GetRow().GetCell().SetCellValue("我");
sheet.GetRow().GetCell().SetCellValue("真");
sheet.GetRow().GetCell().SetCellValue("是");
sheet.GetRow().GetCell().SetCellValue("帅"); sheet.ForceFormulaRecalculation = true; //强制计算Excel中的公式 FileStream file = new FileStream(Environment.CurrentDirectory + $"\\结果\\蜀云泉真帅{DateTime.Now.ToString("D")}.xls", FileMode.Create);
workbook.Write(file);
file.Close();
如此,如此。这里还需要说明的一个事情是,我在测试这个案例的时候,一直报错,说我的对象应用未引用到实例什么的,但是我检查感觉没问题啊,最后发现我必须在模板里面需要填写的单元格随便填上一些东西,比如0或者其它乱七八糟的字符。NPOI才相信我这一列是存在的。。。。
以上就是NPOI写内容进Excel的一些操作。但是有的时候外面还需要去读取Excel里面的内容。NPOI读取Excel内容代码如下所示:
//读取excel
public List<string> ExcelToDataTable(string filePath, bool isColumnName)
{
//DataTable dataTable = null;
List<string> list = new List<string>();
FileStream fs = null;
IWorkbook workbook = null;
ISheet sheet = null;
ICell cell = null;
string result=null;
try
{
using (fs = File.OpenRead(filePath))
{
// 2007版本
if (filePath.IndexOf(".xlsx") > )
workbook = new XSSFWorkbook(fs);
// 2003版本
else if (filePath.IndexOf(".xls") > )
workbook = new HSSFWorkbook(fs); if (workbook != null)
{
sheet = workbook.GetSheetAt();//读取第一个sheet,当然也可以循环读取每个sheet
//dataTable = new DataTable();
if (sheet != null)
{
int rowCount = sheet.LastRowNum;//总行数
if (rowCount > )
{
IRow firstRow = sheet.GetRow();//第3行
int cellCount = firstRow.LastCellNum;//列数 //构建datatable的列
if (isColumnName)
{
for (int i = firstRow.FirstCellNum; i < cellCount; i++)
{
cell = firstRow.GetCell(i);
if (cell != null)
{
result = cell.Row.Cells[i].ToString();
list.Add(result); }
}
}
else
{
//for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
//{
// column = new DataColumn("column" + (i + 1));
// dataTable.Columns.Add(column);
//}
} }
}
}
}
return list;
}
catch (Exception)
{
if (fs != null)
{
fs.Close();
}
return null;
}
}
基本代码就是这样的。
有的单元格的文字是有链接的,读取文字和链接使用的方法如下
string name = Row.GetCell().Row.Cells[].ToString();
string a = Row.GetCell().Row.Cells[].Hyperlink.Address;
NPOI学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
- 第二次sprint
一.这次冲刺就是实施阶段了,主要对程序进行一次骨架的构建,基本上已经完成了界面的设计,但是在算法上还有很大漏洞,整个程序还是属于不成熟阶段. 二.这是我们的界面 三.已经有的功能:随机生成题目并算出答 ...
- Find Amir CodeForces - 805C (贪心+思维)
A few years ago Sajjad left his school and register to another one due to security reasons. Now he w ...
- JavaScript 作用域链与闭包
作用域链 在某个作用域访问某个变量或者函数时,会首先在自己的局部环境作用域中搜寻变量或者函数,如果本地局部环境作用域中有该变量或者函数,则就直接使用找到的这个变量值或者函数:如果本地局部环境作用域中没 ...
- Mysql 乐观锁
转载:http://chenzhou123520.iteye.com/blog/1863407 乐观锁介绍: 乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般 ...
- python之tkinter使用举例-Button
tkinter用于编写GUI界面,python3默认已经包含,直接使用. # GUI:tkinter使用举例 import tkinter # 实例化tkinter对象 top = tkinter.T ...
- 云时代的IT运维面临将会有哪些变化
导读 每一次IT系统的转型,运维系统和业务保障都是最艰难的部分.在当前企业IT系统向云架构转型的时刻,运维系统再一次面临着新的挑战.所以在数据中心运维的时候,运维人员应该注意哪些问题? 在云计算时代, ...
- MT【221】几个常用的多元恒等式
1.$\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{n}{a_ib_j}=\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{n}{a_j ...
- emwin之2D图形绘制问题
@2018-09-03 [问题] 在 WM_PAINT 消息分支里绘制2D图形可以正常显示,而在外部函数或按钮按下事件的响应消息分支下等处,绘制2D图形则不显示. [解决] 在除消息WM_PAINT分 ...
- emwin 之消息 WM_INIT_DIALOG
@2018-08-09 小记 消息 WM_INIT_DIALOG 在创建窗口时首先发送且只在创建窗口时发送即只发送这一次
- cf1000C Covered Points Count (差分+map)
考虑如果数字范围没有这么大的话,直接做一个差分数组就可以了 但现在变大了 所以要用一个map来维护 #include<bits/stdc++.h> #define pa pair<i ...