嗨,我在使用 csvHelper 在 CSV 檔案上寫入默認 DateTime 列時遇到問題我正在做的是
using (var memoryStream = new MemoryStream())
{
using (var streamWriter = new StreamWriter(memoryStream))
{
using (var csvWriter = new CsvWriter(streamWriter, CultureInfo.InvariantCulture))
{
if (!string.IsNullOrEmpty(header))
{
csvWriter.WriteField(header);
csvWriter.NextRecord();
}
csvWriter.Configuration.TypeConverterOptionsCache.GetOptions<DateTime>().Formats = new[] { "dd/MM/yyyy" };
csvWriter.Configuration.TypeConverterOptionsCache.GetOptions<DateTime?>().Formats = new[] { "" };
csvWriter.Configuration.RegisterClassMap<TMap>();
csvWriter.WriteRecords(records);
WriteGrandTotals(columnTotals, csvWriter);
}
}
return memoryStream.ToArray();
}
結果

我在 Db 中有默認 DateTime 我希望此默認 DateTime 在 CSV 列中為 null 或空字串,而不是此誤導性資料
uj5u.com熱心網友回復:
您不需要在這里進行型別轉換。您需要的行為已經存在:
using System.Collections;
using System.Globalization;
using CsvHelper;
using CsvHelper.Configuration.Attributes;
var records = new List<TMap>
{
new TMap { Id = 1, Stamp = DateTime.Now, Filer = "X"},
new TMap { Id = 2, Stamp = null, Filer = "X" },
new TMap { Id = 3, Stamp = DateTime.Now, Filer = "X" },
};
using (var writer = new StreamWriter("file.csv"))
{
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords((IEnumerable)records);
}
}
class TMap
{
public int Id { get; set; }
[Format("dd/MM/yyyy")]
public DateTime? Stamp { get; set; }
public string Filer { get; set; }
}
結果:
Id,Stamp,Filer
1,06/06/2022,X
2,,X
3,06/06/2022,X
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/486743.html
