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
相关产品推荐
相关产品推荐

