将excel导出到数据表时,日期和月份值将被翻转

时间:2017-07-18 09:51:27

标签: c# .net excel datetime

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#

1 个答案:

答案 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.
    }
}

我没有时间测试此代码,但它应该足以让您前进。