使用EPPlus生成电子表格时是否可以忽略Excel警告?

时间:2014-10-21 09:38:03

标签: c# excel epplus

我使用C#和EPPlus在电子表格中的单个列中存储数字和非数字值的混合。当我用Excel打开电子表格时,它会在单元格中显示绿色三角形,并带有数字值,警告“数字存储为文本'并为特定单元格提供忽略它的选项。我可以从代码中执行此操作还是具有Excel特定功能?

4 个答案:

答案 0 :(得分:6)

使用代码确实有2个选项:

  • .NumberFormat property of Range更改为TEXT(我相信epplus中的等效内容为Cell[row, column].Style.NumberFormat.Format

  • 使用'单引号)为任意数字添加前缀 - Excel然后将数字视为TEXT - 在视觉上,它会按原样显示数字,但公式将显示单引号。

或者,我不建议依赖

  • 使用Excel的属性并取消选中以显示警告

答案 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;
}
相关问题