Tan*_*wer 12 c# excel asp.net-core-2.0
我曾经使用下面的代码将数据导出到asp.net mvc中的excel
Response.AppendHeader("content-disposition", "attachment;filename=ExportedHtml.xls");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.ms-excel";
this.EnableViewState = false;
Response.Write(ExportDiv.InnerHtml);
Response.End();
Run Code Online (Sandbox Code Playgroud)
当此代码运行时,它会创建一个文件并要求保存位置
我尝试使用NPOI并很好地创建Excel文件,但无法在客户端位置保存文件.
有没有办法让上面的代码适用于asp.net core 2.0或者我可以在客户端机器上以excel格式保存数据的任何其他方式?
Dav*_*ang 22
有很多方法可以实现这一目标.
您可以生成Excel并将其保存到wwwroot文件夹中.然后,您可以将其作为页面上的静态内容提供.
例如,文件夹中有一个名为"temp"的wwwroot文件夹,用于包含所有新生成的Excel.
<a href="\temp\development\user1\2018\5\9\excel1.xlsx" download>Download</a>
Run Code Online (Sandbox Code Playgroud)
这种方法存在局限性.其中一个是新download属性.它仅适用于现代浏览器.
另一种方法是生成Excel,将其转换为字节数组并将其发送回控制器.为此,我使用了一个名为"EPPlus"(v:4.5.1)的库,它支持.Net Core 2.0.
以下是我汇总的一些示例代码,以便您了解.这不是生产准备.
using OfficeOpenXml;
using OfficeOpenXml.Style;
namespace DL.SO.Web.UI.Controllers
{
public class ExcelController : Controller
{
public IActionResult Download()
{
byte[] fileContents;
using (var package = new ExcelPackage())
{
var worksheet = package.Workbook.Worksheets.Add("Sheet1");
// Put whatever you want here in the sheet
// For example, for cell on row1 col1
worksheet.Cells[1, 1].Value = "Long text";
worksheet.Cells[1, 1].Style.Font.Size = 12;
worksheet.Cells[1, 1].Style.Font.Bold = true;
worksheet.Cells[1, 1].Style.Border.Top.Style = ExcelBorderStyle.Hair;
// So many things you can try but you got the idea.
// Finally when you're done, export it to byte array.
fileContents = package.GetAsByteArray();
}
if (fileContents == null || fileContents.Length == 0)
{
return NotFound();
}
return File(
fileContents: fileContents,
contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
fileDownloadName: "test.xlsx"
);
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
同意梁大卫的回答。
如果要导出整个数据表,请进行幻灯片修改。
string export="export";
DataTable dt = new DataTable();
//Fill datatable
dt = *something*
byte[] fileContents;
using (var package = new ExcelPackage())
{
var worksheet = package.Workbook.Worksheets.Add(export);
worksheet.Cells["A1"].LoadFromDataTable(dt, true);
fileContents = package.GetAsByteArray();
}
if (fileContents == null || fileContents.Length == 0)
{
return NotFound();
}
return File(
fileContents: fileContents,
contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
fileDownloadName: export + ".xlsx"
);
Run Code Online (Sandbox Code Playgroud)