2

我正在使用 Office OpenXml 写入 Excel 文件。该文件是一个模板,因此它已经包含了我所有的标题和列的格式。我正在将前导零的数字插入“特殊”列,该列基本上是一个 10 位数字。但是在我的代码中,我可以看到它正在将值设置为 example 0000000004。工作表中的结果,4该单元格中的值为 ,实际单元格显示0000000004

这是我写入单元格的代码。

  if (reader[2].ToString().Length < 9)
  {


        myworksheet.Cell(firstrow, 12).Value = reader[2].ToString(); //0045678945

  }
  else
  {
        myworksheet.Cell(firstrow, 12).Value = reader[2].ToString().Substring(0, 9); //0045678945

  }

当我像上面所说的那样打开 excel 表时,我的值456789450045678945

任何帮助,将不胜感激。

4

5 回答 5

11

获得所需结果的最简单方法是在单元格中输入的值前面加上撇号 - 这告诉 Excel 它是一个字符串:

Cell.Value= "'" & "000123"

将显示为000123

这里有一些代码来展示事情是如何工作的(至少它们对我来说是如何工作的,在 Excel 2010 中):

Sub testFormat()
[A1].Value = "000123"
[A2].Value = "'000123"
[A3].Value = "000123"
[A3].NumberFormat = "@"
[A4].Value = "'000123"
[A4].NumberFormat = "@"
End Sub

结果如下:

带前导零的格式

如您所见,有三个单元格显示前导零:

  1. 我在其中输入带有撇号的字符串的单元格
  2. 使用"@"(="text") 格式格式化的单元格
  3. 具有撇号和文本格式的单元格

我不确定你做了什么让撇号出现在你的电子表格中......但我希望以上内容能激励你解决你的问题。

于 2013-02-28T19:30:16.583 回答
1

如果我理解正确:

Excel 显示带有前导零的数字,通过 OOXML 从 C# 读取它们,您看不到前导零。

Excel 可能会设置一些格式规则,而不是存储实际的前导零。

有几种方法可以抵消这一点。以下是想到的“最便宜”的,选择一个:

  • 将 Excel 中的列格式化为文本
  • 在 C# 代码中不要期望前导零,而是添加它们
于 2013-02-28T19:19:46.793 回答
0

为了不从 Excel 中截断前导零,您需要将单元格的数字格式设置为Text.

于 2013-02-28T19:20:23.570 回答
0

我相信如果您将单元格的 DataType 设置为 String 或 SharedString ,则会保留前导 0。Excel 会将其视为文本并仅按字面意思处理该值,而不尝试应用任何格式规则。

cell.DataType = new EnumValue<CellValues>( CellValues.SharedString );

或 cell.DataType = new EnumValue( CellValues.String );

于 2013-10-03T14:05:34.630 回答
0

如果您使用的是 DataTable,则需要获取另一个 DataTable,然后您需要遍历数据表中的整个单元格,并在单元格文本前面加上空格,即使用“ ”;我们不能修改同一个表中的行,因为它会抛出一个异常说“集合已修改”。我们必须采用一个新的数据表。

考虑以下代码。

    //To get the result with leading zero's in excel this code is written.
    DataTable dtUpdated=new DataTable();
    //This gives similar schema to the new datatable
    dtUpdated = dtReports.Clone();
        foreach (DataRow row in dtReports.Rows)
        {
            for (int i = 0; i < dtReports.Columns.Count; i++)
            {
                string oldVal = row[i].ToString();
                string newVal = "&nbsp;"+oldVal;
                row[i] = newVal;
            }
            dtUpdated.ImportRow(row); 
        }

我们可以将此更新后的表格绑定到数据网格,以便它可以用于 Excel 转换。

于 2014-01-16T06:15:12.793 回答