最近学习C#要用到读写.xlsx文件,查了一些资料。
NPOI是由Java项目改编而来,背景和优势在此略过,类库也很容易找到。
使用前,需要在引用中添加NPOI的类库。我找到的类库有很多个dll文件,不知道哪些是必需的,就全部导入到项目中了。
使用NPOI写入EXCEL文件主要有一下几个步骤:
1,新建一个工作表对象,代表一个Excel文件
2,在工作表对象中新建sheet
3,在sheet中新建行
4,在行中新建单元格
5,往单元格中添加数据
6,创建文件流,把工作表对象的内容写入文件保存。
//把内容写入excel文件
static void Write(string fileName)
{
//0.引用NOPI等类库
//1.新建工作簿-新建xls文件用HSSFWorkbook,新建xlsx文件用XSSFWorkbook
//写入文件的workbook构造函数不需要参数
IWorkbook workbook = new XSSFWorkbook();
//2.新建sheet
ISheet sheet = workbook.CreateSheet("表1");
for (int i = 0; i < 10; i++)
{
//3.新建一行
IRow row = sheet.CreateRow(i);
//4.新建单元格,并在每个单元格写入内容
for (int j = 0; j < 5; j++)
row.CreateCell(j).SetCellValue(string.Format("第{0}行第{1}列",i+1,j+1));
}
//5.创建文件流,将表格内容写入文件
using (FileStream writer = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write))
{
workbook.Write(writer);
}
//5'.文件流的另一种创建方法
using (FileStream writer = File.OpenWrite(fileName))
{
workbook.Write(writer);
}
}
调用此函数,得到结果如图:
读取文件也类似:
1,以文件名作为参数,新建一个工作表对象,把文件映射为一个工作表
2,遍历工作表的sheet
3,遍历sheet中的行
4,遍历行中的单元格
5,从单元格中以适当的格式读取数据,保存到其它的对象中。
//从excel读取文件
static List<string> Read(string filePath)
{
List<string> list = new List<string>();
string strTemp = "";
//1.新建工作簿,并把表格文件映射到工作簿
IWorkbook workbook = new XSSFWorkbook(filePath);
//2.从文件遍历读入sheet
for(int i=0;i<workbook.NumberOfSheets;i++)
{
ISheet sheet = workbook.GetSheetAt(i);
//3.从sheet中遍历读入行
for (int j = 0; j <= sheet.LastRowNum; j++)
{
IRow row = sheet.GetRow(j);
//4.读取每个单元格的内容
strTemp = "";
foreach (var item in row.Cells)
{
strTemp += "\t";
strTemp += item.StringCellValue;
}
//5.将内容以合适的格式保存到内存
list.Add(strTemp);
}
}
return list;
}
调用此函数读取上一步写入生成的文件,并遍历输出返回的list: