일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- MSSQL
- 포렌식
- IPS
- Revese Proxy
- 웹 크롤링
- Log Parser
- JavaScript
- coloring rules
- IMAP
- Dreamhack
- SSMS
- mark/unmark
- wireshark
- db
- VS Code
- ES6
- 패킷 필터
- 인증서
- Excel
- power automate
- kitri
- 업무 자동화
- Kali Linux
- Eclipse
- AutoHotkey
- 모듈화
- 메일 프로토콜
- server profiler
- winmail.dat
- Postman
Archives
- Today
- Total
전산직으로 살아남기
C# - Excel Mapper 사용하기 본문
728x90
반응형
1. Excel Mapper란?
Nuget에 있는 Excel Mapper 패키지를 사용하면 Excel 문서를 작성하거나 읽을 수 있습니다.
2. Excel Mapper 설치하기
Visual Studio 실행 → Tools → NuGet Package Manager → Manage NuGet Packages for Solution → ExcelMapper 설치
3. Excel 파일 저장하는 방법
DB Table에서 데이터를 불러와서 Excel에 저장하는 방법은 다음과 같습니다.
public static async Task excelWriteFunc(TestContext testLibrary)
{
//Table에 데이터를 List로 받기
var attendList = await testLibrary.TestTable.ToListAsync().ConfigureAwait(false);
//Excel Mapper 생성
var excel = new ExcelMapper();
List<TestModel> testModels = new();
//Table에서 불러온 데이터를 수정하여 Excel에 저장하고 싶다면
//별도의 Class Model을 생성하여 저장해야 된다.
foreach (var item in attendList)
{
TestModel inputModel = new()
{
Id = item.Id + 1000,
EmpNumber = item.EmpNumber,
Start = item.Start,
End = item.End,
Type = item.Type,
Subject = item.Subject
};
testModels.Add(inputModel);
}
//메모리 스트림을 이용하여 List 데이터를 Excel로 저장
try
{
using (var ms = new MemoryStream())
{
//async 함수의 경우는 await을 내부에서 처리하지 않을 경우 Excel 파일 저장 시
//손상된 파일로 저장될 수 있으므로 꼭 await을 추가해야 된다.
await excel.SaveAsync(ms, testModels, "TestSheet");
var fs = System.IO.File.OpenWrite(excelFile);
await fs.WriteAsync(ms.ToArray());
await fs.FlushAsync();
await fs.DisposeAsync();
}
}
catch (Exception)
{
//파일이 이미 열려있는 경우
}
}
Excel 저장 시 포맷을 지정해 주기 위한 Class Model은 아래와 같습니다.
(Excel Mapper 패키지는 아래와 같이 각 항목별로 포맷을 지정하도록 권고하고 있습니다. 사용자 지정 특정 조건도 설정이 가능합니다.)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Ganss.Excel;
namespace Test.Model
{
public class TestModel
{
public long Id { get; set; }
public String EmpNumber { get; set; }
[DataFormat("yyyy-MM-dd")]
public DateTime Start { get; set; }
public DateTime End { get; set; }
[Ganss.Excel.DataFormat("[Red][<=3];[Blue][>=4]")]
public int Type { get; set; }
public String Subject { get; set; }
}
}
async 함수에서 await을 세팅하지 않고 Excel File을 저장한 경우 다음과 같은 팝업이 엑셀 실행 시 발생합니다.
4. Excel 파일 읽는 방법
Excel 파일의 특정 헤더를 지정하여 읽을 수 있으며 데이터를 읽는 범위 또한 지정이 가능합니다.
public static async Task excelReadFunc()
{
try
{
//HeaderRowNumber -> 헤더 번호를 지정(default = 0)
//MinRowNumber -> 데이터 시작지점을 지정(defalut = 0)
//MaxRowNumber -> 데이터 종료지점을 지정(default = int.MaxValue)
var excelData = new ExcelMapper(excelFile) { HeaderRowNumber = 2, MinRowNumber = 3, MaxRowNumber = 50 }.Fetch<TestModel>();
foreach (var item in excelData)
{
Console.WriteLine(item.Id + " | " + item.EmpNumber + " | " + item.Start + " | " + item.End + " | "
+ item.Type + " | " + item.Subject);
}
}
catch (Exception)
{
throw;
}
}
다만 특정 헤더만 읽고 싶은 경우에는 별도로 Model을 생성하여 읽어야 됩니다.
public static async Task excelReadFunc2()
{
try
{
var excelData = new ExcelMapper(excelFile) { HeaderRowNumber = 2, MinRowNumber = 3, MaxRowNumber = 50 }.Fetch<TestModel2>();
foreach (var item in excelData)
{
Console.WriteLine(item.Id + " | " + item.EmpNumber + " | " + item.Start + " | " + item.Type + " | ");
}
}
catch (Exception)
{
throw;
}
}
728x90
반응형