NPOI介绍:
NPOI作为国人开发的开源项目,文档完善,更新及时,为.NET开发者提供了便利,主要用于生成Excel报表,搜索引擎模块中Excel中的文本提取,批量生成Excel文件,基于Excel文件模板生成新的Excel等多方面。
使用NPOI生成Excel
在本文中,我们将学习如何在c#中使用NPOI将DataTable数据导出或转换成Excel文件。首先,我们需要安装像NPOI和Newtonsoft这样的软件包。
安装完这些包后,我们需要添加一些名称空间来访问NPOI类,以及将JSON转换为List的Newtonsoft。在添加所有包和名称空间之后,然后创建一个类,用于将JSON转换为List,然后设置列的名称,并设置一个for循环,用于获取和设置数据到Excel计算单元中。请参阅下面的完整步骤以生成Excel文件。让我们开始代码。
第一步是在项目中安装以下NuGet包。
Install-Package NPOI -Version 2.3.0
Install-Package Newtonsoft.Json -Version 11.0.2
安装以上包后,添加以下名称空间,用于访问生成并保存在特定路径中的Excel类和方法。
using System.Data;
using NPOI.HSSF.UserModel;
using Newtonsoft.Json;
using System.IO;
第二步是从数据库中获取数据并将其存储到DataTable中。对于本例,在这里,生成静态数据表并添加一条记录用于测试。
请参见下面生成的datatable代码。
DataTable dt1 = new DataTable();
dt1.Columns.Add("ID");
dt1.Columns.Add("Name");
DataRow dr = dt.NewRow();
dr["ID"] = "1";
dr["Name"] = "Test";
dt.Rows.Add(dr);
下一步是创建一个类,用于使用Newtonsoft将DataTable转换为列表List。请参阅下面的类代码以转换datatable。
public class SummaryClass
{
public string ID { get; set; }
public string Name { get; set; }
}
现在,创建一个从datatable生成Excel文件的函数。请参见下面的函数代码,用于将datatable转换为列表并将列表转换为Excel文件。
public void GenerateExcelFile()
{
// Below code is create datatable and add one row into datatable.
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
DataRow dr = dt.NewRow();
dr["ID"] = "1";
dr["Name"] = "Test";
dt.Rows.Add(dr);
// Declare HSSFWorkbook object for create sheet
var workbook = new HSSFWorkbook();
var sheet = workbook.CreateSheet("NameOfYourSheet");
// Convert datatable into json
string JSON = JsonConvert.SerializeObject(dt);
// Convert json into SummaryClass class list
var items = JsonConvert.DeserializeObject<List<SummaryClass>>(JSON);
// Set column name this column name use for fetch data from list
var columns = new[] { "ID", "Name" };
// Set header name this header use for set name in excel first row
var headers = new[] { "ID", "Name" };
var headerRow = sheet.CreateRow(0);
//Below loop is create header
for (int i = 0; i < columns.Length; i++)
{
var cell = headerRow.CreateCell(i);
cell.SetCellValue(headers[i]);
}
//Below loop is fill content
for (int i = 0; i < items.Count; i++)
{
var rowIndex = i + 1;
var row = sheet.CreateRow(rowIndex);
for (int j = 0; j < columns.Length; j++)
{
var cell = row.CreateCell(j);
var o = items[i];
cell.SetCellValue(o.GetType().GetProperty(columns[j]).GetValue(o, null).ToString());
}
}
// Declare one MemoryStream variable for write file in stream
var stream = new MemoryStream();
workbook.Write(stream);
string FilePath = "SetYourFileSavePath - With File Name"
//Write to file using file stream
FileStream file = new FileStream(FilePath, FileMode.CreateNew, FileAccess.Write);
stream.WriteTo(file);
file.Close();
stream.Close();
总结
上面的代码生成了Excel文件,并将其保存在特定的路径中。