NPOI C#生成Excel出现“Number Stored As Text”警告如何解决
问题根因与解决方案
你遇到的问题核心是两个错误使用逻辑:一是调用了适配.xls格式的HSSF类处理.xlsx格式,二是设置单元格类型和赋值的顺序错误,具体修复方案如下:
修复步骤
1. 替换文本格式的获取方式
.xlsx格式对应XSSF实现,不能使用HSSFDataFormat获取格式编码,正确的样式创建代码如下:
ICellStyle textCellStyle = book.CreateCellStyle(); // 针对.xlsx格式使用XSSFDataFormat,内置文本格式的编码为@ textCellStyle.DataFormat = NPOI.XSSF.UserModel.XSSFDataFormat.GetBuiltinFormat("@");
如果你的代码需要同时兼容.xls和.xlsx格式,可以使用通用写法:textCellStyle.DataFormat = book.CreateDataFormat().GetFormat("@");,无需手动区分HSSF/XSSF实现。
2. 调整单元格设置顺序
SetCellValue方法会自动根据传入值的类型修改单元格类型,导致之前的类型设置失效,需要调整为先赋值,再设置单元格类型和样式,代码如下:
ICell cell = row.CreateCell(cellIndex); // 第一步先赋值 cell.SetCellValue(itemData.PropertyName.ToString()); // 第二步再设置单元格类型和样式 cell.SetCellType(CellType.String); cell.CellStyle = textCellStyle;
3. 可选:彻底关闭对应警告
如果不需要保留Excel的错误检查触发能力,可以直接在工作簿配置中关闭「数字存储为文本」的错误检查,代码如下:
if(book is NPOI.XSSF.UserModel.XSSFWorkbook xssfBook) { var errorOptions = xssfBook.GetCTWorkbook().AddNewErrorCheckingOptions(); errorOptions.numberStoredAsText = false; }
完成以上修改后重新生成Excel文件,打开后就不会再出现对应警告。
内容的提问来源于stack exchange,提问作者Jitender Dhaliwal
相关产品推荐
相关产品推荐

