我正在将值从 SQL 数据库传输到 ExcelSheet。我可以编写字符串和整数,没有问题,但是当我编写 double 时,Excel 需要修复文档。它说数字被格式化为文本。
我使用这个代码:
double val = Math.Round(reader.GetDouble(3),2);
cell.CellValue= new CellValue(Convert.ToString(val));
cell.DataType = new EnumValue<CellValues>(CellValues.Number);
最佳答案
使用 CultureInfo.InvariantCulture 并不能涵盖所有非常大或非常小的数字的情况,NaN 和 +-Inf 仍然会触发 Excel 修复文件。目前我正在使用它作为解决方法:
bool isNumeric = IsNumeric(value, out double number);
if (isNumeric && ! (double.IsNaN(number) | double.IsInfinity(number) | Math.Abs(number) >1e100))
{
cell.DataType = CellValues.Number;
cell.CellValue = new CellValue(String.Format(CultureInfo.InvariantCulture, "{0:0.####################}", number));
}
else
{
cell.DataType = CellValues.String;
cell.CellValue = new CellValue(value.ToString());
}
有更好的解决方案吗?
关于c# - 打开 XML SDK 将 double 值写入 Excel 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39075693/