EPplus를 사용하여 Excel로 DataTable 내보내기
데이터 테이블을 EPplus로 Excel 파일로 내보내고 싶습니다.그 데이터 테이블은 int 타입의 속성이 있기 때문에 엑셀 파일에서도 같은 포맷을 원합니다.
이런 DataTable을 Excel로 내보내는 방법을 아는 사람 있나요?
using (ExcelPackage pck = new ExcelPackage(newFile))
{
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Accounts");
ws.Cells["A1"].LoadFromDataTable(dataTable, true);
pck.Save();
}
그게 너한테 효과가 있을 거야.필드가 int EPPlus로 정의되어 있는 경우 EPplus는 컬럼을 숫자로 올바르게 캐스트하거나 플로트합니다.
브라우저 응답으로 다운로드 할 경우
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode("Logs.xlsx", System.Text.Encoding.UTF8));
using (ExcelPackage pck = new ExcelPackage())
{
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Logs");
ws.Cells["A1"].LoadFromDataTable(dt, true);
var ms = new System.IO.MemoryStream();
pck.SaveAs(ms);
ms.WriteTo(Response.OutputStream);
}
브라우저에서 엑셀시트 다운로드용HttpContext.Current.Response
대신Response
그렇지 않으면 오류가 발생합니다.여기 제 코드가 있습니다.
public void ExporttoExcel(DataTable table, string filename)
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=GridData.xlsx");
using (ExcelPackage pack = new ExcelPackage())
{
ExcelWorksheet ws = pack.Workbook.Worksheets.Add(filename);
ws.Cells["A1"].LoadFromDataTable(table, true);
var ms = new System.IO.MemoryStream();
pack.SaveAs(ms);
ms.WriteTo(HttpContext.Current.Response.OutputStream);
}
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
}
다음은 DataSet을 Excel로 내보내기 위한 스니펫입니다.
private static void DataSetToExcel(DataSet dataSet, string filePath)
{
using (ExcelPackage pck = new ExcelPackage())
{
foreach (DataTable dataTable in dataSet.Tables)
{
ExcelWorksheet workSheet = pck.Workbook.Worksheets.Add(dataTable.TableName);
workSheet.Cells["A1"].LoadFromDataTable(dataTable, true);
}
pck.SaveAs(new FileInfo(filePath));
}
}
그리고 문장을 사용한다:
using OfficeOpenXml;
using System.Data;
using System.IO;
서문
EPplus는 v5에서 유료 라이선스 모델로 전환하여 상업적으로 사용되었습니다.비상업적인 설정에서 v5를 사용하려면 다음 코드 줄을 실행할 위치에 배치해야 합니다.ExcelPackage.LicenseContext = LicenseContext.NonCommercial
시판 중인 경우 라이선스를 취득하거나 v4.5.3(netcore/net5)을 사용할 수 있습니다.이 버전은 시판 중인 마지막 버전입니다.
다음 코드는 4.5.3.3에서 동작합니다.
C#
DataTable에서 Excel로, 열 이름을 Excel 헤더로 사용합니다.
또한 나중에 테이블을 루프하여 45123과 같은 숫자가 아닌 날짜로 Excel에 표시되도록 Date Time 열을 설정합니다.
DataTable dt = ...;
string sheetName = ...;
string dateFormat = "yyyy-MM-dd HH:mm:ss";
using var p = new ExcelPackage();
var ws = p.Workbook.Worksheets.Add(sheetName);
ws.Cells["A1"].LoadFromDataTable(dt, PrintHeaders: true);
for (int c = 0; c < dt.Columns.Count; c++)
{
if (dt.Columns[c].DataType == typeof(DateTime))
{
ws.Column(c + 1).Style.Numberformat.Format = dateFormat;
}
}
예를 들어 API 컨트롤러에서 이를 사용하는 경우 다음을 사용하여 다운로드 파일로 반환할 수 있습니다.
string fileName = ...; //without extension
return File(p.GetAsByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName + ".xlsx");
의 범위에 주의해 주십시오.using
! 이것은 C#8 구문이며 선언된 블록의 마지막까지 존속합니다.
VB.NET
위와 동일하지만 VB에서는:
Dim dt As DataTable = ...
Dim sheetName As String = ...
Dim dateFormat As String = "yyyy-MM-dd HH:mm:ss"
Using p As New ExcelPackage()
Dim ws = p.Workbook.Worksheets.Add(sheetName)
ws.Cells("A1").LoadFromDataTable(dt, PrintHeaders:=True)
For c As Integer = 0 To dt.Columns.Count - 1
If dt.Columns(c).DataType Is GetType(Date) Then
ws.Column(c + 1).Style.Numberformat.Format = dateFormat
End If
Next
End Using
그리고 다운로드를 위해서는 반드시 using block 안에 있어야 합니다.
Dim fileName As String = ... 'without extension
Return File(p.GetAsByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName & ".xlsx")
언급URL : https://stackoverflow.com/questions/13669733/export-datatable-to-excel-with-epplus
'IT' 카테고리의 다른 글
Git: 분기를 체크아웃할 수 없음 - 오류: pathspec '...'이(가) git에 알려진 파일과 일치하지 않습니다. (0) | 2023.04.23 |
---|---|
blockblob 업로드 및 content type 설정 (0) | 2023.04.23 |
웨서버 구성 설정을 사용하여 IIS 7에서 개별 파일의 캐시를 비활성화하려면 어떻게 해야 합니까? (0) | 2023.04.23 |
python으로 목록을 채우는 내장 기능 (0) | 2023.04.23 |
Larabel에서 Excel로 Excel을 내보낼 때 어떻게 열 헤더를 포함할 수 있습니까? (0) | 2023.04.23 |