You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CSV Helper将CSV的Quantity列设为数字格式而非常规格式

问题

我使用CSV Helper编写如下C#代码生成CSV文件:

for (int i = 0; i < dsData.Rows.Count; i++)
{
    DateTime invDate = Convert.ToDateTime(dsData.Rows[i]["DocDate"].ToString());
    string invoiceDate = invDate.ToString("yyyyMMdd");

    invoices.Add(new Invoices
    {
        Recordtype = "DIALSALES01ZA",
        DistributorCode = 161457,
        InvoiceNumber = dsData.Rows[i]["DocNum"].ToString(),
        InvDate = invoiceDate,
        SCJProductCode = dsData.Rows[i]["CardCode"].ToString(),
        DistributorProductCode = dsData.Rows[i]["CardCode"].ToString(),
        SalesmanCode = dsData.Rows[i]["SlpCode"].ToString(),
        SalesmanName = dsData.Rows[i]["SlpName"].ToString(),
        SupervisorCode = "Kinyanjui",
        SupervisorName = "Kamau",
        WarehouseCode = dsData.Rows[i]["WhsCode"].ToString(),
        WarehouseName = dsData.Rows[i]["WhsName"].ToString(),
        OutletTypeCode = "Mini mart",
        OutletTypeName = "Mini mart",
        ClientInternalCode = dsData.Rows[i]["CardCode"].ToString(),
        ClientFederalID = dsData.Rows[i]["CardCode"].ToString(),
        ClientName = dsData.Rows[i]["CardName"].ToString(),
        City = dsData.Rows[i]["City"].ToString(),
        ZipCode = 0,
        DeliveryAddress = dsData.Rows[i]["Address"].ToString(),
        Quantity = Convert.ToDouble(dsData.Rows[i]["U_PCs"].ToString()),
        GrossValue = Convert.ToDouble(dsData.Rows[i]["GTotal"].ToString()),
        NetValue = Convert.ToDouble(dsData.Rows[i]["LineTotal"].ToString()),
        Fraction = 1,
        EANCode = "1",
    });
}

DateTime dateTimeNow = DateTime.Now;

Random rnd = new Random();
double num = rnd.Next(1, 10000000);

string filename = dateTimeNow.ToString("yyyyMMdd") + num.ToString() + ".csv";

var csvPath = "C:/Integrations/RAISONS/SCJohnsonIntegration/Invoices_CSVs/" + filename + "";

using (var streamWriter = new StreamWriter(csvPath))
{
    using (var csvWriter = new CsvWriter(streamWriter, CultureInfo.InvariantCulture))
    {                            
        csvWriter.WriteRecords(invoices);
    }
}                   

生成的CSV文件中Quantity列格式为「常规」,我希望将该列设置为「数字」格式,请问该如何实现?

解决方案

CSV本质是纯文本文件,没有内置格式定义,但可以通过CSV Helper的配置让输出内容被Excel识别为数字格式,以下两种方法可以实现:

方法一:使用ClassMap配置列格式

创建Invoices类的映射配置,显式指定Quantity列的数字格式:

public class InvoicesMap : ClassMap<Invoices>
{
    public InvoicesMap()
    {
        // 映射其他字段(按需添加)
        Map(m => m.Recordtype);
        Map(m => m.DistributorCode);
        
        // 配置Quantity列:设置数字格式,确保输出无引号
        Map(m => m.Quantity)
            .TypeConverterOption.NumberStyles(NumberStyles.Float)
            .TypeConverterOption.Format("0.00"); // 可根据需求调整小数位数,比如"0"表示整数
    }
}

然后在写入CSV时注册该映射:

using (var streamWriter = new StreamWriter(csvPath))
{
    using (var csvWriter = new CsvWriter(streamWriter, CultureInfo.InvariantCulture))
    {  
        csvWriter.Context.RegisterClassMap<InvoicesMap>();                         
        csvWriter.WriteRecords(invoices);
    }
}

方法二:全局配置数字类型输出格式

如果不需要单独映射每个字段,可以直接全局配置double类型的输出格式:

using (var streamWriter = new StreamWriter(csvPath))
{
    using (var csvWriter = new CsvWriter(streamWriter, CultureInfo.InvariantCulture))
    {  
        // 配置double类型的输出格式,确保Excel识别为数字
        csvWriter.Context.TypeConverterOptionsCache.GetOptions<double>()
            .Format = "0.00";
        
        csvWriter.WriteRecords(invoices);
    }
}

核心说明

  • 确保Quantity字段类型为double(你的代码已满足),CSV Helper会自动将其识别为数字类型,输出时不会添加引号,Excel打开时会默认识别为数字格式。
  • 通过指定Format参数(如"0"、"0.00"),可以进一步明确数字的显示格式,避免Excel将其识别为常规文本。

内容的提问来源于stack exchange,提问作者Kinyanjui Kamau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 04:46:15