使用NPOI库导出多个Excel并压缩zip包
使用NPOI库导出Excel文件可以按照以下步骤进行:
-
添加NPOI库的引用:在项目中添加对NPOI库的引用。
-
创建一个新的Excel文件对象:使用NPOI中的
HSSFWorkbook
(对应.xls
格式)或XSSFWorkbook
(对应.xlsx
格式)来创建一个新的Excel文件对象。
var workbook = new HSSFWorkbook(); // 或者使用 XSSFWorkbook()
- 创建一个工作表对象:使用
workbook.CreateSheet()
方法创建一个新的工作表对象。
var sheet = workbook.CreateSheet("Sheet1");
- 创建行和单元格:使用
sheet.CreateRow()
方法创建新的行对象,然后使用row.CreateCell()
方法在行中创建单元格。
var row = sheet.CreateRow(0);
var cell = row.CreateCell(0);
- 设置单元格的值:使用
cell.SetCellValue()
方法设置单元格的值。
cell.SetCellValue("Hello World!");
- 保存Excel文件:使用
FileStream
将Excel文件保存到指定的路径。
using (var fs = new FileStream("path/to/file.xls", FileMode.Create, FileAccess.Write))
{workbook.Write(fs);
}
完整的示例代码如下:
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库的引用。
接口示例
/// <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" };}
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));}}}}