C# MVC5中如何将Excel所有单元格转为文本格式并导出打印?
解决Excel无法打印超过10位数字的问题:将单元格转为文本格式
你这情况我太熟了——Excel对长数字的默认处理确实坑人,超过10位容易变成科学计数法,再长点还会丢精度,转成文本格式绝对是正确的解决思路。看你用的是ASP.NET的GridView准备导出数据,我给你调整下代码,直接在绑定数据后给所有单元格加上强制文本格式的设置:
public ActionResult Index() { var data = new List<SIM_lista>(); var grid = new GridView(); USR_User user = Session[Costants.Costants.UserSession] as USR_User; CoreEntities core = new CoreEntities(); List<SIM_lista> lista = core.SIM_lista .Where(x => x.SIM_Friendlyname == user.USR_Friendly_Name) .OrderByDescending(x => x.SIM_Date_Insert) .ToList<SIM_lista>(); // 绑定数据源 grid.DataSource = lista; grid.DataBind(); // 关键步骤:遍历所有单元格,给Excel标记文本格式 foreach (GridViewRow row in grid.Rows) { foreach (TableCell cell in row.Cells) { // 添加mso专属样式,让Excel把单元格识别为纯文本 cell.Attributes.Add("style", "mso-number-format:\\@;"); } } // 后续的导出逻辑(比如写入Response输出Excel) // ... }
额外说明:
- 这个
mso-number-format:\@是Excel能识别的特殊样式,不管单元格内容是数字还是字符串,都会强制以纯文本形式显示和打印,完美解决长数字变形的问题。 - 如果后续你换成EPPlus、NPOI这类专业导出库,逻辑也是类似的——直接给单元格设置
NumberFormat = "@"就行,原理完全一致。 - 如果表头里也有长数字需要处理,把表头行也加入遍历范围就好。
内容的提问来源于stack exchange,提问作者Mr. Developer
相关产品推荐
相关产品推荐

