2015-04-28 21 views
0

我正在開發一個電子表格上傳工具,它可以創建/更新聯繫人,這將作爲一個新的選項添加到我的網站。我應該如何將驗證信息從驗證頁面持久保存到上傳/導入頁面?

電子表格有以下欄目:

  • 全名
  • 職位
  • 稱謂
  • 資格
  • 公司名稱
  • 地址行1
  • 地址行2
  • 地址行3

數據庫表結構如下:

Contact(contact_id INT PK IDENTITY(1,1), fullname VARCHAR(30), jobtitle VARCHAR(100), salutation VARCHAR(100), qualifications VARCHAR(100), companyname VARCHAR(100) , address1 VARCHAR(100), address2 VARCHAR(100), address3 VARCHAR(100)) 

規則是:

1. The Full name must contain at least one space (leading and/or trailing spaces will be trimmed). 
2. Total length of the full name must not exceed 30 characters (including any space(s)). 
3. 'Full Name' is the key field to identify an existing contact in the system. As such, raise a validation error if this field is 
blank. 
4. If a match is found on the 'Full Name', then the other fields of the contact will be updated with the values populated in the 
spreadsheet. 
5. If a match is not found on the key field, then create a new contact with the details. 
6. When creating/updating a contact a value must be populated in at least one other column (in addition to the 'Full Name'), otherwise 
raise a validation error. 

的方法:

有兩個階段稱爲「驗證階段「和」實際上傳「階段。 - 當電子表格被上傳的電子表格必須被驗證爲每上述規則,並顯示有效/狀態消息(在屏幕上): 例如:

Row 1 is the header row so it will not be validated. 
Row 2: Error - Full Name cannot be empty 
Row 3: OK - A contact will be created 
Row 4: OK - Contact will be updated 
Row 5: Error - Full Name must contain at least one space 
Row 6: Error - At least one other column must be populated in addition to the 'Full Name' 

用戶將具有此處兩種選擇:

  1. 取消 - 然後上傳將不會繼續進行(因此用戶可以選擇按照驗證消息更正行,然後重新上傳)。
  2. 繼續 - 然後上傳將移動到「實際上傳」階段,聯繫人將被創建或更新(如果沒有按照上述規則進行驗證錯誤)。 此外,驗證/狀態消息(類似於驗證階段的消息)應在成功上傳後顯示在屏幕上。

我已經設法解決了上面所說的所有問題,但我必須在「實際上傳」階段(即,我正在執行相同的檢查兩次)中重新驗證每一行。

我的問題是,有沒有辦法保留驗證階段的結果,所以我不必在第二階段重新驗證每條記錄?

我使用VB.NET/ASP.NET(和)在.NET Framework (Version 4.0.30319.34209)上使用NativeExcel庫開發了這個工具。 請注意,所有的代碼將使用VB.NET(我在這裏沒有選擇,對不起)寫在代碼隱藏頁面。

任何建議/幫助將不勝感激。

+0

你應該編輯這個問題的標題作爲一個問題。即使在文件中發現錯誤,用戶是否仍能繼續上傳?是否重新驗證如此昂貴以至於值得避免?如果您只想存儲「OK」行的列表,則可以創建一個List(Of Int32),並在驗證階段將好行數添加到列表中,然後使用它來確定要導入的行。您可以類似地使用列表的索引作爲行號和列表中的驗證消息將整個狀態寫入字符串列表。 – clweeks

+0

@clweeks:謝謝你的評論。是的,即使發現錯誤行,用戶也可以繼續上傳,但是,錯誤行不會在下一階段導入。我想維護所有包含狀態消息的行,但是當用戶點擊Upload按鈕時,它將成爲一個新的頁面/請求,因此在新的頁面請求之後,在最後階段創建的List將不再存在。 – Sathish

回答

-2

閱讀Excel文件: 右鍵單擊「參考」>「COM」>「Office xx」。x對象應用

 Microsoft.Office.Interop.Excel.Application exlApp = new  Microsoft.Office.Interop.Excel.Application(); 
     Microsoft.Office.Interop.Excel.Workbook exlWb = exlApp.Workbooks.Open(@"C:\Users\user\Excelfile.xls"); 
     Microsoft.Office.Interop.Excel.Worksheet exlWs = exlWb.Sheets["Sheet1"]; 
     int col = Convert.ToInt32(usedRange.Columns.Count); 
     int row = Convert.ToInt32(usedRange.Rows.Count); 
     exlApp.Visible = true; 
     string[,] cellValue = new string[row + 1, col + 1]; 
     for (int j = 1; j <= row - 1; j++) 
     { 
      for (int k = 1; k <= col - 1; k++) 
      { 
       cellValue[j, k] = exlWs.Cells[j, k + 1].ToString(); 
      } 
     } 
     exlWb.Close(); 
     exlWs = null; 
     exlWb = null; 
     exlApp.Quit(); 
     exlApp = null; 
+0

感謝您的努力。我能夠讀取excel文件沒有任何問題。 – Sathish

0

保存驗證狀態消息的列表(字符串),然後做出一個會話變量,這樣就可以在上傳階段使用它作爲一個提示。