Question

J'ai trouvé cette CSV classe d'exportation en ligne et je voudrais passer ma propre liste d'une autre classe ma liste est déjà préparée et contient 3 colonnes

 using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        using System.Data.SqlTypes;
        using System.IO;
        using System.Reflection;


          public class CsvExport<T> where T : class
        {
            public List<T> Objects;

            public CsvExport(List<T> objects)
            {
                Objects = objects;
            }

            public string Export()
            {
                return Export(true);
            }

            public string Export(bool includeHeaderLine)
            {

                StringBuilder sb = new StringBuilder();
                //Get properties using reflection.
                IList<PropertyInfo> propertyInfos = typeof(T).GetProperties();

                if (includeHeaderLine)
                {
                    //add header line.
                    foreach (PropertyInfo propertyInfo in propertyInfos)
                    {
                        sb.Append(propertyInfo.Name).Append(",");
                    }
                    sb.Remove(sb.Length - 1, 1).AppendLine();
                }

                //add value for each property.
                foreach (T obj in Objects)
                {
                    foreach (PropertyInfo propertyInfo in propertyInfos)
                    {
                        sb.Append(MakeValueCsvFriendly(propertyInfo.GetValue(obj, null))).Append(",");
                    }
                    sb.Remove(sb.Length - 1, 1).AppendLine();
                }

                return sb.ToString();
            }

            //export to a file.
            public void ExportToFile(string path)
            {
                File.WriteAllText(path, Export());
            }

            //export as binary data.
            public byte[] ExportToBytes()
            {
                return Encoding.UTF8.GetBytes(Export());
            }

            //get the csv value for field.
            private string MakeValueCsvFriendly(object value)
            {
                if (value == null) return "";
                if (value is Nullable && ((INullable)value).IsNull) return "";

                if (value is DateTime)
                {
                    if (((DateTime)value).TimeOfDay.TotalSeconds == 0)
                        return ((DateTime)value).ToString("yyyy-MM-dd");
                    return ((DateTime)value).ToString("yyyy-MM-dd HH:mm:ss");
                }
                string output = value.ToString();

                if (output.Contains(",") || output.Contains("\""))
                    output = '"' + output.Replace("\"", "\"\"") + '"';

                return output;

            }
        }
Était-ce utile?

La solution

Si vous voulez de l'aide en utilisant la classe alors je vous dire besoin de faire quelque chose comme ça.

Créer une classe pour vos données ..

public class MyData
{
   public string Column1Data {get;set;}
   public string Column2Data {get;set;}
   public string Column3Data {get;set;}
}

passer une liste de types MyData dans votre classe CsvExport comme ça ...

List<MyData> list = new List<MyData>();
//populate the list here
CsvExport<MyData> export = new CsvExport<MyData>();
export.ExportToFile(@"C:\MyExportFile.txt");

vous devriez avoir maintenant un fichier de sortie comme ...

Column1Data,Column2Data,Column3Data 
r1c1,r1c2,r1c3
r2c1,r2c2,r2c3
r3c1,r1c2,r3c3

Pour utiliser une classe d'entrée différente changer simplement les références myData à ce que jamais vous classe est appelée

Autres conseils

Voici échantillon d'utiliser l'exportateur avec classe échantillon

class Sample
{
   public string Field1 {get;set;}
   public int Field2 {get;set;}
}

List<Sample> source = new List<Sample>()

// fill list 

CsvExport<Sample> export = new CsvExport<Sample>(source);
export.ExportToFile("yourFile.csv");

Alors créez simplement la liste des CsvExport<YourClass> et le chemin des objets existants à ce

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top