C# 从C导出时,字符串在CSV中不显示为文本#

C# 从C导出时,字符串在CSV中不显示为文本#,c#,csv,export-to-csv,C#,Csv,Export To Csv,我有一组代码0075、0062等,在数据库中保存为字符串,并在模型中声明为字符串。但是,当我使用CSV Helper在CSV中导出详细信息时,代码不会保存为文本,而是保存为数字。也就是说,0075另存为75。我已尝试在字符串前面添加“=”,但这不起作用。或者像下面那样尝试。但这是徒劳的。 下面是我的代码: streamWriter.WriteLine("Code;"); streamWriter.WriteLine(string.Join(";", "\""+result.Code+"\""))

我有一组代码0075、0062等,在数据库中保存为字符串,并在模型中声明为字符串。但是,当我使用CSV Helper在CSV中导出详细信息时,代码不会保存为文本,而是保存为数字。也就是说,0075另存为75。我已尝试在字符串前面添加“=”,但这不起作用。或者像下面那样尝试。但这是徒劳的。 下面是我的代码:

streamWriter.WriteLine("Code;");
streamWriter.WriteLine(string.Join(";", "\""+result.Code+"\""));
知道如何将声明为字符串的result.Code保存为我的CSV中的文本吗

模型中声明的代码:

public string Code { get; set; }

看起来像works(至少在Excel 2010上)建议的方法,即将每个单元格格式化为

"=""String Value"""
这里有一个静态助手类,它完成了必要的工作。因为您使用了
对于分隔符,我认为您所在的区域
是十进制分隔符;为了概括我的答案,我使用列表分隔符

public static class CsvWriter
{
    public static void WriteToCsv(IEnumerable<string> cells, TextWriter writer, CultureInfo cultureInfo = null)
    {
        if (cells == null || writer == null)
            throw new ArgumentNullException();
        string listSeparator = (cultureInfo ?? System.Globalization.CultureInfo.CurrentCulture).TextInfo.ListSeparator;
        bool first = true;
        foreach (var cell in cells)
        {
            if (!first)
                writer.Write(listSeparator);
            writer.Write(ToCsvCell(cell));
            first = false;
        }
        writer.Write("\r\n");
    }

    public static void WriteToCsv<TEnumerable>(IEnumerable<TEnumerable> lines, TextWriter writer, CultureInfo cultureInfo = null) where TEnumerable : IEnumerable<string>
    {
        if (lines == null || writer == null)
            throw new ArgumentNullException();
        cultureInfo = cultureInfo ?? System.Globalization.CultureInfo.CurrentCulture;
        foreach (var cells in lines)
            WriteToCsv(cells, writer, cultureInfo);
    }

    public static string ToCsv<TEnumerable>(IEnumerable<TEnumerable> lines, CultureInfo cultureInfo = null) where TEnumerable : IEnumerable<string>
    {
        using (var writer = new StringWriter())
        {
            WriteToCsv(lines, writer, cultureInfo);
            return writer.ToString();
        }
    }

    static string ToCsvCell(string s)
    {
        if (s == null)
            return "";
        s = s.Replace("\"", "\"\"\"\"");
        return string.Format("\"=\"\"{0}\"\"\"", s);
    }
}

Excel将把上面创建的所有CSV单元格解释为字符串文本。

看起来像works建议的方法(至少在Excel 2010上),即将每个单元格格式化为

"=""String Value"""
这里有一个静态助手类,它完成了必要的工作。因为您使用了
对于分隔符,我认为您所在的区域
是十进制分隔符;为了概括我的答案,我使用列表分隔符

public static class CsvWriter
{
    public static void WriteToCsv(IEnumerable<string> cells, TextWriter writer, CultureInfo cultureInfo = null)
    {
        if (cells == null || writer == null)
            throw new ArgumentNullException();
        string listSeparator = (cultureInfo ?? System.Globalization.CultureInfo.CurrentCulture).TextInfo.ListSeparator;
        bool first = true;
        foreach (var cell in cells)
        {
            if (!first)
                writer.Write(listSeparator);
            writer.Write(ToCsvCell(cell));
            first = false;
        }
        writer.Write("\r\n");
    }

    public static void WriteToCsv<TEnumerable>(IEnumerable<TEnumerable> lines, TextWriter writer, CultureInfo cultureInfo = null) where TEnumerable : IEnumerable<string>
    {
        if (lines == null || writer == null)
            throw new ArgumentNullException();
        cultureInfo = cultureInfo ?? System.Globalization.CultureInfo.CurrentCulture;
        foreach (var cells in lines)
            WriteToCsv(cells, writer, cultureInfo);
    }

    public static string ToCsv<TEnumerable>(IEnumerable<TEnumerable> lines, CultureInfo cultureInfo = null) where TEnumerable : IEnumerable<string>
    {
        using (var writer = new StringWriter())
        {
            WriteToCsv(lines, writer, cultureInfo);
            return writer.ToString();
        }
    }

    static string ToCsvCell(string s)
    {
        if (s == null)
            return "";
        s = s.Replace("\"", "\"\"\"\"");
        return string.Format("\"=\"\"{0}\"\"\"", s);
    }
}

Excel将把上面创建的所有CSV单元格解释为字符串文字。

结果的类型是什么。
result.code
?如果它是一个
字符串
,那么您的问题在代码中更深层。如果它是一个
int
,那么尝试
result.code.ToString(“0000”)
。我感觉到它默认的excel行为。。您需要在excel工作表中进行一些设置以显示该值。。通常在列中它不会显示,但当您关注该列时,如果我没有错,您可以在顶部看到实际结果。您使用什么打开csv文件?MsExcel?在记事本++中打开文件,看看那些0是否存在。我错过了你说的
结果的那一行。code
是一个
字符串。您需要向我们显示分配
结果的代码。code
,因为这就是您的问题所在。@Enigmativity:我已在问题中添加了代码。
结果的类型是什么。code
?如果它是一个
字符串
,那么您的问题在代码中更深层。如果它是一个
int
,那么尝试
result.code.ToString(“0000”)
。我感觉到它默认的excel行为。。您需要在excel工作表中进行一些设置以显示该值。。通常在列中它不会显示,但当您关注该列时,如果我没有错,您可以在顶部看到实际结果。您使用什么打开csv文件?MsExcel?在记事本++中打开文件,看看那些0是否存在。我错过了你说的
结果的那一行。code
是一个
字符串。您需要向我们显示分配
结果的代码。code
,因为这就是您的问题所在。@Enigmativity:我已在问题中添加了代码。