导出逗号分隔值文本文件以在excel中使用

时间:2011-04-25 11:34:51

标签: c# excel export-to-excel csv

在我的C#winforms程序中,我想创建一个导出函数,它将创建一个逗号分隔的文本文件或csv。我不确定如何以最好的方式做到这一点的逻辑。我导出的文件将是这样的:

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

所以第一行我想成为列的名称,其余的应该被视为值。这种方式可以用于以后的使用吗?或者我不应该包括列名?

很高兴听到你的经历!

5 个答案:

答案 0 :(得分:1)

这是绝对好的(陈述明显的......)。 Excel有一个小复选框,允许用户导入,如果他们选择第一行作为列标题。

我还建议您在每个数据的开头省略空格,这是没有必要的。

答案 1 :(得分:1)

一般来说,包含列标题的最佳做法是,没有这样做的唯一原因是外部程序,你无法控制访问你的数据,而没有意识到第一行是列标题,哪个无法改变。

要创建导出函数,应该可以使用以下内容:

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; }
}

答案 2 :(得分:1)

肖恩,

抱歉没有足够的权限可以直接在您的帖子上发表评论。我想你可能会在这里混淆CSV和Excel文件。 CSV只是一个文本文件,其中每个值都用逗号分隔,没有特殊的格式化等.Excel将显示CSV文件,因为它知道如何打开它们,但你可以在记事本中轻松打开它们。

Excel .xslx文件不同,可以包含各种不同的格式,图表等。要格式化这些文件,了解.xslx文件基本上是拉链非常重要。所以首先要创建一个包含一些数据的excel文件,保存它然后将扩展名重命名为.zip

打开现在创建的zip文件,您将看到许多不同的文件夹和文件,其中最重要的是XL目录。在此文件夹中,您将看到共享字符串xml文件和工作表文件夹。

让我们先进入工作表文件夹并打开sheet1.xml。寻找说“

如果此列中有文本,即excel的数据应该作为文本读取,那么您将得到类似0的内容。这表示单元格A1的类型为字符串t =“s”,且值为在SharedStrings.xml文件0中找到第一个值

如果单元格中有一个数字,那么你可能有类似的东西234.在这种情况下,Excel知道在这个单元格中使用值234。

因此,在您的情况下,您需要执行以下操作:

1:在C#中创建excel文档 - 有许多库可用于此

2:以zip格式打开excel文件

3:在您的情况下修改样式和工作表xml文件

4:保存文件

答案 3 :(得分:0)

您可以使用数据集执行此操作。

请参阅here

答案 4 :(得分:0)

  //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)
});