string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", path + new_filename);
OleDbConnection objConn = null;
System.Data.DataTable dt_sheet = null;
objConn = new OleDbConnection(connectionString);
objConn.Open();
dt_sheet = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string SheetName = dt_sheet.Rows[0]["TABLE_NAME"].ToString();
if (dt_sheet.Rows.Count > 0)
{
if (dt_sheet.Rows[0]["TABLE_NAME"].ToString() == Handle.ToString(SheetName))
{
string query = String.Format("select * from [{0}]", SheetName);
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);
DataTable dt = new DataTable();
dataAdapter.Fill(dt);
//rest code
}
}
如果我将数据 - >>文本转换为列 - >文本,则日期不会被翻转但在我的情况下,日期将强制输入日期格式。我在stackoverflow中经历了日期翻转问题,但它只占用了一个字段。我想在dataTable中获得整个excel,而不会让日期翻转。是否有任何方法可以得到它。另一个问题是excel日期中的某个时间可以仅作为文本上传,所以在后面的代码我不能去强制功能来翻转日期。 我正在使用visual studio 2013,C#
答案 0 :(得分:0)
假设日期时间值都在电子表格的同一列中,那么循环遍历行并根据需要重新格式化日期应该相对容易:
if (dt_sheet.Rows.Count > 0)
{
if (dt_sheet.Rows[0]["TABLE_NAME"].ToString() == Handle.ToString(SheetName))
{
foreach (DataRow row in dt_sheet.Rows)
{
row[3] = (DateTime)row[3].ToString("mm/dd/yyyy") as DateTime;
}
// The rest of your code goes here.
}
}
我没有时间测试此代码,但它应该足以让您前进。