1

Voici la méthode (brute) que j'utilise pour exporter le contenu d'une table dans un fichier CSV. J'ai trouvé cela à la volée, mais les données de la table ont été chargées à partir d'une feuille de calcul Excel créée par un site Sharepoint. Je ne sais pas si ce processus de conversion ou ma méthode est la cause, mais un grand nombre de ces caractères: Â sont importés dans les cellules.ASP MVC 3 - Exporter vers la méthode CSV, y compris les caractères indésirables ne figurant pas dans la base de données

De plus, un grand nombre d'enregistrements ont leurs champs divisés en deux lignes plutôt qu'une seule. C'est ma première tentative d'exporter vers un CSV par programme (par opposition à l'utilisation d'Excel) donc toute aide serait grandement appréciée.

Contrôleur Méthode

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

En ce qui concerne les deux lignes, je soupçonne que votre champ Notes diverses peut contenir des retours chariot/saut de ligne. Essayez item.Miscellaneous.TrimEnd (new char [] {'\ r', '\ n'}); – Sparky

Répondre

1

CSV est un format de fichier qui est mal spécifié. Plusieurs éléments importants ne sont pas spécifiés:

  • Le séparateur de champ. Même si cela s'appelle «séparés par des virgules», Excel utilisera parfois le point-virgule (en fonction de vos paramètres régionaux!).
  • Le codage (UTF-8, ISO-8859-1, ANSI/Windows-1252 etc.)
  • Le type de nouvelle ligne (CR, NL ou CR NL).
  • Si tous les champs doivent être entre guillemets ou simplement ceux contenant le séparateur de champ, le séparateur de ligne, les espaces vides, etc.
  • Si l'espace blanc est rogné à partir des champs non protégés.
  • Indique si les nouvelles lignes sont autorisées dans les champs entre guillemets (Excel les autorise).
  • Comment guillemets doubles sont échappés si elles font partie du contenu du champ (normalement ils sont doublés)

Excel est généralement la référence pour un format CSV valide. Mais même Excel choisit le séparateur de champs et l'encodage en fonction de vos paramètres régionaux.

Dans votre cas, le codage est probablement le problème principal. Vous utilisez UTF-8 mais le consommateur le traite comme ISO-8859-1 ou ANSI. Pour cette raison, le caractère  apparaît souvent dont le code binaire est utilisé en UTF-8 pour introduire une séquence de deux octets. Modifiez l'encodage pour corriger le Â. A l'étape suivante, citez correctement les champs de texte, c'est-à-dire ajoutez des guillemets doubles au début et à la fin et doublez tous les guillemets dans le champ.

Questions connexes