我有一个C#程序,它接收旧报告的文本文件并映射到Excel工作表。 但对于交易单元格,它输出为“存储为文本的数字”,这是不允许的 任何格式。我们想要显示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);
答案 0 :(得分:3)
使用Microsoft Excel对象库中的Range.NumberFormat。请检查此link。
示例代码:
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";
<强>参考文献:强>
How to automate Microsoft Excel from Microsoft Visual C#.NET
答案 1 :(得分:3)
我认为这里的技巧是将数字作为数字而不是文本输入单元格。如果tr.Balance
是一个字符串,您可以使用TryParse将其转换为double:
object StringToDoubleIfPossible(string s)
{
double parseResult;
return !string.IsNullOrEmpty(s) && double.TryParse(s, out parseResult) ? (object)parseResult : s;
}
编辑:string.IsNullOrEmpty()调用不是必需的。我把它放入,因为我不确定TryParse是否可以处理空字符串。它可以。这样更好:
object StringToDoubleIfPossible(string s)
{
double parseResult;
return double.TryParse(s, out parseResult) ? (object)parseResult : s;
}
编辑:
咄! barrowc是对的。我想知道为什么这个数字首先是作为文本进行的。我应该更加注意'@'格式。
答案 2 :(得分:2)
您的代码ndcRange.NumberFormat = "@"
就是首先将数字格式设置为Text。在插入数据之前,只需将@
更改为适当的数字格式(例如,在Kash的答案中建议的格式)