使用NPOI库导出Excel文件可以按照以下步骤进行:
-
添加NPOI库的引用:在项目中添加对NPOI库的引用。
-
创建一个新的Excel文件对象:使用NPOI中的
HSSFWorkbook
(对应.xls
格式)或XSSFWorkbook
(对应.xlsx
格式)来创建一个新的Excel文件对象。
csharp
var workbook = new HSSFWorkbook(); // 或者使用 XSSFWorkbook()
- 创建一个工作表对象:使用
workbook.CreateSheet()
方法创建一个新的工作表对象。
csharp
var sheet = workbook.CreateSheet("Sheet1");
- 创建行和单元格:使用
sheet.CreateRow()
方法创建新的行对象,然后使用row.CreateCell()
方法在行中创建单元格。
csharp
var row = sheet.CreateRow(0);
var cell = row.CreateCell(0);
- 设置单元格的值:使用
cell.SetCellValue()
方法设置单元格的值。
csharp
cell.SetCellValue("Hello World!");
- 保存Excel文件:使用
FileStream
将Excel文件保存到指定的路径。
csharp
using (var fs = new FileStream("path/to/file.xls", FileMode.Create, FileAccess.Write))
{
workbook.Write(fs);
}
完整的示例代码如下:
csharp
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;
class Program
{
static void Main(string[] args)
{
var workbook = new HSSFWorkbook();
var sheet = workbook.CreateSheet("Sheet1");
var row = sheet.CreateRow(0);
var cell = row.CreateCell(0);
cell.SetCellValue("Hello World!");
using (var fs = new FileStream("path/to/file.xls", FileMode.Create, FileAccess.Write))
{
workbook.Write(fs);
}
}
}
注意:在使用NPOI库之前,需要将该库添加到项目中,可以通过NuGet包管理器添加NPOI库的引用。
接口示例
cs
/// <summary>
/// 导出
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[HttpPost]
public FileStreamResult ExportExcel(List<IdInDto> ids)
{
string zipPath = @$"{ExcelExporter.GetImportDir()}\{GUIDHelper.NewGuid}.zip";
foreach (var item in dic)
{
string filePath = @$"{ExcelExporter.GetImportDir()}\{item.Key}.xlsx";
//生成excel逻辑
ExcelExporter.AddFileToZip(zipPath, filePath);
}
FileStream fileStream = new FileStream(zipPath, FileMode.Open, FileAccess.Read);
return new FileStreamResult(fileStream, "application/octet-stream") { FileDownloadName = "导出.zip" };
}
cs
public class ExcelExporter
{
/// <summary>
/// 创建目录
/// </summary>
/// <returns></returns>
public static string GetImportDir()
{
string fileFolder = Path.Combine(AppContext.BaseDirectory, $"Export");
fileFolder += "\\" + DateTime.Now.Date.ToString("yyyy-MM-dd");
FileHelper.CreateIfNotExists(fileFolder);
return fileFolder;
}
/// <summary>
/// 添加文件到zip
/// </summary>
/// <param name="zipPath"></param>
/// <param name="fileToAdd"></param>
/// <exception cref="FileNotFoundException"></exception>
public static void AddFileToZip(string zipPath, string fileToAdd)
{
// 确保要添加的文件存在
if (!File.Exists(fileToAdd))
{
throw new FileNotFoundException("文件未找到。");
}
// 确保ZIP文件存在
if (!File.Exists(zipPath))
{
using (ZipArchive zipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Create))
{
// 添加文件到ZIP文件中
zipArchive.CreateEntryFromFile(fileToAdd, Path.GetFileName(fileToAdd));
}
}
else
{
using (ZipArchive zipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Update))
{
// 添加文件到ZIP文件中
zipArchive.CreateEntryFromFile(fileToAdd, Path.GetFileName(fileToAdd));
}
}
}
}