excelシートから日時型の値を読み取ろうとすると、double値が返されます。たとえば、このような値'2007-02-19 14:11:45.730'
を読み取りたい場合、double型の値を取得しています。さらに、timepanを使用してこのdouble値を変換しています、しかし、私はこの値'2007-02-19 12:00:00 AM'
のみを取得しているため、正常に完了しません
今、最初の値とまったく同じ日時値が必要です。私のコードは次のようなものです:-
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 Automationから.net形式に変換する必要があります。
double d = double.Parse(b);
DateTime conv = DateTime.FromOADate(d);
おそらく、 DateTime.FromOADate
メソッドを使用して、Excelと.netの間で変換を試みることができます。
Excelシートから日時値を読み取る:これを試してみてください。
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からデータを取得できます
Excelシートからの日付値の読み取りに関連する別の thread に投稿した簡単な関数を試してみてください。
入力としてセルからテキストを取得し、出力としてDateTimeを提供します。
.Net開発コミュニティの利益のために提供されている私のサンプルコードの改善を見てうれしいです。
スレッドのリンクは次のとおりです C#はスプレッドシートからExcelの日付を読み取っていません
私は同様の状況にあり、これを機能させるために以下のコードを使用しました。
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に役立つことを願っています
または、セルが既に実際の日付である場合、.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