EPPlus를 사용한 Excel 날짜 형식
내 셀을 날짜 형식으로 지정하는 데 문제가 있습니다.
FileInfo info = new FileInfo(path);
using (ExcelPackage package = new ExcelPackage(info))
{
ExcelWorksheet ws = package.Workbook.Worksheets.Add(sheetName);
ws.Cells[3, 1].Style.Numberformat.Format = "yyyy-mm-dd";
ws.Cells["A3"].Formula = "=DATE(2014,10,5)";
}
Excel에서 출력: 41 917,00
작동하지 않는 이유는 무엇입니까?
나는 Yosoyke에 동의합니다. 아마도 잘못된 세포를 대상으로 하고 있을 것입니다. 당신은 시도 할 수 있습니다:
ws.Cells["A3"].Style.Numberformat.Format = "yyyy-mm-dd";
ws.Cells["A3"].Formula = "=DATE(2014,10,5)";
worksheet.Cells["YOURDATECELL_OR_YOURDATECELLRANGE"].Style.Numberformat.Format = "mm-dd-yy";
taraz가 언급한 공식을 사용하는 경우. 마지막에 워크시트.Calculate()를 추가하십시오. 참조 https://epplus.codeplex.com/wikipage?title=About%20Formula%20calculation
또는 공식을 사용하는 대신 대체 접근 방식
private static decimal GetExcelDecimalValueForDate(DateTime date)
{
DateTime start = new DateTime(1900, 1, 1);
TimeSpan diff = date - start;
return diff.Days + 2;
}
worksheet.Cells["A2"].Value = GetExcelDecimalValueForDate(Convert.ToDateTime('2016-04-29'));
worksheet.Cells["A2"].Style.Numberformat.Format = "mm-dd-yy";//or m/d/yy h:mm
기본적으로 Excel에서 날짜 필드를 numFormatId
저장할 때 14 로 저장합니다 (xls의 xml 파일 참조). 이렇게 하면 파일을 열 때 모든 국가에서 날짜 형식이 올바르게 지정됩니다. Epplus 에서 Excel의 경우 14로 mm-dd-yy
변환됩니다 numFormatId
. 이렇게 하면 모든 국가에서 파일을 열 때 해당 국가의 간단한 날짜 설정에 따라 날짜 형식이 올바르게 지정됩니다. 또한 m/d/yy h:mm
모든 국가에 대해 올바른 형식을 발견 했습니다.
var dateColumns = from DataColumn d in dt.Columns
where d.DataType == typeof(DateTime) || d.ColumnName.Contains("Date")
select d.Ordinal + 1;
foreach (var dc in dateColumns)
{
worksheet.Cells[2, dc, rowCount + 2, dc].Style.Numberformat.Format = "mm/dd/yyyy hh:mm:ss AM/PM";
}
헤더 날짜가 있는 모든 열의 형식을 지정/제공된 특정 형식으로 지정합니다.
몇 가지 소식들:
ws.Cells["A3"].Style.Numberformat.Format = "[$-en-US]yyyy-mmm-dd";
ws.Cells["A3"].Formula = "=DATE(2014,10,5)";
IEnumerable(데이터)을 사용하는 일반 솔루션은 일반 개체의 속성을 반복하여 DateType 또는 nullableDate Type을 찾고 형식을 적용합니다.
//set the list of dateColumns which will be used to formate them
List<int> dateColumns = new List<int>();
//get the first indexer
int datecolumn = 1;
//loop through the object and get the list of datecolumns
foreach (var PropertyInfo in data.FirstOrDefault().GetType().GetProperties())
{
//check if property is of DateTime type or nullable DateTime type
if (PropertyInfo.PropertyType == typeof(DateTime) || PropertyInfo.PropertyType == typeof(DateTime?))
{
dateColumns.Add(datecolumn);
}
datecolumn++;
}
// Create the file using the FileInfo object
var file = new FileInfo(outputDir + fileName);
//create new excel package and save it
using (var package = new ExcelPackage())
{
//create new worksheet
var worksheet = package.Workbook.Worksheets.Add("Results");
// add headers
worksheet.Cells["A1"].LoadFromCollection(data, true);
//format date field
dateColumns.ForEach(item => worksheet.Column(item).Style.Numberformat.Format = "dd-mm-yyyy");
// auto size columns
worksheet.Cells.AutoFitColumns();
//save package
package.SaveAs(file);
}
변환할 CSV와 동일한 문제가 발생했습니다. 나는 이것을 조금 다른 방식으로 할 수 있었다.
private string ConvertToExcel(string CSVpath, string EXCELPath)
{
try
{
string Filename = System.IO.Path.GetFileNameWithoutExtension(CSVpath);
string DirectoryName = System.IO.Path.GetDirectoryName(CSVpath);
EXCELPath = DirectoryName + "\\" + Filename + ".xlsx";
string worksheetsName = "Report";
bool firstRowIsHeader = false;
var format = new OfficeOpenXml.ExcelTextFormat();
format.Delimiter = '|';
format.EOL = "\n";
using (OfficeOpenXml.ExcelPackage package = new OfficeOpenXml.ExcelPackage(new System.IO.FileInfo(EXCELPath)))
{
string dateformat = "m/d/yy h:mm";
//string dateformat = System.Globalization.DateTimeFormatInfo.CurrentInfo.ShortDatePattern;
OfficeOpenXml.ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(worksheetsName);
worksheet.Cells["A1"].LoadFromText(new System.IO.FileInfo(CSVpath), format, OfficeOpenXml.Table.TableStyles.Medium2, firstRowIsHeader);
worksheet.Column(3).Style.Numberformat.Format = dateformat;
worksheet.Column(5).Style.Numberformat.Format = dateformat;
worksheet.Column(6).Style.Numberformat.Format = dateformat;
worksheet.Column(20).Style.Numberformat.Format = dateformat;
worksheet.Column(21).Style.Numberformat.Format = dateformat;
worksheet.Column(22).Style.Numberformat.Format = dateformat;
package.Save();
}
}
catch (Exception ex)
{
//DAL.Operations.Logger.LogError(ex);
Console.WriteLine(ex);
Console.Read();
}
return EXCELPath;
}
참조URL : https://stackoverflow.com/questions/22832423/excel-date-format-using-epplus
'IT이야기' 카테고리의 다른 글
셸 스크립트의 명령줄을 통해 예상에 인수를 전달하는 방법 (0) | 2021.09.30 |
---|---|
AngularJS: $resource를 사용하여 파일 업로드(솔루션) (0) | 2021.09.30 |
dataTable() 대 DataTable() - 차이점이 있는 이유와 함께 작동 (0) | 2021.09.30 |
Haskell에서 새 모나드를 정의하면 Applicative에 대한 인스턴스가 발생하지 않습니다. (0) | 2021.09.29 |
@Nonnull 주석이 런타임에 확인되는 이유 (0) | 2021.09.29 |