平。我需要理解为什么会收到这样的错误: C# windows form import from excel error
我不能从字符串(年份)中查找年份。或者,我可以放弃拆分并直接导入字符串" date"?对不起,我在c#中太初学了,但我需要这个帮助,对我来说是一项任务。
这是我的代码:
for (int i = 0; i < dvColumns.Count; i++)
{
string columnName = string.Empty;
string columnField = string.Empty;
if ((dvColumns[i]["Header"] != null) && (!Convert.IsDBNull(dvColumns[i]["Header"])))
{
columnName = dvColumns[i]["Header"].ToString();
}
if ((dvColumns[i]["Field"] != null) && (!Convert.IsDBNull(dvColumns[i]["Field"])))
{
columnField = dvColumns[i]["Field"].ToString();
}
rangeObject = cellsObject.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, cellsObject, new object[] { row, i + 1 });
object valueObject = rangeObject.GetType().InvokeMember("Value", BindingFlags.GetProperty, null, rangeObject, null);
if (columnName == "FiscalCode" && columnField == "PartnerId")
{
string fiscalCode = Erp.Core.Utils.GetStringFromObject(valueObject);
partnerId = p.GetPartnerIdByFiscalCode(fiscalCode);
eventRow["PartnerId"] = partnerId;
}
else if (columnField == "StartDate" || columnField == "EndDate")
{
string date = Erp.Core.Utils.GetStringFromObject(valueObject);
DateTime columnDate = DateTime.Now;
string[] dateComponents = null;
int year = 0;
int month = 0;
int day = 0;
if (date.Contains("."))
{
dateComponents = date.Split('.');
}
if (date.Contains("/"))
{
dateComponents = date.Split('/');
}
if (date.Contains(":"))
{
dateComponents = date.Split(':');
}
if (dateComponents.Length > 1)
{
string s = dateComponents[0];
day = Erp.Core.Utils.GetIntFromObject(s);
s = dateComponents[1];
month = Erp.Core.Utils.GetIntFromObject(s);
s = dateComponents[2];
year = Erp.Core.Utils.GetIntFromObject(s);
columnDate = new DateTime(year, month, day, 9, 0, 0);
}
eventRow[columnField] = columnDate;
}
else if (columnField != "PartnerId" && columnField != "StartDate" && columnField != "EndDate")
{
eventRow[columnField] = valueObject;
}
}
答案 0 :(得分:0)
我试图保持excel与数据库表中相同的格式:&#39; yyyy / mm / dd hh:mm:ss.000&#39;。
第date = Erp.Core.Utils.GetStringFromObject(valueObject);
行从第一个excel单元格获取我的日期。
ds.Tables [&#34; Events&#34;]一直都是空的。
我知道这行eventRow[columnField] = date;
必须在DB中添加日期,真的吗?拆分后,一天就可以了(通过s [0]接收一个int),月份可以(通过s [1]收到一个int,但是一年的s [2]就像2017 19:06:22 ....年加时间)。我试图再次按空格分割,但没有结果,将数字(2017)保持为年变量。
答案 1 :(得分:0)
最好的方法是使用DateTime.ParseExact
方法。在您的情况下,如果原始格式为'yyyy/mm/dd hh:mm:ss.000'
,您可以将其转换为DateTime
,如下所示:
//string date = Erp.Core.Utils.GetStringFromObject(valueObject);
string date = "2017/08/15 10:20:30.000";
DateTime columnDate = DateTime.ParseExact(date, "yyyy/MM/dd HH:mm:ss.fff", CultureInfo.InvariantCulture);
这样您就可以跳过解析excel字符串了。 在您的示例中,用法将如下所示:
//...snip...
else if (columnField == "StartDate" || columnField == "EndDate")
{
string date = Erp.Core.Utils.GetStringFromObject(valueObject);
//parsing date string
DateTime columnDate = DateTime.ParseExact(date, "yyyy/MM/dd HH:mm:ss.fff", CultureInfo.InvariantCulture);
eventRow[columnField] = columnDate;
}
else if (columnField != "PartnerId" && columnField != "StartDate" && columnField != "EndDate")
{
eventRow[columnField] = valueObject;
}
如果小时数为12小时格式,请使用小写hh,例如"yyyy/MM/dd hh:mm:ss.fff"