如何将 Value2 字符串转换为 DateTime (Excel Interop)
How do I convert a Value2 string to a DateTime (Excel Interop)
我正在从 Excel 文件导入数据并将其转换为我正在使用的数据集(有点)。我遇到的问题是 Excel 中的两个字段是日期,但是当我进行导入时,它们变成了数字,我不确定如何让它们回到日期。最后两列是日期列 (HDate & CDate)。
这是代码
private void FillDatagrid()
{
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"\Server01\Ins\Eligible.xls");
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;
DataTable table = new DataTable("Employees");
table.Columns.Add("StoreID");
table.Columns.Add("EmpID");
table.Columns.Add("EmpName");
table.Columns.Add("Position");
table.Columns.Add("HDate");
table.Columns.Add("CDate");
int rowCount = xlRange.Rows.Count;
for (int i = 2; i <= rowCount; i++)
{
table.Rows.Add(
xlRange.Cells[i, 1].Value2.ToString(),
xlRange.Cells[i, 2].Value2.ToString(),
xlRange.Cells[i, 3].Value2.ToString(),
xlRange.Cells[i, 4].Value2.ToString(),
xlRange.Cells[i, 5].Value2.ToString(),
xlRange.Cells[i, 5].Value2.ToString());
}
DataSet ds = new DataSet();
ds.Tables.Add(table);
dataGrid.ItemsSource = ds.Tables["Employees"].DefaultView;
}
据我所知,Value2 只会转换为字符串。
注意 #1 虽然我在这个示例中将这些数据放入 DataGrid 中,但我并没有在实际的代码块中这样做。我只是想提一下,这样看来这似乎无法通过 XAML 等
中的格式来解决
注意#2 我意识到我有两次 xlRange.Cells[i, 5].Value2.ToString() 。我这样做是为了解决第 6 列有空值的问题,这是我的导入不喜欢的。我计划在解决此问题后回到该问题。
注意#3 当我说我将日期作为字符串获取时,我的意思是它来自 Excel 作为字符串但格式化为数字,所以,例如,单元格数据的日期类似于 2015 年 6 月 30 日,但它像 42185 一样进入我的数据集。
怎么样:
table.Columns.Add("HDate", typeof(DateTime));
table.Columns.Add("CDate", typeof(DateTime));
我可以通过改变我的循环来解决这个问题
for (int i = 2; i <= rowCount; i++)
{
string storeId = xlRange.Cells[i, 1].Value2.ToString();
string employeeId = xlRange.Cells[i, 2].Value2.ToString();
string employeeName = xlRange.Cells[i, 3].Value2.ToString();
string position = xlRange.Cells[i, 4].Value2.ToString();
string hDate = Convert.ToString(xlRange.Cells[i, 5].Value);
string cDate = Convert.ToString(xlRange.Cells[i, 6].Value);
table.Rows.Add(storeId, employeeId, employeeName, position, hDate, cDate);
}
这也解决了另一个问题。也就是说 Convert.ToString(xxx.Value) 处理空值,而 Value2.ToString() 不会。
我正在从 Excel 文件导入数据并将其转换为我正在使用的数据集(有点)。我遇到的问题是 Excel 中的两个字段是日期,但是当我进行导入时,它们变成了数字,我不确定如何让它们回到日期。最后两列是日期列 (HDate & CDate)。
这是代码
private void FillDatagrid()
{
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"\Server01\Ins\Eligible.xls");
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;
DataTable table = new DataTable("Employees");
table.Columns.Add("StoreID");
table.Columns.Add("EmpID");
table.Columns.Add("EmpName");
table.Columns.Add("Position");
table.Columns.Add("HDate");
table.Columns.Add("CDate");
int rowCount = xlRange.Rows.Count;
for (int i = 2; i <= rowCount; i++)
{
table.Rows.Add(
xlRange.Cells[i, 1].Value2.ToString(),
xlRange.Cells[i, 2].Value2.ToString(),
xlRange.Cells[i, 3].Value2.ToString(),
xlRange.Cells[i, 4].Value2.ToString(),
xlRange.Cells[i, 5].Value2.ToString(),
xlRange.Cells[i, 5].Value2.ToString());
}
DataSet ds = new DataSet();
ds.Tables.Add(table);
dataGrid.ItemsSource = ds.Tables["Employees"].DefaultView;
}
据我所知,Value2 只会转换为字符串。
注意 #1 虽然我在这个示例中将这些数据放入 DataGrid 中,但我并没有在实际的代码块中这样做。我只是想提一下,这样看来这似乎无法通过 XAML 等
中的格式来解决注意#2 我意识到我有两次 xlRange.Cells[i, 5].Value2.ToString() 。我这样做是为了解决第 6 列有空值的问题,这是我的导入不喜欢的。我计划在解决此问题后回到该问题。
注意#3 当我说我将日期作为字符串获取时,我的意思是它来自 Excel 作为字符串但格式化为数字,所以,例如,单元格数据的日期类似于 2015 年 6 月 30 日,但它像 42185 一样进入我的数据集。
怎么样:
table.Columns.Add("HDate", typeof(DateTime));
table.Columns.Add("CDate", typeof(DateTime));
我可以通过改变我的循环来解决这个问题
for (int i = 2; i <= rowCount; i++)
{
string storeId = xlRange.Cells[i, 1].Value2.ToString();
string employeeId = xlRange.Cells[i, 2].Value2.ToString();
string employeeName = xlRange.Cells[i, 3].Value2.ToString();
string position = xlRange.Cells[i, 4].Value2.ToString();
string hDate = Convert.ToString(xlRange.Cells[i, 5].Value);
string cDate = Convert.ToString(xlRange.Cells[i, 6].Value);
table.Rows.Add(storeId, employeeId, employeeName, position, hDate, cDate);
}
这也解决了另一个问题。也就是说 Convert.ToString(xxx.Value) 处理空值,而 Value2.ToString() 不会。