背景
因公司项目需要添加数据导出功能故此添加,找了几种方式发现该方式具有 无需依赖本机安装office环境,使用灵活等优点故采用此方式。
安装
Nuget 直接安装NPOI即可
使用方式
1.根据需要使用2003或者2007的不同选择不同创建操作对象
IWorkbook fileWorkbook; try { fileWorkbook = new XSSFWorkbook(); } catch { fileWorkbook = new HSSFWorkbook(); }
2.Excel的操作必须要建立在Sheet的基础上 所以需要先建立一个Sheet
ISheet sheet = fileWorkbook.CreateSheet("Sheet1") as ISheet;
3.根据需要 可以设置列宽
sheet.SetColumnWidth(0, 50 * 256);//设置宽度首列
其中 第一个参数为列索引 第二个参数为字符数 例子代表允许显示50个字符 如100字符 则为100* 256
4.创建行
IRow row = sheet.CreateRow(rowIndex);
注: 行宽度直接用row实例即可修改 如:row.Height=30 * 20;
5.创建单元格
ICell cellTitle = row.CreateCell(0); cellTitle.SetCellValue($"销售汇总({StartDate}至{EndDate})");
注:
1.0为列索引
2.第二行为赋值方式展示
6.设置居中
//设置单元格格式 居中 ICellStyle cellstyle = fileWorkbook.CreateCellStyle(); cellstyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; cellstyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; cellTitle.CellStyle = cellstyle;
直接赋值到所在单元格cellStyle属性即可
7.合并单元格
sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 5));//合并单元格 0行0列到0行5列
参数从左到右分别为 起始行号 结束行号 起始列号 结束列号
8.保存到文件
public string OutputClient(IWorkbook fileWorkbook) { //转为字节数组 MemoryStream stream = new MemoryStream(); fileWorkbook.Write(stream); var buf = stream.ToArray(); var path = Path.Combine(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "Export"); string fileName = Path.Combine(path, $"{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.xls"); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } //保存为Excel文件 using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write)) { fs.Write(buf, 0, buf.Length); fs.Flush(); } return fileName; }
这里提供一个通用的保存方法 保存到exe 文件目录下的Export 文件夹 没有改文件夹会自动创建 文件名为日期到毫秒