如何阻止用户在使用EPPlus创建的Excel文件中的单元格中输入空格

时间:2013-11-25 17:04:25

标签: excel asp.net-mvc-4 c#-4.0 epplus

很抱歉标题堆栈溢出认为主观是荒谬的。

我希望使用EPPlus为从我的应用程序下载的excel文件添加验证。我需要验证来阻止用户在列中输入空格。我已经在列上有基本的验证检查长度,我需要在列中添加额外的验证来检查空格。我已经搞砸了添加自定义并最终尝试了类似这样的东西

var colValidation = codeSheet.DataValidations.AddCustomValidation("A:A");
codeValidation.Formula.ExcelFormula = "=ISERR(FIND(' ',A:A))";

但我没有运气。有没有办法使用RegEx这样做或有人设法做到这一点?

更新:最新代码

        var codeValidation = codeSheet.DataValidations.AddCustomValidation("A:A");
        codeValidation.ShowErrorMessage = true;
        codeValidation.ErrorStyle = ExcelDataValidationWarningStyle.stop;
        codeValidation.ErrorTitle = "An invalid value was entered";
        codeValidation.Error = "Code must be Unique, between 1 and 8 digits in length and alphanumeric";
        codeValidation.Formula.ExcelFormula = "=ISERR(FIND(\" \",A:A))";
        //codeValidation.Formula.ExcelFormula = "=ISERR(FIND(\" \"))";

由于 杰夫

1 个答案:

答案 0 :(得分:1)

将单引号改为双引号,因为它是您搜索的字符串'space'。记得用EPPLUS的反斜杠来避开双引号。

"=ISERR(FIND(\" \",A:A))";

要验证用户输入长度为1到8个字符且字符串中没有空格的字母数字字符串,请使用此公式:(如编写的那样仅验证单元格A1)

"=(LEN(A1)<9)*((LEN(A1)-LEN(SUBSTITUTE(A1,\" \",\"\")))=0)"

修改

要将测试应用于整个列,您需要输入公式作为数组公式。例如,如果将其应用于A列,请为A1编写等式并使用数组公式。如果你在excel中手动输入,你可以按住CTRL + SHIFT,然后在键入公式时按Enter键。

要以编程方式输入数组公式,您需要使用FormulaArray而不是ExcelFormula

codeValidation已经指向整个列,所以您只需要:

codeValidation.Formula.FormulaArray = "=ISERROR(FIND(\" \",A1)=FALSE)";

codeValidation.Formula.FormulaArray = "=(LEN(A1)<9)*((LEN(A1)-LEN(SUBSTITUTE(A1,\" \",\"\")))=0)";

未经测试,使用EPPLUS