NPOI C# 单元格格式警告(数字存储为文本)

问题描述 投票:0回答:2

我正在尝试使用 NPOI 库在 Visual Studio 2019 中使用 C# 生成 Excel 文件(.xlsx)。我遇到了插入数据格式不正确的问题。

我有一个可以同时包含数字和文本的字段,当它显示在 Excel 中时,单元格仅在数字字段上发出警告“数字存储为文本”,如所附图像中所示。

我尝试了以下方法使单元格成为字符串单元格。

  1. 通过为单元格提供样式。
ICellStyle cellStyle = book.CreateCellStyle();
cellStyle.DataFormat = NPOI.HSSF.UserModel.HSSFDataFormat.GetBuiltinFormat("text");
  1. 通过设置单元格类型
ICell cell = row.CreateCell(cellIndex);
cell.CellStyle = cellStyle;
cell.SetCellType(CellType.String);
cell.SetCellValue(itemData.PropertyName.ToString());

我在生成的 Excel 文件中仍然收到相同的警告

enter image description here

如有任何帮助,我们将不胜感激。

c# .net excel export-to-excel npoi
2个回答
2
投票

这是正确且有效的行为。 Excel 消息仅供参考,并非错误。 它告诉您,您已成功存储仅由数字字符组成的文本字符串。 您在 Excel 中的选项是将其转换为数字或忽略“错误”。

enter image description here

如果您希望将值存储为数字,那么您不必将单元格类型设置为字符串,执行如下操作:

  if (itemData.PropertyName.ToString().Any(c => !char.IsNumber(c)))
    cell.SetCellType(CellType.String);
  else
    cell.SetCellType(CellType.Numeric);

这可能有用:NPOI 单元格格式链接


0
投票

在调查了网上的一些答案后,我意识到 function cell.SetCellValue 有多个重载来设置不同的值类型(int、double、string、DateOnly、DateTime、Bool)。例如。如果您以字符串形式发送数值 (number.ToString()),该函数会将 num 作为字符串写入单元格,从而导致问题中所描述的行为,但如果您发送整数或双精度数而不将其转换为字符串,然后函数将值写入数字。

© www.soinside.com 2019 - 2024. All rights reserved.