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

EPPlus读取Excel时误将逗号识别为小数点的文本获取问题求助

解决EPPlus读取文本格式"1,4"被识别为1.4的问题

踩过这个坑的过来人告诉你,这是EPPlus默认的自动类型推断在搞鬼!即使你在Excel里把单元格设为文本格式输入1,4,EPPlus的默认配置还是会把它当成数值类型解析成1.4的Decimal。下面给你几个靠谱的解决思路:

办法1:直接读取单元格的Text属性

如果你只是需要获取单元格显示的原始文本内容,最简单的方式就是直接调用单元格的Text属性,而不是Value属性。Text会返回Excel界面上实际显示的文本,完全保留原始格式:

using (var package = new ExcelPackage(new FileInfo("your_excel_file.xlsx")))
{
    var worksheet = package.Workbook.Worksheets.First();
    // 直接读取Text属性,拿到原始的"1,4"
    string rawStickyBadgeText = worksheet.Cells["你的目标单元格位置"].Text;
    
    // 后续拆分处理
    string[] splitValues = rawStickyBadgeText.Split(',');
}

办法2:全局设置工作表的读取模式为文本

如果你需要批量读取多个单元格,不想逐个处理,可以设置整个工作表的LoadOption为Text,强制EPPlus把所有单元格内容都当成文本读取,禁用自动类型推断:

using (var package = new ExcelPackage(new FileInfo("your_excel_file.xlsx")))
{
    var worksheet = package.Workbook.Worksheets.First();
    // 全局设置读取模式为文本
    worksheet.Cells.LoadOption = LoadOption.Text;
    
    // 读取到你的IndexList集合(假设是映射到实体类)
    var IndexList = worksheet.Cells["数据范围"].LoadFromCollection<YourModel>(...);
    
    // 获取目标数据并拆分
    var targetItem = IndexList.FirstOrDefault(w => w.Name == "STICKYBADGEIDS");
    if (targetItem != null)
    {
        string[] splitValues = targetItem.Value.Split(',');
        // 这里的Value就是原始的"1,4"字符串了
    }
}

办法3:确保实体类属性为字符串类型

如果你的IndexList是通过EPPlus的实体映射生成的,一定要确保对应接收内容的属性是string类型,避免EPPlus自动转换类型:

// 定义实体类时,接收内容的属性用string
public class YourModel
{
    public string Name { get; set; }
    public string Value { get; set; } // 必须是string类型,不能用decimal或int
}

关键原因说明

EPPlus默认的LoadOption.Normal会根据单元格内容自动推断类型,当它看到1,4时,会把逗号当成小数点(取决于系统区域设置),从而解析成Decimal类型。通过上述方法强制读取文本,就能完全保留你输入的原始内容,后续的逗号拆分操作也能正常进行。

内容的提问来源于stack exchange,提问作者Oğuzhan SARI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:25:12