我使用C#和EPPlus在电子表格中的单个列中存储数字和非数字值的混合。当我用Excel打开电子表格时,它会在单元格中显示绿色三角形,并带有数字值,警告“数字存储为文本'并为特定单元格提供忽略它的选项。我可以从代码中执行此操作还是具有Excel特定功能?
答案 0 :(得分:6)
使用代码确实有2个选项:
将.NumberFormat property of Range更改为TEXT(我相信epplus中的等效内容为Cell[row, column].Style.NumberFormat.Format
)
使用'
(单引号)为任意数字添加前缀 - Excel然后将数字视为TEXT - 在视觉上,它会按原样显示数字,但公式将显示单引号。
或者,我不建议依赖
答案 1 :(得分:6)
来自EPPlus文件:
我的号码格式不起作用 如果将数字数据添加为字符串(就像原始ExcelPackage那样),Excel会将数据视为字符串,并且不会格式化。设置数值时不要使用ToString方法。
string s="1000"
int i=1000;
worksheet.Cells["A1"].Value=s; //Will not be formatted
worksheet.Cells["A2"].Value=i; //Will be formatted
worksheet.Cells["A1:A2"].Style.Numberformat.Format="#,##0";
http://epplus.codeplex.com/wikipage?title=FAQ&referringTitle=Documentation
答案 2 :(得分:2)
这是TechnoPriest的答案的推导,对我有用 - 我添加了十进制值的处理,并更改了方法的名称,以更准确地记录其真正的存在理由:
public static void ConvertValueToAppropriateTypeAndAssign(this ExcelRangeBase range, object value)
{
string strVal = value.ToString();
if (!String.IsNullOrEmpty(strVal))
{
decimal decVal;
double dVal;
int iVal;
if (decimal.TryParse(strVal, out decVal))
{
range.Value = decVal;
}
else if (double.TryParse(strVal, out dVal))
{
range.Value = dVal;
}
else if (Int32.TryParse(strVal, out iVal))
{
range.Value = iVal;
}
else
{
range.Value = strVal;
}
}
else
{
range.Value = null;
}
}
答案 3 :(得分:1)
您可以检查您的值是否为整数,将其转换为int并将number指定给cell的值。然后它将保存为数字,而不是字符串。
public static void SetValueIntOrStr(this ExcelRangeBase range, object value)
{
string strVal = value.ToString();
if (!String.IsNullOrEmpty(strVal))
{
double dVal;
int iVal;
if (double.TryParse(strVal, out dVal))
range.Value = dVal;
else if (Int32.TryParse(strVal, out iVal))
range.Value = iVal;
else
range.Value = strVal;
}
else
range.Value = null;
}