gpt4 book ai didi

c# - 从 Controller 导出数据到 CSV

转载 作者:太空宇宙 更新时间:2023-11-03 19:09:38 28 4
gpt4 key购买 nike

我正在使用 CsvHelper ASP.NET MVC 项目中的库将数据导出到 CSV,我发现导出的数据被截断,或者在较小的列表的情况下,根本没有写入数据,我收到一个空白的 CSV文件。

我的基 Controller 有一个像这样的方法(由继承自此类的 Controller 调用以导出实体列表):

protected FileContentResult GetExportFileContentResult(IList data, string filename)
{
using (var memoryStream = new MemoryStream())
{
using (var streamWriter = new StreamWriter(memoryStream))
{
using (var csvWriter = new CsvWriter(streamWriter))
{
csvWriter.WriteRecords(data);
return File(memoryStream.ToArray(), "text/csv", filename);
}
}
}
}

随着列表 1k+ 项的导出,最后几项似乎被切断了。当项目列表少于 ~100 时,返回的 CSV 文件为空白且不包含任何数据。

我尝试直接写入输出流而不是 MemoryStream,并收到相同的结果。

还尝试删除 using 语句以防过早处理流,但也没有导致任何更改。

使用此库正确创建 CSV 文件的正确方法是什么(即包含所有行,并且无论列表大小如何都有效)?

编辑

决定使用 CsvHelper 报废并使用了另一个名为 CsvTools 的库反而。这没有任何问题。我的代码在下面供引用。

protected FileContentResult GetExportFileContentResult(IList data, string filename)
{
using (var memoryStream = new MemoryStream())
{
using (var streamWriter = new StreamWriter(memoryStream))
{
var dt = DataTable.New.FromEnumerable(data);
dt.SaveToStream(streamWriter);
return File(memoryStream.ToArray(), "text/csv", filename);
}
}
}

附带说明一下,尝试了 Simon 在下面直接使用内存流而不是调用 ToArray 的建议,但得到了关于流被关闭的错误,并且还没有开始调试它。

最佳答案

原因是因为您没有将写入器中的数据刷新到流中。 writer 会在写满时定期自行刷新,但您需要确保在最后执行此操作。

选项 1:

using (var memoryStream = new MemoryStream())
using (var streamWriter = new StreamWriter(memoryStream))
using (var csvWriter = new CsvWriter(streamWriter))
{
csvWriter.WriteRecords(data);
streamWriter.Flush();
memoryStream.Position = 0;
return File(memoryStream, "text/csv", filename);
}

选项 2:

using (var memoryStream = new MemoryStream())
{
using (var streamWriter = new StreamWriter(memoryStream))
using (var csvWriter = new CsvWriter(streamWriter))
{
csvWriter.WriteRecords(data);
} // The stream gets flushed here.
memoryStream.Position = 0;
return File(memoryStream, "text/csv", filename);
}

关于c# - 从 Controller 导出数据到 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21898462/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com