Excel 시트에서 datetime 유형 값을 읽으려고 할 때 이중 값을 반환합니다. 예를 들어 '2007-02-19 14:11:45.730'
이와 같은 값을 읽으려면 이중 유형 값을 얻습니다. 더 나아가 시간 범위를 사용 하여이 이중 값을 변환하지만 성공적으로 완료되지는 않았습니다. '2007-02-19 12:00:00 AM'
이제이 값만 얻고 있기 때문에 첫 번째 값과 똑같은 datetime 값을 원합니다. 내 코드는 다음과 같습니다.
TimeSpan datefromexcel = new TimeSpan(Convert.ToInt32((range.Cells[rCnt, cCnt] as Excel.Range).Value2), 0, 0, 0);
DateTime inputdate = new DateTime(1900, 1, 1).Add(datefromexcel);
arrrow2[cCnt - 1] = inputdate.ToString();
도와주세요!!! 감사.
답변
DateTime.FromOADate를 사용하여 OLE 자동화에서 .net 형식으로 날짜 형식을 변환해야합니다.
double d = double.Parse(b);
DateTime conv = DateTime.FromOADate(d);
답변
이 DateTime.FromOADate
방법을 사용하여 Excel과 .net간에 변환을 시도 할 수 있습니다.
답변
Excel 시트에서 Datetime 값 읽기 : 시도해보십시오.
string sDate = (xlRange.Cells[4, 3] as Excel.Range).Value2.ToString();
double date = double.Parse(sDate);
var dateTime = DateTime.FromOADate(date).ToString("MMMM dd, yyyy");
답변
또는 단순히 OleDbDataAdapter를 사용하여 Excel에서 데이터를 가져올 수 있습니다.
답변
또는 셀이 이미 실제 날짜 인 경우 .Value2 대신 .Value를 사용하십시오.
excelApp.Range[namedRange].Value
{21/02/2013 00:00:00}
Date: {21/02/2013 00:00:00}
Day: 21
DayOfWeek: Thursday
DayOfYear: 52
Hour: 0
Kind: Unspecified
Millisecond: 0
Minute: 0
Month: 2
Second: 0
Ticks: 634970016000000000
TimeOfDay: {00:00:00}
Year: 2013
excelApp.Range[namedRange].Value2
41326.0
답변
나는 비슷한 상황이 있었고이 작업을 위해 아래 코드를 사용했습니다 ..
Aspose.Cells.LoadOptions loadOptions = new Aspose.Cells.LoadOptions(Aspose.Cells.LoadFormat.CSV);
Workbook workbook = new Workbook(fstream, loadOptions);
Worksheet worksheet = workbook.Worksheets[0];
dt = worksheet.Cells.ExportDataTable(0, 0, worksheet.Cells.MaxDisplayRange.RowCount, worksheet.Cells.MaxDisplayRange.ColumnCount, true);
DataTable dtCloned = dt.Clone();
ArrayList myAL = new ArrayList();
foreach (DataColumn column in dtCloned.Columns)
{
if (column.DataType == Type.GetType("System.DateTime"))
{
column.DataType = typeof(String);
myAL.Add(column.ColumnName);
}
}
foreach (DataRow row in dt.Rows)
{
dtCloned.ImportRow(row);
}
foreach (string colName in myAL)
{
dtCloned.Columns[colName].Convert(val => DateTime.Parse(Convert.ToString(val)).ToString("MMMM dd, yyyy"));
}
/*******************************/
public static class MyExtension
{
public static void Convert<T>(this DataColumn column, Func<object, T> conversion)
{
foreach (DataRow row in column.Table.Rows)
{
row[column] = conversion(row[column]);
}
}
}
이것이 some1 thx_joxin 도움이되기를 바랍니다.
답변
Excel 시트에서 날짜 값을 읽는 것과 관련된 다른 스레드에 게시 한 간단한 기능을 사용해 볼 수도 있습니다 .
단순히 셀의 텍스트를 입력으로 가져오고 DateTime을 출력으로 제공합니다.
.Net 개발 커뮤니티의 이익을 위해 제공된 샘플 코드의 개선을 보게되어 기쁩니다.
다음은 스프레드 시트에서 Excel 날짜를 읽지 않는 스레드 C #에 대한 링크입니다.