нужна помощь в передаче списка в этот класс экспорта csv

#c# #export #export-to-csv

#c# #экспорт #экспорт в csv

Вопрос:

Я нашел этот класс экспорта CSV в Интернете и хотел бы передать свой собственный список из другого класса мой список уже подготовлен и содержит 3 столбца

  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 amp;amp; ((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;

            }
        }
  

Комментарии:

1. В чем ваш вопрос???

2. Итак, в чем ваш вопрос? Как использовать класс? или как настроить свой класс для работы с ним? Экспорт CSV действительно довольно прост, я бы очень предпочел написать свой собственный класс для его обработки, который

3. ну, мой список не называется list<t>, должен ли я изменить его на свой фактический список

Ответ №1:

Если вам нужна помощь в использовании класса, я бы сказал, что вам нужно сделать что-то вроде этого.

Создайте класс для своих данных..

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

передайте список типа MyData в ваш класс CsvExport следующим образом…

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

теперь у вас должен быть выходной файл, подобный…

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

Чтобы использовать другой класс ввода, просто переключите ссылки MyData на то, что когда-либо вызывал ваш класс

Комментарии:

1. что, если я захочу экспортировать результат из другого класса

2. @bugz: используемый вами класс CsvExport использует отражение для создания значений столбцов на основе свойств. Поэтому класс, который вы ему передаете, должен иметь только те свойства, которые вы хотите использовать при экспорте. На мой взгляд, в любом случае это не очень хороший метод. Какие данные есть у вашего входного класса? Как вы храните заголовок столбца и данные?

3. класс возвращает точные данные, которые мне нужны, возвращают результат. Где(i => IForEmployee(фасад, т.е. Сотрудник)). ToList(); Это то, что он возвращает, и включает в себя Employee = employee, Manager = manager, Weeks = new List<строка> { новая неделя (info.Week) . toString(«end») } результат — это список, который мне нужен var result = новый список<Утвердить>();

4. @bugz: не могли бы вы опубликовать структуру своего класса, пожалуйста (в отдельном блоке кода, чтобы он отображался при прокрутке)

5. ах, я думаю, что это работает, проблема в том, что программа запускается вечно

Ответ №2:

Вот пример использования экспортера с образцом класса

 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");
  

Итак, в основном создайте CsvExport<YourClass> список существующих объектов и путь к нему