Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将excel导出到datatable时,日期和月份值被翻转_C#_.net_Excel_Datetime - Fatal编程技术网

C# 将excel导出到datatable时,日期和月份值被翻转

C# 将excel导出到datatable时,日期和月份值被翻转,c#,.net,excel,datetime,C#,.net,Excel,Datetime,如果我执行数据->文本到列->文本,则不会翻转日期,但在我的情况下,日期将强制以日期格式输入。我已经看过stackoverflow中的日期翻转问题,但它只涉及一个字段。我想把整个excel放在一个数据表中,而不让日期翻转。还有一个问题是,excel中的日期有时只能作为文本上传,所以在后台代码中,我不能使用强制函数来翻转日期。 我使用的是visual studio 2013,C#假设datetime值都在电子表格的同一列中,则在行中循环并根据需要重新设置日期格式应该相对容易: string con

如果我执行数据->文本到列->文本,则不会翻转日期,但在我的情况下,日期将强制以日期格式输入。我已经看过stackoverflow中的日期翻转问题,但它只涉及一个字段。我想把整个excel放在一个数据表中,而不让日期翻转。还有一个问题是,excel中的日期有时只能作为文本上传,所以在后台代码中,我不能使用强制函数来翻转日期。
我使用的是visual studio 2013,C#

假设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 
    }
}

我没有时间测试这个代码,但这应该足以让你向前迈进。

我能建议的最好办法是,在填写数据表之前,根据需要循环检查工作表中的结果,评估并重新格式化日期。如果你能为此创建一个新的数据表,那将非常有用。@Enigmativity你是针对我的建议来回答我的吗?@Ortund-不,这是对OP的一个评论。@Enigmativity实际上代码并没有起到多大作用,它只是从excel中获取dt中的值,以便在检查dt的每个值后可以将其上载到DB。我使用了一个日期验证器来确保它的格式正确。但随着日期的翻转,天数按月份验证。很抱歉,它给出了一个错误“方法'Tostring'不重载'1'参数”。
行[3]
是一个
对象。您需要先将其强制转换为
DateTime
,然后调用
ToString
方法在行的末尾。不过,`(DateTime)演员组应该注意这一点
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.
    }
}