使用C#中的CSVHelper更改CSV文件中的标题名称

时间:2016-06-27 00:08:55

标签: c# asp.net asp.net-mvc csv

我正在使用CSV Helper库为用户生成CSV文件 填充并上传到系统中。我的问题是WriteHeader方法只是写了类名为" PropertyValue"的类的属性,这对用户不友好。是否有一种方法可以使文本生成用户友好,但仍然能够成功地将类映射到文件数据?

我的代码如下所示:

powershell

我想知道是否有一些元数据标签或我可以放在我的PropertyUploadCSVRowHelper类中的每个属性之上,以将我想要生成的文本放在文件中

提前致谢

2 个答案:

答案 0 :(得分:0)

这可能不会直接回答您的问题,因为您说要使用csvhelper,但如果您只编写小尺寸文件(这是我用来生成csv的简单函数。注意,csvhelper会好很多对于较大的文件,因为这只是构建一个字符串而不是流式传输数据。

只需在下面的代码中自定义columns数组,以满足您的需求。

public string GetCsv(string[] columns, List<object[]> data)
{
    StringBuilder CsvData = new StringBuilder();

    //add column headers
    string[] s = new string[columns.Length];
    for (Int32 j = 0; j < columns.Length; j++)
    {
        s[j] = columns[j];
        if (s[j].Contains("\"")) //replace " with ""
            s[j].Replace("\"", "\"\"");
        if (s[j].Contains("\"") || s[j].Contains(" ")) //add "'s around any string with space or "
            s[j] = "\"" + s[j] + "\"";
    }
    CsvData.AppendLine(string.Join(",", s));

    //add rows
    foreach (var row in data)
    {
        for (int j = 0; j < columns.Length; j++)
        {
            s[j] = row[j] == null ? "" : row[j].ToString();
            if (s[j].Contains("\"")) //replace " with ""
                s[j].Replace("\"", "\"\"");
            if (s[j].Contains("\"") || s[j].Contains(" ")) //add "'s around any string with space or "
                s[j] = "\"" + s[j] + "\"";
        }
        CsvData.AppendLine(string.Join(",", s));
    }

    return CsvData.ToString();

}

以下是如何使用它的小提琴示例:https://dotnetfiddle.net/2WHf6o

祝你好运。

答案 1 :(得分:0)

不确定2年前是否存在,但是现在,我们可以使用以下属性函数来更改属性/列名称:

[CsvHelper.Configuration.Attributes.Name("Column/Field Name")] 

完整代码:

using CsvHelper;
using System.Collections.Generic;
using System.IO;

namespace Test
{
    class Program
    {
        class CsvColumns
        {
            private string column_01;

            [CsvHelper.Configuration.Attributes.Name("Column 01")] // changes header/column name Column_01 to Column 01
            public string Column_01 { get => column_01; set => column_01 = value; }
        }

        static void Main(string[] args)
        {
            List<CsvColumns> csvOutput = new List<CsvColumns>();
            CsvColumns rows = new CsvColumns();
            rows.Column_01 = "data1";
            csvOutput.Add(rows);

            string filename = "test.csv";
            using (StreamWriter writer = File.CreateText(filename))
            {
                CsvWriter csv = new CsvWriter(writer);
                csv.WriteRecords(csvOutput);
            }
        }
    }
}