Excel中的单元格“存储为文本的数字”

我有一个C#程序,需要一个遗留报告的文本文件,并映射到Excel表。 但是对于交易单元格,它被输出为“Number as stored as text”,这不允许任何格式化。 我们想显示1,000.00,但只有1000。

有没有一种方法可以得到这种格式? 这些列是余额和金额。 这里定义:

ndcRange = currentSheet.Cells[transactionRowNo + pageOffset, 13]; ndcRange.NumberFormat = "@"; ndcRange.Value2 = tr.Amount; ndcRange = currentSheet.Cells[transactionRowNo + pageOffset, 16]; ndcRange.NumberFormat = "@"; ndcRange.Value2 = tr.Balance; 

下面是一些代码,其中一些格式化完成:

 string balance = transaction; if (lastSpaceIndex != -1) { balance = transaction.Substring(lastSpaceIndex, (transaction.Length)lastSpaceIndex); } transac.Balance = balance; transaction = transaction.Replace(balance, ""); transaction = transaction.Trim(); if (!string.IsNullOrWhiteSpace(transaction)) { transac.Description = transaction; } patient.TransactionsList.Add(transac); 

使用Microsoft Excel对象库中的Range.NumberFormat。 检查这个链接 。

示例代码:

 oRng = oSheet.get_Range("C2", "C1000"); //change this range to suit your scenario oRng.Formula = "<any formula you may be using already or skip it>"; oRng.NumberFormat = "#,##0.00"; 

参考文献:

如何从Microsoft Visual C#.NET自动化Microsoft Excel

StackOverflow示例

你的代码ndcRange.NumberFormat = "@"是数字格式设置为文本的第一位。 插入数据之前,只需将@改为适当的数字格式(例如Kash的答案中提供的格式)即可

我想这里的诀窍是把数字作为一个数字而不是文本。 如果tr.Balance是一个string,则可以使用TryParse将其转换为double:

 object StringToDoubleIfPossible(string s) { double parseResult; return !string.IsNullOrEmpty(s) && double.TryParse(s, out parseResult) ? (object)parseResult : s; } 

编辑:string.IsNullOrEmpty()调用是没有必要的。 我把它放进去,因为我不确定TryParse是否可以处理空string。 它可以。 这个更好:

 object StringToDoubleIfPossible(string s) { double parseResult; return double.TryParse(s, out parseResult) ? (object)parseResult : s; } 

编辑:

咄! barrowc是正确的。 我想知道为什么这个号码是作为文本进入的。 我应该更多地关注那个'@'格式。