【发布时间】:2016-06-15 15:30:57
【问题描述】:
我的公司有客户线索的 CSV 文件,需要导入到我们的 CRM 中。我需要导入的 CSV 文件列按此顺序才能成功导入。在某些情况下,如果用户没有正确格式化列,可能会出现用户错误,并且 First Name 可能会排在第一位。为了防止以这种方式导入整个文件,我需要检查所有列是否按此顺序匹配:
- 公司名称
- 名字
- 姓氏
- 职位名称
- 电子邮件
- 街道地址
- 城市
- 状态
- 邮编
- 电话
- 手机
- 传真
- 网址
到目前为止,我没有正确验证公司名称是否排在第一位,而是将 CSV 中的 A 列保存为公司名称。我已经尝试了很多类似的事情,但没有运气。我很难找到编写代码背后的逻辑。 注意: 我所写的内容没有读取列标题,我确定这就是我的问题所在。
控制器:
[HttpPost]
public ActionResult LeadProcessImport(HttpPostedFileBase FileUpload)
{
DataTable dt = new DataTable();
if (FileUpload == null)
{
TempData["Message"] = "";
return View();
}
string ext = Path.GetExtension(FileUpload.FileName);
if (FileUpload.ContentLength > 0)
{
string fileName = Path.GetFileName(FileUpload.FileName);
string path = Path.Combine(Server.MapPath("~/Content/images"), fileName);
try
{
FileUpload.SaveAs(path);
dt = ProcessCSV(path);
foreach (DataRow row in dt.Rows)
{
Lead leadImport = new Lead();
// order I need columns to appear in CSV
//
leadImport.CompanyName = row[0].ToString();
leadImport.FirstName = row[1].ToString();
leadImport.LastName = row[2].ToString();
leadImport.Title = row[3].ToString();
leadImport.Email = row[4].ToString();
leadImport.StreetAddress = row[5].ToString();
leadImport.City = row[6].ToString();
leadImport.State_Province = row[7].ToString();
leadImport.Zip_PostalCode = row[8].ToString();
leadImport.Phone = row[9].ToString();
leadImport.Mobile = row[10].ToString();
leadImport.Fax = row[11].ToString();
leadImport.WebURL = row[12].ToString();
leadImport.LeadSource = 1;
leadImport.LeadStatus = 2;
// If string "Company Name" in header does not appear
// first, dump the Datatable and return to different page
// no workie
if (leadImport.CompanyName != row[0].ToString())
{
dt.Dispose();
return Redirect(Url.Action("LeadProcess"));
}
else
// if all columns are in correct order, carry on
// with the import
{
db.Leads.Add(leadImport);
}
}
db.SaveChanges();
}
catch (Exception ex)
{
ViewData["Feedback"] = ex.Message;
}
}
else
{
ViewData["Feedback"] = "Please select a file";
}
dt.Dispose();
return Redirect(Url.Action("Index"));
}
【问题讨论】:
-
您需要在
ProcessCSV方法中检查列标题。这会在将导入全部加载到DataTable之前停止导入 -
leadImport.CompanyName将始终匹配row[0].ToString(),因为您将此值设置为高于条件。 (创建Lead对象后的第一行) -
我知道我需要这样做,但我不确定标题的问题究竟出在哪里。我仍然是 .NET MVC 的 n00b,所以这对你们来说可能是一个愚蠢的问题。我很感激帮助。我试试看。
-
我会检查该行的行数。如果计数与 13 不匹配,您马上就知道它与格式不匹配。
-
每个 CSV 文件更改的行数。更重要的是,我需要告诉 ProcessCSV 方法以确保首先读取公司名称字符串,然后是 fName、lName、Title 等......只是弄清楚如何做到这一点
标签: c# .net csv model-view-controller