(变量赋值代码中的小错误,但现在不是那么重要) 我有一个CSV文件,我通过Excel打开。该文件包含多个服务(作业)。每个工作都有一个与之关联的公司代码。这是一个相当大的文件(最多可以达到5000行)。
分包商(船员)有几个字段,如他们的代码和他们的电子邮件地址。 service(job)有工作号,服务日期,服务描述等字段。
这是我想要完成的事情: 1)遍历电子表格中的每一行 2)在每次迭代中,我需要创建一个“作业”对象和一个“子承包商”对象(如果该公司尚不存在) 3)然后我需要将“作业”添加到与它们相关联的“分包商”对象中。
最后,我需要能够访问这些分包商并与他们相关联的服务,我将使用这些服务生成电子邮件,“嘿,这些是工作,这就是你需要的东西”。 这是我到目前为止的主要代码:
InitializeComponent();
string file = "myfile.csv";
fileAddress.Text = file;
var excel = new Excel.Application();
excel.Visible = false;
excel.Workbooks.Open(file);
Excel._Worksheet sheet = excel.ActiveSheet;
Dictionary<string, Crew> crews = new Dictionary<string, Crew>();
Crew crew;
string code;
string email;
string account;
string store;
string description;
string status;
DateTime serviceDate;
var sheetLength = sheet.UsedRange.Row;
for (int i = 0; i < sheetLength; i++)
{
// empty cell means we are done with looping through the column
if (String.IsNullOrEmpty(sheet.Range["B" + i + 1].Value))
{
break;
}
code = sheet.Range["I"].Value + i + 1;
email = sheet.Range["BD"].Value + i + 1;
account = sheet.Range["C"].Value + i + 1;
store = sheet.Range["D"].Value + i + 1;
description = sheet.Range["F"].Value + i + 1;
status = sheet.Range["N"].Value + i + 1;
serviceDate = sheet.Range["G"].Value + i + 1;
if (crews.ContainsKey(code))
{
???
}
else
{
crew = new Crew(code, email);
crews.Add(code, crew);
}
}
这就是我被困的地方:if(crews.ContainsKey(code)) 如果这个工作人员已经在集合中,我需要将当前服务添加到他的列表中。 这是Crew类的样子:
class Crew
{
public Crew(string code, string email)
{
this.code = code;
this.email = email;
}
public string code { get; private set; }
public string email { get; private set; }
List<Job> jobs;
public void addService(Job job)
{
this.jobs.Add(job);
}
}
这就是我正在使用的电子表格的样子: 如果有更好(更快)的方式来组织这些数据,请告诉我。我想,逐行循环会大大减慢速度。
答案 0 :(得分:2)
你错过了Job类的定义,所以我不能告诉你如何实例化它,但是一旦你拥有它,你只需要这样做:
if (crews.ContainsKey(code))
{
// create job object
crew = crews[code];
crew.addService(job);
}
else
{
crew = new Crew(code, email);
crews.Add(code, crew);
}
请注意,当您第一次创建工作人员时,可能意味着已经有工作,在这种情况下执行此操作
if (!crews.ContainsKey(code))
{
crew = new Crew(code, email);
crews.Add(code, crew);
}
// create job object
crew = crews[code];
crew.addService(job);
注意条件中的爆炸(!),如果船员不存在则创建它,但无论哪种方式,一旦我们确定船员存在,我们就添加工作。