如何在C#中保留CSV单元格格式避免转为科学计数法?
解决CSV长ID自动转为科学计数法的问题
Excel打开CSV时会自动识别长数字为数值类型,进而转为科学计数法。要强制Excel将ID识别为文本格式,需要调整CSV的内容格式,你之前的写法错误导致未生效,以下是修正方案:
问题根源
你之前使用的"=""{entity.Id}""会生成带外层双引号的内容(如"=938100000010025"),Excel不会解析这种格式的文本规则,因此无法达到预期效果。
正确写法
需要在CSV的ID字段中直接输出="长ID"格式的内容,这样Excel会自动将其识别为文本,保留原始数字。在C#中可以通过两种方式实现:
方式1:转义双引号
private async Task SendDetailsCsvToEmail(Entity entity, SessionContext context) { var csvContent = new StringBuilder(); csvContent.AppendLine("Name, Id, Address"); // 生成="ID"格式的内容,强制Excel识别为文本 csvContent.AppendLine($"{entity.Name},=\"{entity.Id}\",{entity.Address}"); var csvBytes = Encoding.UTF8.GetBytes(csvContent.ToString()); // 调用邮件发送函数 }
方式2:逐字字符串(更易读)
用逐字字符串时,双引号需要用两个连续双引号表示,写法更清晰:
private async Task SendDetailsCsvToEmail(Entity entity, SessionContext context) { var csvContent = new StringBuilder(); csvContent.AppendLine("Name, Id, Address"); csvContent.AppendLine($@"{entity.Name},=""{entity.Id}"",{entity.Address}"); var csvBytes = Encoding.UTF8.GetBytes(csvContent.ToString()); // 调用邮件发送函数 }
两种方式最终生成的CSV内容中,ID字段都会是="938100000010025",Excel打开后会显示完整的原始ID,不会转为科学计数法。
内容的提问来源于stack exchange,提问作者BlackCat
相关产品推荐
相关产品推荐

