任何帮助都会很棒!我正在通过CSV导入Google联系人。问题是我可以获得CSV文件的特定标题的值,就像我在代码中提到的那样。任何人都可以在导入Google CSV文件时获取源代码以获取整个集合吗?
private void GoogleCsv()
{
StreamReader Sr = new StreamReader(Server.MapPath("CSVLoad//" + FileUpload.FileName));
System.Text.StringBuilder sb = new System.Text.StringBuilder();
string s;
Int64 count = 0, flag = 0;
while (!Sr.EndOfStream)
{
s = Sr.ReadLine();
a = s.Split(',')[0];
b = s.Split(',')[1];
c = s.Split(',')[2];
d = s.Split(',')[3];
e = s.Split(',')[4];
if (count == 0)
{
if ((a == "Name") && (b == "E-mail 1 - Value") && (c == "Phone 1 - Value") && (d == "Address 1 - Formatted") && (e == "Organization 1 - Name"))
{
flag = flag + 1;
count = count + 1;
}
else
{
break;
}
}
else if (count > 0)
{
if (flag == 1)
{
Contact contact = new Contact();
contact.ContactFirstName = a;
contact.ContactLastName = "";
contact.ContactEmail = b;
contact.CompanyName = e;
contact.ContactPhone = "";
contact.MobileNo = c;
contact.Designation = d;
contact.Streetone = "";
contact.Streettwo = "";
contact.Area = "";
contact.Userid = Convert.ToInt64(Session["UserId"].ToString());
contact.Organizationid = Convert.ToInt64(Session["OrgId"].ToString());
contact.Stateid = 19;
contact.Countryid = 2;
contact.Createdby = 106;
contact.Industryid = 287;
contact.Accgroupid = 627;
_importController.CsvImportDetails(contact);
}
}
}
Sr.Close();
File.Delete(Server.MapPath("CSVLoad//" + FileUpload.FileName));
}
答案 0 :(得分:3)
我使用此CsvReader类来加载CSV数据,它是免费的,快速且易于使用。
答案 1 :(得分:2)
对于类似的事情,我总是转向FileHelpers。为什么有一个解决方案来处理所有那些低级别的方面,为什么要重新发明轮子并与分隔符和所有那些gnary细节斗争?
只需定义要导入的类(基本上是字段列表),定义分隔符和忽略的字段等,然后只需调用FileHelperEngine<T>.ReadFile()
即可完成。
强烈推荐!
答案 2 :(得分:0)
一个有趣而优雅的选项是LINQToCSV项目。
答案 3 :(得分:0)
class DynamicCSV : DynamicObject
{
private Dictionary<String, int> _fieldIndex;
private string[] _RowValues;
public DynamicCSV(string currentRow, Dictionary<string, int> fieldIndex)
{
_RowValues = currentRow.Split(',');
_fieldIndex = fieldIndex;
}
public YOURLINQOBject export() {
return new YOURLINQOBject()
}
public DynamicCSV(string[] values, Dictionary<string, int> fieldIndex)
{
_RowValues = values;
_fieldIndex = fieldIndex;
//var that = new DynamicObject();
//that.TrySetMember(
}
private string TransitionName(string inputFieldName)
{
return Repo.TransitionThisName(inputFieldName);
}
public override bool TryGetMember(GetMemberBinder binder, out Object result)
{
var fieldName = binder.Name.ToUpperInvariant();
if (_fieldIndex.ContainsKey(fieldName))
{
result = _RowValues[_fieldIndex[fieldName]];
return true;
}
result = null;
return false;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
var fieldName = binder.Name.ToUpperInvariant();
if (_fieldIndex.ContainsKey(fieldName))
{
_RowValues[_fieldIndex[fieldName]] = value.ToString();
return true;
}
return false;
}
public override string ToString()
{
var sb = new StringBuilder();
sb.AppendLine("*******************************************");
foreach (var field in _fieldIndex)
{
sb.AppendLine(field.Key + " --- " + _RowValues[_fieldIndex[field.Key]]);
}
sb.AppendLine("*******************************************");
return sb.ToString();
}
}
然后为了将所有行加载到一起
public class DynamicCSVEnum : IEnumerable
{
private PeopleEnumerator _peopleEnum;
public DynamicCSVEnum(string filename)
{
_peopleEnum = new PeopleEnumerator(filename);
}
IEnumerator IEnumerable.GetEnumerator( )
{
// return a PeopleEnumerator
return _peopleEnum;
}
}
public class PeopleEnumerator : IEnumerator
{
//private List<MKG> theList;
//private int _currentIndex;
private Microsoft.VisualBasic.FileIO.TextFieldParser _FileStream;
private Dictionary<string, int> _FieldNames;
private DynamicCSV _CurrentRow;
private string _filename;
public PeopleEnumerator( string filename)
{
_filename = filename;
//theList = new List<MKG>();
//theList.Add(new MKG() { Id = 0 });
//theList.Add(new MKG() { Id = 1 });
//theList.Add(new MKG() { Id = 2 });
//_currentIndex = -1;
GetEnumerator();
}
private void GetEnumerator()
{
_FileStream = new Microsoft.VisualBasic.FileIO.TextFieldParser(_filename);
_FileStream.Delimiters = new String[] { "," };
_FileStream.HasFieldsEnclosedInQuotes = true;
_FileStream.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
var fields = _FileStream.ReadFields();
_FieldNames = new Dictionary<string, int>();
for (var i = 0; i <= fields.Length - 1; i++)
{
_FieldNames.Add(GetSafeFieldName(fields[i]), i);
}
_CurrentRow = new DynamicCSV(_FileStream.ReadFields(), _FieldNames);
}
public void Reset()
{
//_currentIndex = 0;
_FileStream.Close();
GetEnumerator();
}
public bool MoveNext()
{
//_currentIndex++;
//if (_currentIndex < theList.Count)
//{
// return true;
//}
//return false;
var line = _FileStream.ReadFields();
if (line != null && line.Length > 0)
{
_CurrentRow = new DynamicCSV(line, _FieldNames);
return true;
}
else
{
return false;
}
}
public object Current
{
//get
//{
// return theList[_currentIndex];
//}
//set
//{
// theList[_currentIndex] = (MKG)value;
//}
get { return _CurrentRow; }
}
string GetSafeFieldName(string input)
{
return input.Replace(" ", "").Replace("_", "").Replace(".","").Replace("#","").Replace("/","").Replace("\\","").ToUpperInvariant();
}
}
然后所需要的只是一个简单的
var foo = new DynamicCSVEnum(savedFileName);
foreach (DynamicCSV item in foo)
{
retVal.Add(item.LinqObjectExport());
}
foreach (var item in retVal)
{
item.ClientSet = dsid;
}
repo.InsertDataSet(retVal);