ASP에서 Excel로 내보냅니다.넷코어 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();
이 코드가 실행되면 파일을 만들고 저장할 위치를 요청합니다.
저는 NPOI로 작업을 하고 엑셀 파일을 잘 만들었지만 클라이언트 위치에 파일을 저장할 수 없습니다.
위의 코드를 asp.net core 2.0에서 작동하게 하거나 클라이언트 머신에 엑셀 형식으로 데이터를 저장할 수 있는 다른 방법이 있습니까?
그것을 달성하기 위한 많은 방법들이 있습니다.
옵션 1: wwwroot에 저장
Excel을 생성하여 다음에 저장할 수 있습니다.wwwroot
폴더를 누릅니다.그런 다음 페이지에서 정적 콘텐츠로 제공할 수 있습니다.
예를 들어 내부에 'temp'라는 폴더가 있습니다.wwwroot
새로 생성된 Excel을 모두 포함하는 폴더입니다.
<a href="\temp\development\user1\2018\5\9\excel1.xlsx" download>Download</a>
이 접근법에는 제한이 있습니다. 그 중 하나는 새로운 접근법입니다.download
기여하다.최신 브라우저에서만 작동합니다.
옵션 2: 바이트 배열
또 다른 방법은 Excel을 생성하여 바이트 배열로 변환한 후 컨트롤러로 다시 전송하는 것입니다.이를 위해 저는 를 지원하는 "EPLus"(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"
);
}
}
}
데이비드 량의 대답에 동의했습니다.
전체 데이터 테이블을 내보내려면 수정 사항을 슬라이드합니다.
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"
);
이에 대한 NAT의 솔루션은 다음과 같습니다.
using OfficeOpenXml;
public class XmlService
{
// [...]
public void getXlsxFile(SomeTableObject tbl, ref byte[] bytes)
{
using (ExcelPackage pck = new ExcelPackage())
{
ExcelWorksheet ws = pck.Workbook.Worksheets.Add(tbl.name);
ws.Cells["A1"].LoadFromDataTable(tbl, true);
bytes = pck.GetAsByteArray();
}
}
}
EPLus에 대한 자세한 내용은 여기에서 확인할 수 있으며 위의 소스 코드는 오픈 소스 레포(GPL)에서 확인할 수 있습니다.
자신의 코드 대신 이 코드를 사용하면 됩니다.
Response.Clear();
Response.ContentType = "application/vnd.ms-excel";
Response.Headers[HeaderNames.ContentDisposition] = "attachment; filename=ExportedHtml.xls";
Response.WriteAsync(sb.ToString()).Wait();
언급URL : https://stackoverflow.com/questions/50247245/export-to-excel-in-asp-net-core-2-0
'programing' 카테고리의 다른 글
장치 픽셀 비율은 정확히 무엇입니까? (0) | 2023.08.25 |
---|---|
Swift에서 SQLite 데이터베이스 액세스 (0) | 2023.08.25 |
메모리 스트림에서 Excel 워크북 열기 (0) | 2023.08.25 |
서로 다른 활동에서 동일한 탐색 드로어 (0) | 2023.08.25 |
Spring Data JDBC: 리포지토리에서 세 번째 수준부터 중첩된 엔티티를 저장하지 않습니다. (0) | 2023.08.25 |