Asp.net mvc ASP MVC 3-导出到CSV方法,包括数据库中未包含的垃圾字符
下面是我用来将表格内容导出为CSV的(粗略)方法。我是动态地想到这个的,但是表中的数据是从Sharepoint网站创建的Excel电子表格加载的。我不知道转换过程或我的方法是否是原因,但大量这些字符:Asp.net mvc ASP MVC 3-导出到CSV方法,包括数据库中未包含的垃圾字符,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-2,csv,export-to-csv,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 2,Csv,Export To Csv,下面是我用来将表格内容导出为CSV的(粗略)方法。我是动态地想到这个的,但是表中的数据是从Sharepoint网站创建的Excel电子表格加载的。我不知道转换过程或我的方法是否是原因,但大量这些字符:正在导入单元格中 此外,大量记录的字段被分成两行,而不是一行。这是我第一次尝试以编程方式导出到CSV(而不是使用excel),因此任何帮助都将非常宝贵 控制器方法 public ActionResult ExportToCsv() { using (StringWri
正在导入单元格中
此外,大量记录的字段被分成两行,而不是一行。这是我第一次尝试以编程方式导出到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");
}
}
CSV是一种指定不当的文件格式。有几件重要的事情没有具体说明:
- 字段分隔符。即使它被称为“逗号分隔”,Excel有时也会使用分号(取决于您的区域设置!)
- 编码(UTF-8、ISO-8859-1、ANSI/Windows-1252等)
- 换行符的类型(CR、NL或CR NL)
- 是否所有字段都必须用双引号引起来,或仅包含字段分隔符、行分隔符、空格等的字段
- 是否从未加引号的字段中修剪空白
- 是否允许在带引号的字段中使用换行符(Excel允许)
- 如果双引号是字段内容的一部分,则如何转义双引号(通常是双引号)
Excel通常是有效CSV格式的参考。但是,即使是Excel也会根据您的区域设置选择字段分隔符和编码
在您的情况下,编码很可能是主要问题。您使用UTF-8,但消费者将其视为ISO-8859-1或ANSI。因此,字符经常出现,其二进制代码在UTF-8中用于引入双字节序列。更改编码以修复
作为下一步,请正确引用文本字段,即在开始和结束处添加双引号,并在字段中添加双引号。CSV是一种指定不当的文件格式。有几件重要的事情没有具体说明:
- 字段分隔符。即使它被称为“逗号分隔”,Excel有时也会使用分号(取决于您的区域设置!)
- 编码(UTF-8、ISO-8859-1、ANSI/Windows-1252等)
- 换行符的类型(CR、NL或CR NL)
- 是否所有字段都必须用双引号引起来,或仅包含字段分隔符、行分隔符、空格等的字段
- 是否从未加引号的字段中修剪空白
- 是否允许在带引号的字段中使用换行符(Excel允许)
- 如果双引号是字段内容的一部分,则如何转义双引号(通常是双引号)
Excel通常是有效CSV格式的参考。但是,即使是Excel也会根据您的区域设置选择字段分隔符和编码
在您的情况下,编码很可能是主要问题。您使用UTF-8,但消费者将其视为ISO-8859-1或ANSI。因此,字符经常出现,其二进制代码在UTF-8中用于引入双字节序列。更改编码以修复
作为下一步,请正确引用文本字段,即在开始和结束处添加双引号,并在字段内添加所有双引号。对于这两行,我怀疑杂项注释字段可能包含回车符/换行符。Try item.Miscellaneous.TrimEnd(新字符[]{'\r','\n'});至于这两行,我怀疑Miscellaneous Notes字段可能包含回车符/换行符。Try item.Miscellaneous.TrimEnd(新字符[]{'\r','\n'});