Excel不插入前导零

时间:2013-02-28 19:12:59

标签: c# openxml openxml-sdk spreadsheetml

我正在使用Office OpenXml写入Excel文件。该文件是一个模板,因此它已经包含了我的列的所有标题和格式。我将具有前导零的数字插入到“特殊”列中,该列基本上是10位数字。但是在我的代码中,我可以看到它将值设置为例如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表时,如上所述,我的值为45678945而不是0045678945

任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:7)

获得所需结果的最简单方法是将撇号添加到您放入单元格中的值 - 这告诉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

结果如下:

formatting with leading zeros

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

  1. 我输入字符串的单元格,前面有一个撇号
  2. 使用"@"(=“text”)格式
  3. 格式化的单元格
  4. 具有撇号和文本格式
  5. 的单元格

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

答案 1 :(得分:1)

如果我理解正确:

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

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

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

  • 将Excel中的列格式化为文本
  • 在C#代码中不要指望前导零而是添加它们

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

如果您正在使用DataTable,则需要使用另一个DataTable,然后您需要遍历数据表中的整个单元格,并使用空格(即“&amp; nbsp”;)添加单元格文本。我们无法修改同一个表,因为它会抛出一个异常,说“Collection is Modified”。我们必须采用一个新的数据表。

请考虑以下代码。

    //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); 
        }

我们可以将此更新的表绑定到datagrid,以便它可用于Excel转换。