2016-11-04 63 views
0

我通过Excel.Interop和C#动态地将13位数值添加到Excel单元格。但是,该值显示为7,21119E+12而不是7211192800080的行。如果你点击单元格,那么显示是正确的。Excel单元格值显示不正确,Excel.Interop和C#

//_ReportData is a DataTable with a single item 
for (int i = 0; i < _ReportData[0].Rows.Count; i++) 
{ 
    for (int j = 0; j < _ReportData[0].Columns.Count; j++) 
    { 
     excelCellRange_data = ((Worksheet)excelWorksheet_data).Cells; 
     var cellValueRange = ((Range)excelCellRange_data)[i, j + 1]; 
     if (i == 0) 
      ((Range)cellValueRange).Value2 = _ReportData[0].Columns[j].ToString(); //This is where the columns are set 
     else 
      ((Range)cellValueRange).Value2 = _ReportData[0].Rows[i][j].ToString(); //This is where the values are set 
    } 
} 

请帮忙吗?

回答

2

这是一个Excel-“问题”。如果您直接在单元格中输入号码,请按回车键,同样的问题会出现。如果您先将单元格格式化为数字,则会显示正确。

((Range)cellValueRange).NumberFormat = "0"; 
+0

不幸的是,这并没有解决这个问题。该值作为字符串从数据库传入,所以我做了一个'long.tryparse()'来确保我正在处理一个数字,但仍然不满意。 –

+0

那么,我试了一下,它的工作正确与数字最多15位数(999999999999999)。如果数字较大,Excel无法正确处理。例如。一个包含17位数字99999999999999999的数字将显示为99999999999999900 ...不知道为什么......无论如何,如果您不希望Excel使用此数字计算,则可以使用领先的apostroph'((范围) cellValueRange).Value2 =“'”+ _ReportData [0] .Rows [i] [j] .ToString();' – Wudge

+0

不知道我做了什么不同,但它似乎已经整理出来了。我查询实际的生产数据,没有问题,而不是开发环境数据......虽然 –

1

您应该插入值而不使用ToString()方法。 Excel应该从插入的值类型自动应用格式。

+0

奇怪,即使我删除了ToString()方法,问题仍然存在 –

相关问题