使用CloseXML与ZipFile创建Excel文件并打包下载Zip文件
安装对应的包
在Visual Studio 的NuGet管理中搜索ClosedXML
ZipFile
是System.IO.Compression
自带的包
使用ClosedXML读取与下载Excel
读取上传的excel内容
这里写的是由浏览器上传的Excel文件
[HttpPost]
public IActionResult UploadExcel(IFormFile file)
{
if (file != null && file.Length > 0)
{
try
{
using (var memoryStream = new MemoryStream())
{
file.CopyTo(memoryStream);
using (XLWorkbook workbook = new XLWorkbook(memoryStream))
{
IXLWorksheet worksheet = workbook.Worksheet(1); // 获取第一个工作表
// 在这里可以读取工作表中的数据,并进行进一步的处理
// 例如,读取A1单元格的值
string valueA1 = worksheet.Cell("A1").Value.ToString();
// 在此处可以将读取的数据保存到数据库或进行其他操作
return Content("File uploaded and processed successfully.");
}
}
}
catch (Exception ex)
{
return Content("Error: " + ex.Message);
}
}
else
{
return Content("No file uploaded.");
}
}
下载Excel
public ActionResult DownloadExcel()
{
// 创建Excel工作簿和工作表
var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Sample Sheet");
worksheet.Cell("A1").Value = "Hello";
worksheet.Cell("B1").Value = "World";
// 保存工作簿到内存流
var memoryStream = new System.IO.MemoryStream();
workbook.SaveAs(memoryStream);
memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
// 返回Excel文件作为下载
return File(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Sample.xlsx");
}
下载zip文件
修改上面下载Excel的内容,将其保存到服务器上的临时位置。
public ActionResult DownloadExcel()
{
// 创建Excel工作簿和工作表
var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Sample Sheet");
worksheet.Cell("A1").Value = "Hello";
worksheet.Cell("B1").Value = "World";
// 保存工作簿到内存流(这一步开始修改修改为保存Excel文件到临时位置)
//var memoryStream = new System.IO.MemoryStream();
//workbook.SaveAs(memoryStream);
//memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
// 返回Excel文件作为下载
// return File(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Sample.xlsx");
// 保存工作簿到临时文件
string tempPath = Path.Combine(Path.GetTempPath(), "sample.xlsx");
workbook.SaveAs(tempPath);
return File(System.IO.File.ReadAllBytes(tempPath), "application/zip", "export.zip");
}
请根据你的具体需求调整代码示例中的路径、文件名等细节。此外,请确保在适当的时候清理临时文件,以避免占用不必要的磁盘空间。