首页 > 解决方案 > 在 C# 写入 Excel 中,如何按原样显示一个大数字(不使用科学计数法)?

问题描述

我正在从后端发送一个 excel 文件。我有一些卡号的长号码。我需要在 Excel 中显示它们,但我希望它们都是数字并按原样编辑它们(有时值和显示的文本不同,我希望它们相同)。
问题是当我设置单元格的数据类型时

    var currentRow = 1;
    var cardNo = "9993232323232320";
    worksheet.Column(6).CellsUsed().SetDataType(XLDataType.Text);
    worksheet.Cell(currentRow, 6).Value = cardNo;
    worksheet.Column(6).CellsUsed().SetDataType(XLDataType.Text);//Doesn't matter if it is before or after

我可以使用 SetValue 方法设置值,这使得单元格字符串:

worksheet.Cell(currentRow, 6).SetValue(cardNo);

但是在这种情况下,excel在数字前面添加了一个撇号,这使它看起来像是一个文本。当您尝试编辑单元格时,撇号存在于数字前面。

最后我尝试通过设置单元格的 NumberFormatId

    worksheet.Cell(currentRow, 6).Value = cardNo;
    worksheet.Column(6).Style.NumberFormat.NumberFormatId = 1;

有关 NumberFormatId 的信息:https ://github.com/ClosedXML/ClosedXML-wiki/blob/master/NumberFormatId-Lookup-Table.md 在这种情况下,单元格是一个数字,看似一个数字,但当您尝试编辑时再次该行,该行包含一个科学数字。

我可以像这样通过excel实现我想要的:

或者像这样:

如何在 C# 的 ClosedXML 中实现相同的功能

标签: c#excel.net-coreclosedxml

解决方案


这是数字格式的 wiki:https ://github.com/ClosedXML/ClosedXML-wiki/blob/master/NumberFormatId-Lookup-Table.md

在这个问题中,试图实现的是:

  • 转到一列->右键单击->格式化单元格
  • 数字选项卡-> 文本-> 确定。并编辑线条。

通过查看给定链接中的 NumberFormatId 表,此操作的 Id 为 49,因此代码必须为worksheet.Column(6).CellsUsed().Style.NumberFormat.NumberFormatId = 49;

另一个问题是您必须使用 SetValue 而不是设置 Value ,例如:
worksheet.Cell(currentRow, 6).SetValue(cardNo);

之后它必须工作。


推荐阅读