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

Excel科学计数法转字符串:C#解析Excel的处理方案

C#处理Excel长数字科学计数法问题解决方案

一、解析Excel时直接获取原始字符串

优先在读取阶段拿到单元格的文本内容,避免触发科学计数转换,主流Excel库的处理方式如下:

EPPlus 实现

读取单元格时直接取Text属性,而非Value:

using OfficeOpenXml;

var filePath = "你的Excel文件路径.xlsx";
using var package = new ExcelPackage(new FileInfo(filePath));
var worksheet = package.Workbook.Worksheets[0];

// 定位目标单元格,比如A1
var targetCell = worksheet.Cells["A1"];
// 直接获取单元格显示的文本,跳过数值转换
var originalNumber = targetCell.Text;

NPOI 实现

借助DataFormatter获取单元格的格式化文本:

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;

var filePath = "你的Excel文件路径.xlsx";
using var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
var workbook = new XSSFWorkbook(fs);
var worksheet = workbook.GetSheetAt(0);

var targetRow = worksheet.GetRow(0);
var targetCell = targetRow.GetCell(0);

string originalNumber;
if (targetCell.CellType == CellType.Numeric)
{
    // 用DataFormatter获取单元格的显示文本,避免科学计数
    var formatter = new DataFormatter();
    originalNumber = formatter.FormatCellValue(targetCell);
}
else
{
    originalNumber = targetCell.StringCellValue;
}

二、科学计数法字符串转原数字字符串

如果已经拿到了类似1.23456789012345E+29的科学计数格式字符串,可通过以下方法转换:

string ConvertSciNotationToPlain(string sciNotationStr)
{
    // 解析科学计数法字符串为decimal类型
    var number = decimal.Parse(sciNotationStr, System.Globalization.NumberStyles.Float);
    // 转换为无格式的整数字符串
    return number.ToString("#");
}

// 调用示例
var sciStr = "1.23456789012345E+29";
var plainStr = ConvertSciNotationToPlain(sciStr);

重要提示

Excel使用双精度浮点数存储数值,仅能精确表示15-17位有效数字。如果原始数字超过15位,Excel会自动将超出部分替换为0,此时无论用哪种方法都无法恢复原始的完整数字。这类场景下,建议提前将Excel单元格格式设置为文本类型再输入超长数字。

内容的提问来源于stack exchange,提问作者Vidya R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:27:14