以下是我用于将表格内容导出为CSV的(粗略)方法。我动态地想出了这个,但是表中的数据是从Sharepoint站点创建的Excel电子表格中加载的。我不知道转换过程或我的方法是否是原因,但是大量的这些字符:Â
正被导入到单元格中。
此外,大量记录将其字段拆分为两行而不是一行。这是我第一次尝试以编程方式导出CSV(而不是使用excel),因此任何帮助都会非常值得赞赏。
控制器方法
public ActionResult ExportToCsv()
{
using (StringWriter writer = new StringWriter())
{
var banks = db.BankListMaster.Include(b => b.BankListAgentId).ToList();
writer.WriteLine("Bank Name, EPURL, AssociatedTPMBD, Tier, FixedLifeMasterSAF, VariableLifeMasterSAF, FixedLifeSNY, VariableLifeMasterSNY, SpecialNotes, WelcomeLetterReq, " +
"BackOfficeNotification, LinkRepsToDynamics, RelationshipCode, INDSGC, PENSGC, LicensingContract, MiscellaneousNotes, ContentTypeID1, CreatedBy, MANonresBizNY, Attachment");
foreach (var item in banks)
{
writer.Write(item.BankName + ",");
if(String.IsNullOrWhiteSpace(item.EPURL))
{
writer.Write(item.EPURL + ",");
}
else
{
writer.Write(item.EPURL.Trim() + ",");
}
writer.Write(item.AssociatedTPMBD + ",");
writer.Write(item.Tier + ",");
writer.Write(item.LicensingContract + ",");
writer.Write(item.MiscellaneousNotes + ",");
writer.Write(item.ContentTypeID1 + ",");
writer.Write(item.CreatedBy + ",");
writer.Write(item.MANonresBizNY + ",");
writer.Write(item.Attachment);
writer.Write(writer.NewLine);
}
return File(new System.Text.UTF8Encoding().GetBytes(writer.ToString().Replace("Â", "")), "text/csv", "BankList.csv");
}
}
答案 0 :(得分:1)
CSV是一种指定不当的文件格式。没有指定几个重要的事情:
Excel通常是有效CSV格式的参考。但是,即使Excel也会根据您的语言环境选择字段分隔符和编码。
在您的情况下,编码很可能是主要问题。您使用UTF-8,但消费者将其视为ISO-8859-1或ANSI。出于这个原因,经常出现字符Â
,其二进制代码在UTF-8中用于引入双字节序列。更改编码以修复Â
。
下一步,正确引用文本字段,即在开头和结尾添加双引号,并将字段中的所有双引号加倍。