1

下面是我用来将表格内容导出到 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");
        }
    }
4

1 回答 1

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

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

于 2013-04-17T19:23:03.600 回答