1.导出Excel表格的需求
在实际开发中,经常需要将一些数据导出成Excel表格,方便用户查看和处理。因此,我们需要封装一个类,通过调用这个类来实现表格的导出功能。
2.使用NPOI库导出Excel表格
在C#中,我们可以使用NPOI库来生成Excel表格。NPOI是一个开源的、跨平台的、基于.NET的实现Excel的类库。它支持生成、读取和编辑Excel文件。下面我们先来了解一下它的基本用法。
2.1 安装NPOI库
首先,我们需要在Visual Studio中安装NPOI库。在NuGet包管理器中搜索NPOI,然后点击安装即可。安装完毕后,我们就可以在程序中使用NPOI库了。
2.2 创建Excel表格
使用NPOI库创建Excel表格非常简单,只需按照以下步骤即可:
//创建一个Workbook对象
IWorkbook workbook = new HSSFWorkbook();
//创建一个Sheet对象
ISheet sheet = workbook.CreateSheet("Sheet1");
//创建一行数据
IRow row = sheet.CreateRow(0);
//创建单元格
row.CreateCell(0).SetCellValue("姓名");
row.CreateCell(1).SetCellValue("年龄");
row.CreateCell(2).SetCellValue("性别");
注意:以上代码只是创建了一个空的Excel表格,并没有向表格中填充任何数据。如果要向表格中填充数据,需要使用for循环遍历数据源,然后将数据填充到单元格中。
2.3 导出Excel表格
创建好Excel表格之后,接下来就是将表格导出到文件或者输出流中。以下是导出到文件的示例代码:
//创建一个文件流
FileStream fs = new FileStream("test.xls", FileMode.Create);
//将Workbook对象写入文件流中
workbook.Write(fs);
//关闭文件流
fs.Close();
如果要将Excel表格导出到输出流中,可以使用以下代码:
//将Workbook对象写入输出流中
workbook.Write(Response.OutputStream);
//将输出流写入客户端
Response.OutputStream.Flush();
Response.OutputStream.Close();
Response.End();
3.封装Excel导出类
了解了NPOI库的使用方法之后,我们可以封装一个Excel导出类,使得调用者可以直接调用这个类的方法来实现Excel表格的导出功能。下面是一个示例代码:
public class ExportExcel
{
private IWorkbook workbook;
private ISheet sheet;
private int rowIndex;
public ExportExcel()
{
workbook = new HSSFWorkbook();
sheet = workbook.CreateSheet("Sheet1");
rowIndex = 0;
}
public void AddRow(params object[] values)
{
IRow row = sheet.CreateRow(rowIndex++);
for (int i = 0; i < vaules.Length; i++)
{
ICell cell = row.CreateCell(i);
cell.SetCellValue(Convert.ToString(values[i]));
}
}
public void Save(string path)
{
FileStream fs = new FileStream(path, FileMode.Create);
workbook.Write(fs);
fs.Close();
}
public void Save(HttpResponse response, string fileName)
{
response.ContentType = "application/vnd.ms-excel";
response.ContentEncoding = Encoding.UTF8;
response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
workbook.Write(response.OutputStream);
response.Flush();
response.End();
}
}
说明:
构造函数中创建了一个Workbook对象和一个Sheet对象,并初始化了行索引(rowIndex=0)。
AddRow方法用于向表格添加一行数据,参数是一个object数组,每个元素对应一列数据。
Save方法用于将表格保存到文件,参数是文件保存路径。
Save方法用于将表格输出到客户端,参数是HttpResponse对象和文件名。
4.调用封装的Excel导出类
封装好的导出Excel表格的类非常方便,只需要创建一个ExportExcel对象,并调用其AddRow方法,传入要导出的数据即可。例如:
ExportExcel excel = new ExportExcel();
excel.AddRow("姓名", "年龄", "性别");
excel.AddRow("张三", "25", "男");
excel.AddRow("李四", "30", "女");
excel.AddRow("王五", "28", "女");
//将表格保存到文件
excel.Save("test.xls");
//将表格输出到客户端
excel.Save(Response, "test.xls");
以上代码会生成一个Excel表格,内容如下:
5.总结
通过本文的介绍,我们学习了如何使用NPOI库来生成Excel表格,并且通过封装一个Excel导出类来实现导出功能。这个类可以帮助我们避免重复编写生成Excel表格的代码,同时也提高了代码的可复用性和可维护性。