programing

ASP에서 Excel로 내보냅니다.넷코어 2.0

instargram 2023. 8. 25. 23:14
반응형

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의 솔루션은 다음과 같습니다.

Depends on EPPlus.Core/1.5.4

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

반응형