2013-11-25 56 views
0

對不起,標題中堆棧溢出認爲主觀是荒謬的。如何在用EPPlus創建的Excel文件中禁止用戶輸入空格到單元格中

我想添加驗證到使用EPPlus從我的應用程序下載的excel文件。我需要驗證來停止用戶輸入空格到列中。我已經在列上進行了基本的驗證檢查,我需要在列中添加額外的驗證來檢查空格。我已經搞亂添加自定義,並最終嘗試這樣的事情

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

但我沒有運氣。有沒有辦法使用RegEx來做到這一點,或有任何人設法做到這一點?

UPDATE:最新的代碼

 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(\" \"))"; 

感謝 傑夫

+0

是否從excel表格輸入信息?還是從你自己的?作爲一般規則,通常容易(並且更安全)允許您想要的數據,而不是試圖阻止其他事情。 – user2140261

+0

是的,用戶可以從Excel工作表中輸入信息,我在應用程序方面有檢查,所以任何不良數據都不會被處理,但是從可用性方面來說,我想告訴用戶他們在嘗試之前是否輸入了錯誤的數據將excel上傳到應用程序 –

回答

1

張的單引號雙引號,因爲它是字符串 '空間' 你尋找的。請記住用EPPLUS的反斜槓來避免雙引號。

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

要驗證用戶輸入1個8個字符之間的字母數字字符串的長度和沒有空格的字符串中的任何地方,使用此公式來代替:(作爲寫入它驗證單元格A1只)

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

編輯

要將測試應用於整列,您需要輸入公式作爲數組公式。例如,如果將此應用於列A,請爲A1寫出公式並使用數組公式。如果你想在Excel中手動輸入,你可以按住CTRL + SHIFT鍵,然後在輸入公式時按回車鍵。

以編程方式輸入數組公式,你需要使用FormulaArray,而不是ExcelFormula

codeValidation已經指向整個列,因此你需要的是這樣的:

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

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

這是未經測試使用EPPLUS

+0

嗨,我已經試過這個它仍然不工作我可以下載Excel並且似乎沒有錯誤,但如果我添加新代碼,它不會阻止我添加空格。我通過將單元格設置爲A3來測試它是否與列未被正確選擇有關 –

+0

謝謝,我會嘗試。我花了一段時間玩Excel和= ISERROR(FIND(「」,A1)= FALSE)也適用於單元格A1。我發現了兩個問題,第一個問題是我的數據驗證沒有被添加到Excel中,第二個問題是,如果您嘗試使用A:A檢查整個列,那麼公式會打破。 –

+0

請參閱第二次編輯,我已添加適用於整列的方式。 –

相關問題