экспорт текстового файла с разделенными запятыми значениями для использования в Excel - PullRequest
0 голосов
/ 25 апреля 2011

В моей программе C # winforms я хочу создать функцию экспорта, которая создаст текстовый файл через запятую или csv.Я не уверен в логике того, как сделать это наилучшим образом.Мой экспортированный файл будет выглядеть так:

Family Name, First Name, Sex, Age
Dekker, Sean, Male, 23
Doe, John, Male, 40

Итак, в первой строке я хочу указать имя столбца, а остальные следует рассматривать как значения.Это нормально для последующего использования?Или я не должен включать имена столбцов?

Было бы приятно услышать ваше мнение об этом!

Ответы [ 5 ]

1 голос
/ 25 апреля 2011

Шон,

извините, у меня недостаточно привилегий, чтобы комментировать свои сообщения. Я думаю, что вы можете путать файлы CSV и Excel здесь. CSV - это просто текстовый файл, в котором каждое значение разделено запятой, специального форматирования нет и т. Д. Excel будет отображать CSV-файлы, поскольку он знает, как их открывать, но вы можете также легко открыть их в блокноте.

Файлы Excel .xslx отличаются друг от друга и могут содержать все виды различных форматов, диаграмм и т. Д. Чтобы отформатировать эти файлы, важно понимать, что файлы .xslx по сути являются zip-файлами. Поэтому для начала нужно создать файл Excel с некоторыми данными, сохранить его и затем переименовать расширение в .zip

Откройте созданный сейчас zip-файл, и вы увидите несколько различных папок и файлов, из которых наиболее важными для ваших целей является каталог XL. В этой папке вы увидите XML-файл общих строк и папку с таблицами.

Давайте начнем с того, что зайдем в папку рабочего листа и откроем sheet1.xml. Ищите строку, которая говорит:

Если в этом столбце есть текст, то есть данные, которые должны читаться как Excel, у вас будет что-то вроде 0. Это означает, что ячейка A1 имеет тип строки t = "s" и что значение должно быть найдено как первое значение в файле SharedStrings.xml 0

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

Так что в вашем случае вам нужно будет сделать следующее:

1: создать документ Excel в C # - для этого есть несколько библиотек

2: открыть файл Excel в формате zip

3: изменить в вашем случае xml-файлы стилей и рабочих листов

4: сохранить документ

1 голос
/ 25 апреля 2011

Это абсолютно нормально (констатировать очевидное ....). В Excel есть небольшой флажок, который позволяет импортирующему пользователю использовать первую строку в качестве заголовков столбцов, если он выбрал ее.

Я бы также предложил не указывать пробелы в начале каждой части данных, в этом нет необходимости.

1 голос
/ 25 апреля 2011

Как правило, рекомендуется включать заголовки столбцов, единственная причина, по которой этого не делать, - это внешняя программа, над которой у вас нет контроля доступа к вашим данным, который не понимает, что первая строка - это заголовки столбцов и которые не может быть изменено.

Для создания функции экспорта должно работать что-то вроде этого:

private static List<Person> people = new List<Person>();

    static void Main(string[] args)
    {
        // add some people
        people.Add(
            new Person() { firstName = "John", familyName = "Smith", sex = Sex.Male, age = 12 }
            );
        people.Add(
            new Person() { firstName = "Mary", familyName = "Doe", sex = Sex.Female, age = 25 }
            );

        // write the data
        Write();
    }

    static void Write()
    {
        using (TextWriter tw = new StreamWriter(@"c:\junk1\test.csv", false))
        {
            // write the header
            tw.WriteLine("Family Name, First Name, Sex, Age");

            // write the details
            foreach(Person person in people)
            {
                tw.WriteLine(String.Format("{0}, {1}, {2}, {3}", person.familyName, person.firstName, person.sex.ToString(), person.age.ToString()));
            }
        }
    }
}

/// <summary>
///  Applicable sexes
/// </summary>
public enum Sex
{
    Male,
    Female
}

/// <summary>
/// holds details about a person
/// </summary>
public class Person
{
    public string familyName { get; set; }
    public string firstName { get; set; }
    public Sex sex { get; set; }
    public int age { get; set; }
}
0 голосов
/ 11 ноября 2011
  //Why not save the lines to a List<string> object, first List<sting>Object.Add//("your       headers"), use the string.Join("," "your Header Array string[]" do not add //(+",")   the .Join extension menthod will handle that for you.

// здесь приведен пример // если вы должны были извлечь значения заголовков из базы данных с помощью SQL Reader

  var reader = sqlcmdSomeQueryCommand.ExecuteReader();
  var columns = new List<string>();
  //get all the field names  from the Columns var 
  for (int intCounter = 0; intCounter < reader.FieldCount; intCounter++)
  {
      columns.Add(reader.GetName(intCounter));
  }
  strarryTmpString = columns.ToArray();
  string TmpFields = string.Join(", ", strarryTmpString);
  columns.Clear();
  columns.Add(TmpFields); 

  //you can save the TmpFieldList to later add the rest of your comma delimited fields 



write line by line in a foreach loop or use the List<string> object .foreach(delegate(string delString)
{
  someStreamWriterObject.WriteLine(delString)
}); 
0 голосов
/ 25 апреля 2011

Вы можете использовать набор данных для этого.

Пожалуйста, обратитесь здесь

...