ASP MVC 3 - 导出到CSV方法,包括不在数据库中的垃圾字符

时间:2013-04-17 18:54:31

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 csv export-to-csv

以下是我用于将表格内容导出为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");
        }
    }

1 个答案:

答案 0 :(得分:1)

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中用于引入双字节序列。更改编码以修复Â

下一步,正确引用文本字段,即在开头和结尾添加双引号,并将字段中的所有双引号加倍。