EPLUS 사용 시 Column Type 설정 방법
사용 중EPPlus생성하기 위해Excel파일, 내가 채우는 DAL에서.DataTable테이블에 데이터를 채우고 테이블을 프레젠테이션 계층으로 전달합니다.내가 사용하는 거기서LoadFromDataTable()생성 방법Excel파일.
열 유형 중 하나를 다음으로 설정하려는 경우를 제외하고는 모두 정상적으로 작동합니다.Date열 유형을 설정하려고 했습니다.DataTable로.Date그리고 지나가기 전에DataTable프레젠테이션 계층으로 이동하지만EPPlus무시했거나 인식하지 못했습니다. 왜냐하면 내가 열 때 생성되었기 때문입니다.Excel파일, 셀의 유형은Number.
셀을 수동으로 포맷하고 유형을 다음으로 설정하는 경우Date,Excel에는 정확한 날짜가 나와 있습니다.어떻게 하면 이를 달성할 수 있을까요?
데이터 테이블 열에 올바른 유형이 있어야 하지만 열 또는 셀의 스타일도 수정해야 합니다.숫자 형식.속성을 포맷합니다.
당신이 가지고 있다고 말합니다.ExcelWorksheet이름 지어진ws:
ws.Column(1).Style.Numberformat.Format = "yyyy-mm-dd";
//OR "yyyy-mm-dd h:mm" if you want to include the time!
이 토론을 기반으로 (epplus.codeplex.com/discussions/349927) ) 열 형식을 현재 날짜로 설정할 수도 있습니다.
worksheet_1.Cells[row, 3].Style.Numberformat.Format = DateTimeFormatInfo.CurrentInfo.ShortDatePattern;
열이 이동할 가능성이 높거나(최종 사용자가 변덕스러운 경향이 있음을 알 수 있음) 스프레드시트에 여러 개의 날짜 열이 흩어져 있는 경우에는 좀 더 일반적인 것을 작성하는 것이 좋습니다.여기 제가 방금 쓴 것이 있습니다.POCO에서 모든 DateTime 유형의 위치를 찾은 다음 열 형식을 설정하는 데 사용하는 목록을 만듭니다.데이터 테이블은 0 기반이지만 Excel은 그렇지 않습니다.
ws.Cells.LoadFromDataTable(tbl, true);
var dPos = new List<int>();
for (var i = 0; i < tbl.Columns.Count; i++)
if (tbl.Columns[i].DataType.Name.Equals("DateTime"))
dPos.Add(i);
foreach (var pos in dPos)
{
ws.Column(pos+1).Style.Numberformat.Format = "mm/dd/yyyy hh:mm:ss AM/PM";
}
둘 이상의 데이터 테이블을 수행하는 경우에는 데이터 테이블을 함수로 재팩터링할 수 있습니다.
그리고 여기 사은품이 있습니다...이 코드는 신용할 수 없습니다.POCO 목록을 가져와서 데이터 테이블로 변환합니다.그것은 제 '도구 키트'에 넣어두는 것으로 제 삶을 더 편하게 해주었습니다.즐거운 시간 되세요.
public DataTable ConvertToDataTable<T>(IList<T> data)
{
var properties =
TypeDescriptor.GetProperties(typeof(T));
var table = new DataTable();
foreach (PropertyDescriptor prop in properties)
table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
foreach (T item in data)
{
var row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
table.Rows.Add(row);
}
return table;
}
다음은 헤더와 올바른 날짜 형식으로 컬렉션에서 로드하는 데 도움이 되는 C# 확장 방법입니다.
(열 제목에 대한 설명 속성으로 속성을 장식합니다.)
public static class EpPlusExtensions
{
public static void Load<T>(this ExcelWorksheet worksheet, IEnumerable<T> collection)
{
worksheet.Cells["A1"].LoadFromCollection(collection, true);
var properties = typeof(T).GetProperties();
for (var i = 0; i < properties.Length; i++)
{
if (new []{typeof(DateTime), typeof(DateTime?)}.Contains(properties[i].PropertyType))
{
worksheet.Column(i + 1).Style.Numberformat.Format = "m/d/yyyy";
}
}
}
}
엑셀 형식으로 빌드를 사용하려면 올바른 문자열을 에 전달해야 합니다.
sheet.Cells[1, 1].Style.Numberformat.Format
소유물.
실행 중 나중에, 아마도 직렬화 중에, EP Plus는 이 형식 속성을 워크북의 현재 스타일 사전과 일치시키려고 시도할 것입니다.정확한 라이브러리 버전에 따라 다를 수 있지만, 예를 들어 EPPlust 4.1.0.0의 경우 짧은 날짜 키는 "mm-dd-yyy"입니다.
4.1.0.0의 경우 다음과 같은 형식으로 빌드할 모든 하드 코드 및 키를 찾을 수 있습니다.
- Excel FormatXml FormatXml.cs ,
internal static void AddBuildIn(XmlNamespaceManager NameSpaceManager, ExcelStyleCollection<ExcelNumberFormatXml> NumberFormats)코드들은 워크북에 은 하드코드화되어 있습니다. - 하여 디거사및용확인을 합니다.
Workbook.Styles.NumberFormats로 사용)ExcelNumberFormatXml.Format) - 하여 디거사및용확인을 합니다.
Workbook.Styles.NumberFormats.멤버 (비공개구성원)구원성▁(비_dic정확한 열쇠를 위하여
언급URL : https://stackoverflow.com/questions/9859610/how-to-set-column-type-when-using-epplus
'programing' 카테고리의 다른 글
| 비동기 방식으로 코드를 디버깅할 수 없는 이유는 무엇입니까? (0) | 2023.05.16 |
|---|---|
| 준비 영역에서 단일 파일을 제거하려면 어떻게 해야 합니까(추가 취소)? (0) | 2023.05.16 |
| 텍스트에 따라 UI 레이블 높이 조정 (0) | 2023.05.16 |
| 사용자 정의 함수에 도구 설명을 추가하는 방법 (0) | 2023.05.16 |
| 리소스를 로드하지 못했습니다. net::Google Chrome을 사용하는 ERR_BLOCKED_BY_CLIENT (0) | 2023.05.16 |