npoi这个office写入,我个人有点不方便,但是因为需要使用所以不得不去用了。
原因:
1、 没文档
2、 网上的案例版本不同
3、 对于复杂列不好做处理
跟网上其他工具的对比,好处就是不需要依赖Microsoft的office一套组件就可以对excel进行写入和读取。
第一个核心就是IWorkbook对象
通过它可以操作两种格式的excel,一种是*.xls(HSSFWorkbook),一种是*.xlsx(XSSFWorkbook)
IWorkbook wk = new HSSFWorkbook(); IWorkbook wk = new XSSFWorkbook();
第二个的核心就是Isheet对象
通过它可以操作两种格式的excel的工作簿,一种是*.xls(HSSFSheet),一种是*.xlsx(XSSFSheet)
ISheet sheet = wk.CreateSheet(“”);
或者是获取已有的工作簿
ISheet sheet = wk.GetSheetAt(int indx)
Isheet对象主要负责excel的工作簿
第三个核心就是Irow/Icell对象
IRow对象可以实现对列的控制
ICell对象可以实现对行单元格的控制
IRow需要通过工作簿进行新增
IRow row = sheet.CreateRow(int indx);
ICell需要通过IRow明确列的位置才能对行的单元格进行设置,单元格只能通过IRow来创建
ICell cell = row.CreateCell(int indx);
三个核心能够对excel进行基本的写入的操作
案例:
IWorkbook wk = null;
ISheet sheet = null;
//获取文件格式
string extension = Path.GetExtension(filePath);
//根据不同版本的excel格式获取不同的写入对象
if (extension.Equals(".xls"))
{
wk = new HSSFWorkbook();
}
else
{
wk = new XSSFWorkbook();
}
//创建Excel工作簿
sheet = wk.CreateSheet("new sheet");
//创建指定列
IRow row = sheet.CreateRow(int indx)
//创建指定行
ICell cell = row.CreateCell(int indx)
//将制作好的excel生成到系统上
MemoryStream ms = new MemoryStream();
wk.Write(ms);
using(varfs=newFileStream(filePath,FileMode.Create,FileAccess.Write,FileShare.None,4096,true))
{
byte[] b = ms.ToArray();
await fs.WriteAsync(b, 0, b.Length);
ms.Close();
fs.Flush();
fs.Close();
}