.Net web api 下载 csv 文件(Excel 分隔符)

问题描述 投票:0回答:1

我有一个控制器端点,我想从中生成 CSV 文件并下载它。

目前我正在使用 nuget CsvHelper,我的代码如下:

var cc = new CsvConfiguration(new System.Globalization.CultureInfo("sl-SI"));
using (var ms = new MemoryStream())
{
using (var sw = new StreamWriter(stream: ms, encoding: new UTF8Encoding(true)))
{
    using (var cw = new CsvWriter(sw, cc))
    {
        cw.WriteRecords(ListOfReports);
    }// The stream gets flushed here.
    return File(ms.ToArray(), "text/csv", $"{docNumber.Trim()}_{docType}.csv");
}
}

它生成的 CSV 非常好,但问题是,如果我在 Excel 中打开它,整行都在第一列中并且没有拆分。

我添加了这部分:

cw.WriteField("sep=,", false);
cw.NextRecord();

cw.WriteRecords(ListOfReports);
之前,它可以在 Excel 中使用,但如果我在记事本中打开它,则在我的第一行中有一个
sep=

我注意到

CultureInfo
存在差异,如果我设置
"sl-SI"
它将在斯洛文尼亚语窗口上正常工作(分隔符将是 ;),如果我设置“en-US”它将在英语 Windows 上正常工作(分隔符),但是我需要做什么才能在任何文化上工作?

有谁知道如何解决这个问题,以便它可以在 Excel 和任何其他文本编辑器中正常工作?

c# .net .net-core webapi
1个回答
0
投票

这实际上与这个超级用户问题相同,但看来您想要一种面向编程的解决方案而不是面向用户的解决方案。

问题从根本上来说是 Excel 非常不擅长处理 CSV 文件,尤其是在考虑非美国文化时。我的建议是允许用户使用像 DocumentFormat.OpenXml.

这样的库下载真正的 Excel 文件。

如果您有两个单独的下载用例(即一些用户在记事本中打开文件或使用读取 CSV 的软件使用文件,而其他用户则在 Excel 中打开文件),请为用户提供单独的选项以 CSV 或优秀。

© www.soinside.com 2019 - 2024. All rights reserved.