【发布时间】:2012-06-12 17:01:41
【问题描述】:
我的一个操作输出了一个 csv 文件。问题是如果一个字段包含逗号,那么它将数据行分成两个字段。我尝试使用 "\"" 将每一行包含在双引号中,但这不起作用。有人可以指导我正确的方向吗?
更新
var sw = new StringWriter();
sw.WriteLine(String.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13}", "First Name","Last Name","Address1","Address2","City","State","Postal Code","Country","Dealer ID","Dealer Name","Survey Source","Amount","Email","Survey Code"));
sw.WriteLine(String.Format("\"{0}\",\"{1}\",\"{2}\",\"{3}\",\"{4}\",\"{5}\",\"{6}\",\"{7}\",\"{8}\",\"{9}\",\"{10}\",\"{11}\",\"{12}\",\"{13}\"", model.SurveyWinnerDetails.Select(p => p.FirstName).First().Replace("\"", "\"\""),
model.SurveyWinnerDetails.Select(p => p.LastName).First().Replace("\"", "\"\""),
model.SurveyWinnerDetails.Select(p => p.Address1).First().Replace("\"", "\"\""),
model.SurveyWinnerDetails.Select(p => p.Address2).First().Replace("\"", "\"\""),
model.SurveyWinnerDetails.Select(p => p.City).First().Replace("\"", "\"\""),
model.SurveyWinnerDetails.Select(p => p.State).First().Replace("\"", "\"\""),
model.SurveyWinnerDetails.Select(p => p.PostalCode).First().Replace("\"", "\"\""),
model.SurveyWinnerDetails.Select(p => p.CountryCode).First().Replace("\"", "\"\""),
model.SurveyWinnerDetails.Select(p => p.DealerID).First().Replace("\"", "\"\""),
model.SurveyWinnerDetails.Select(p => p.DealerName).First().Replace("\"", "\"\""),
model.SurveyWinnerDetails.Select(p => p.SurveySource).First().Replace("\"", "\"\""),
model.SurveyWinnerDetails.Select(p => p.Amount).First().Replace("\"", "\"\""),
model.SurveyWinnerDetails.Select(p => p.Email).First().Replace("\"", "\"\""),
model.SurveyWinnerDetails.Select(p => p.SurveyCode).First().Replace("\"", "\"\"")));
return File(new System.Text.UTF8Encoding().GetBytes(sw.ToString()), "text/csv", "SurveyWinner.csv");
当我现在运行它时,我得到一个错误:对象引用未设置为对象的实例。
【问题讨论】:
-
CSV 处理器如何处理这个问题?这是您的要求应该回答的问题。
-
您可能不应该修改现有问题以尝试获得不同问题的答案。在您的特定情况下,以下情况之一为真:模型为空,model.SurveyWinnerDetails 中的项目为空,或通过 p.Something 选择的属性之一为空。
-
如果是后者,请尝试将 'p.Something' 替换为 'p.Something ?? ""'。
标签: c# asp.net-mvc-3