NPOI生成XLSX文件时Excel单元格单引号未隐藏问题求助
解决NPOI生成Excel时单引号显示的问题
你手动给内容加单引号导致单元格显示符号的问题,其实完全不用手动拼接单引号,用NPOI自带的文本格式设置就能同时解决公式注入和单引号显示的问题:
方法一:设置单元格为文本格式(推荐)
直接把单元格格式设为文本,不管内容开头是=、+还是其他特殊字符,都会被当成纯文本处理,不会触发公式解析,也不需要额外加单引号。
示例代码:
// 创建工作簿和工作表 IWorkbook workbook = new XSSFWorkbook(); ISheet sheet = workbook.CreateSheet("Sheet1"); // 创建文本格式的单元格样式 ICellStyle textStyle = workbook.CreateCellStyle(); IDataFormat dataFormat = workbook.CreateDataFormat(); textStyle.DataFormat = dataFormat.GetFormat("@"); // "@"是Excel的标准文本格式代码 // 创建单元格并设置样式与内容 IRow row = sheet.CreateRow(0); ICell cell = row.CreateCell(0); cell.CellStyle = textStyle; cell.SetCellValue("=A1+B1"); // 直接写入原始内容,无需加单引号
生成的Excel里,单元格会正常显示=A1+B1,编辑栏内容一致,且不会被当作公式执行,完美规避公式注入。
方法二:利用NPOI识别Excel文本前缀(不推荐)
如果一定要用单引号前缀的方式,不能直接把单引号和内容拼接后赋值,需要让NPOI识别这个单引号是Excel的文本标记,示例代码:
ICell cell = row.CreateCell(0); // 这里的单引号会被NPOI识别为Excel文本前缀,单元格不会显示该符号 cell.SetCellValue(new XSSFRichTextString("'=A1+B1"));
这种方法不如方法一稳妥,若内容本身包含单引号可能引发异常,优先选择方法一。
内容的提问来源于stack exchange,提问作者vasilius
相关产品推荐
相关产品推荐

