【发布时间】:2017-07-18 09:51:26
【问题描述】:
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
}
}
如果我执行 data->text to column->text,日期不会翻转,但在我的情况下,日期将强制以日期格式输入。我已经在stackoverflow中完成了日期翻转问题,但它只占用了一个字段。我想在数据表中获得整个 excel 而不会翻转日期。有什么方法可以做到这一点。另一个问题是,有时在 excel 中的日期可以仅作为文本上传,所以在后面的代码中我不能使用强制功能来翻转日期。 我正在使用 Visual Studio 2013,C#
【问题讨论】:
-
我能建议的最好的办法是遍历工作表中的结果,并在填写数据表之前根据需要评估和重新格式化日期。
-
如果您可以为此创建一个minimal reproducible example,那将非常有用。
-
@Enigmativity 你是在跟我讨论我的建议吗?
-
@Ortund - 不,那是对 OP 的评论。
-
@Enigmativity 实际上代码并没有做太多,它只是从 excel 中获取 dt 中的值,以便在检查 dt 的每个值后可以将其上传到数据库。我使用了一个日期验证器以确保它以正确的格式出现。但是随着日期的翻转,日期将通过月份验证来验证。