【问题标题】:What is the equivalent of IWriterConfiguration.UseExcelLeadingZerosFormatForNumerics in newer versions of CsvHelper?在较新版本的 CsvHelper 中,IWriterConfiguration.UseExcelLeadingZerosFormatForNumerics 的等价物是什么?
【发布时间】:2019-02-06 14:07:35
【问题描述】:

我们目前正在将一堆旧的 NuGet 包升级到最新版本。 CsvHelper 在我们使用的先前版本 (2.x) 和最新版本 (12.x) 之间移动了很多东西。更新日志没有提到很多这些更改(或者至少没有明确指出每个更新日志条目中更改了哪些属性或方法),这让我们的升级过程很受挫。

IWriterConfiguration.UseExcelLeadingZerosFormatForNumerics 设置在升级中消失了,我无法找出新版本中的等效设置。我试图在GitHub repository 中追踪提交历史记录的更改,但主要版本号更改之一涉及重命名许多类,这意味着我很难找到发生此更改的提交,所以我看不到新版本中的等效设置。

我们需要确保升级前系统的行为与新行为相同。有谁知道我将如何在当前包版本中复制此配置设置引起的行为?

【问题讨论】:

  • 此功能在 2.11 中引入并在 3.0 中删除(或者,至少该版本不再具有该属性)以及所有其他 Excel 特定代码,如果可以相信 this ,所以没有这样的等效设置。该线程引用了CsvHelperContrib 存储库,但实际上它是空的。
  • 这个功能非常小,CsvWriter.WriteField 仍然是virtual,所以你应该可以轻松地将porting the code 转换为自定义派生的CsvWriter 类。
  • @JeroenMostert 嗨,感谢您找到原始实现 - 这是我一直在寻找的,以便重新创建这种行为,但我很难在回购历史中找到它。我会尝试按照您的建议重新创建它并将其添加为答案。

标签: c# csvhelper


【解决方案1】:

Jeroen Mostert 指出,这个配置选项的行为的原始实现是在虚拟的CsvWriter.WriteField 方法中。因此,如果需要,可以重新实现原始行为。

由于方法的结构,如果包维护者发生变化,似乎没有办法以不会破坏或导致难以检测的问题的方式重新实现此功能CsvWriter.WriteField 未来的行为或实现。但是,这个派生类至少应该适用于当前版本的 CsvHelper (12.1.2):

public class ExcelFormatCsvWriter : CsvWriter
{
    public bool UseExcelFormat
    {
        get; set;
    }

    public ExcelFormatCsvWriter(TextWriter writer) : base(writer)
    {
    }

    public override void WriteField(string field, bool shouldQuote)
    {
        if (shouldQuote && !string.IsNullOrEmpty(field))
        {
            field = field.Replace(Context.WriterConfiguration.QuoteString, Context.WriterConfiguration.DoubleQuoteString);
        }

        if (UseExcelFormat && !string.IsNullOrEmpty(field) && field[0] == '0' && field.All(Char.IsDigit))
        {
            field = "=" + Context.WriterConfiguration.QuoteString + field + Context.WriterConfiguration.QuoteString;
        }
        else if (shouldQuote)
        {
            field = Context.WriterConfiguration.Quote + field + Context.WriterConfiguration.Quote;
        }

        Context.Record.Add(field);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    相关资源
    最近更新 更多