2012-07-10 62 views
0

我有一個非常大的ex​​cel電子表格,我發送給我的客戶對其產品進行更改,並標記所做的更改。當電子表格返回時,我必須使用我的主表來驗證更改。產品有一個唯一的代碼,但是一個新產品被標記爲新的,直到我分配代碼。我在excel中這樣做,因爲我的客戶對excel感到滿意。 我正在尋找一種方法來自動完成整個過程,但不知道從哪裏開始。我正在使用Visual Studio Ultimate 2010並擁有SQL Server標準版。 是否有可能擁有一個抓取應用程序讀取excel並將其放入數據庫並進行檢查或驗證的過程。然後分配主鍵並生成報告?使用Visual Studio自動優化

+0

由於數據駐留在數據庫中,您有沒有想過以某種序列化形式(甚至是在Access數據庫中)發送數據,然後編寫一個小型C#Win Forms應用程序將允許您的客戶編輯數據。然後,他們只會將編輯的數據發送給您,您可以將其導入到主數據庫中。 – 2012-07-10 13:37:32

+0

@ mark-kram數據位於excel電子表格中。我的客戶希望在電子表格中發送數據。任何其他格式,他們不舒服。 – Sithelo 2012-07-10 13:40:31

回答

1

您需要從MSDN庫中檢出Automating Excel。這會讓你從Excel端開始。然後在標準控制檯應用程序中使用數據庫並導入。

+0

當你在控制檯應用程序中說你的意思是命令行輸入只?與GUI相比有什麼優勢?我正在考慮贏得勝利。 – Sithelo 2012-07-10 13:50:35

+0

如果您只是從文件導入,則無論它是GUI還是命令行都無關緊要。 GUI將更容易挑選特定的文件進行導入,但您始終可以將文件放在您從客戶端接收的目錄中,並從特定目錄中的所有Excel文件導入。 – Josh 2012-07-10 13:52:56

+0

那就是我的計劃。如何處理沒有主鍵的空白單元格。這將是一個新產品或只是單元格留空。 – Sithelo 2012-07-10 14:12:34

0

如果您想在C#中工作,請使用Microsoft.Office.Interop.Excel庫。如果你安裝了excel,你可以導入一個引用。 This可能有用。對於數據庫部分,我無法幫助你。

0

好吧,如何將Excel電子表格轉換爲XML,然後將數據移動到您的數據庫中,看看這LINK和這LINK和這太。

+0

我曾經將excel轉換爲xml。這是一個比我原來的excel文件更大的文件。將它作爲xml比excel有什麼好處? – Sithelo 2012-07-11 06:02:06

+0

現在,您可以將數據反序列化爲C#WinForms應用程序,處理數據,然後將其序列化到數據庫中,而無需手動執行任何操作。 – 2012-07-11 15:44:22

0

這只是一個想法,而不是一個完整的開發解決方案,但您可以使用OleDb到達您的Excel文件並閱讀其內容,如它是一個數據庫表。
那麼它是由你來連接到主數據庫(SqlServer的),並適用於「合併」一個數據源到另一個

DataTable myTable = new DataTable();  
string con = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\temp\test.xls;" + 
       "Extended Properties='Excel 8.0;HDR=No;'"; 

using(OleDbConnection c = new OleDbConnection(con)) 
{ 
    c.Open(); 
    string selectString = "SELECT * FROM [Sheet1$]"; 
    using(OleDbCommand cmd1 = new OleDbCommand(selectString)) 
    { 
     cmd1.Connection = c; 
     using (OleDbDataReader myReader = cmd1.ExecuteReader()) 
     { 
      myTable.Load(myReader); 
     } 
    } 
} 

現在從第一所有數據的Excel工作表文件所需的邏輯加載到內存中的數據表對象

+0

我以前做過這個代碼。挑戰是我收到的excel可能包含需要驗證的數據。在填充之前將它放在數據表中是一個好主意。但是,在Excel中過濾它會很好。是否有可能在讀取時尋找特定的值和空白(用於新產品)並將其放入數據表中。這樣我的工作幾乎完成了一半。 – Sithelo 2012-07-10 14:22:00

+0

不知道如果我得到它,但是,一旦你有一個OleDbDataReader,你可以循環在excel行中一個接一個,並在將數據行插入數據表之前檢查來自excel的值。 – Steve 2012-07-10 14:36:12