2012-06-15 76 views
0

我得到了一個excel文件。我已經上傳了截圖。我需要編寫一個.NET應用程序(控制檯應用程序)來解析excel文件。您可以看到名爲「功能名稱」的單元。我的.NET應用程序應該找到特定的單元格並閱讀該列中的內容,例如Template,InstanceFromTemplate,Task等。如果它讀取任務,它應該調用CreateTask函數,如Task();如果它讀取InstanceFromTemplate,它應該調用InstanceFromTemplate函數,如TaskInstanceFromTemplate();解析Excel文件並讀取單元格

我已經爲這些函數編寫代碼。我只需要幫助解析excel表格,進入特定列,閱讀包含該列下的函數名稱的單元格並調用相應的函數。任何幫助,將不勝感激。

算法就像

  1. 打開Excel文件
  2. 搜索標題單元格題爲功能名稱
  3. 讀頭單元格
  4. 如果第一個單元格中讀取下的第一個單元格,通話功能( GetAllTemplate函數的代碼已經存在)只需要在調用它後找到它
  5. 如果第二個單元格調用函數。
  6. 標題單元格下的最後一個單元格功能名稱已到達。因此,出口

回答

3

基於什麼你正在嘗試做的,你真的應該使用LINQ Ecxel插件的描述,我認爲它簡單的方法來解決你的問題

http://code.google.com/p/linqtoexcel/

+0

不錯,我不知道這個庫 - 一定會在未來的項目中使用它。謝謝 – Kane

+0

本週我也只發現這個圖書館:) – leppie

3

我強烈建議使用庫像Excel Data Reader並使用託管代碼中的數據。 CodePlex網站有一個很好的例子,可以滿足您的需求。

0

使用Excel互操作你可以這樣做。我認爲函數名稱指向的是在你的Excel工作簿中定義的函數,否則你必須改變這個部分來使用反射(但在這種情況下,你需要一個接收器的方法,我沒有看到一個在問題中)。

 object hmissing = System.Reflection.Missing.Value; 

     Xls.Application App = new Xls.ApplicationClass(); 
     App.Visible = true; 
     Xls.Workbook wb = App.Workbooks.Open(@"c:\tmp\cartel1.xls", hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, 
      hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing); 
     Xls.Worksheet ws = (Xls.Worksheet)wb.ActiveSheet; 
     Xls.Range rng = ws.UsedRange; 
     Xls.Range hdr = rng.Find("Function Name", hmissing, hmissing, hmissing, hmissing, Microsoft.Office.Interop.Excel.XlSearchDirection.xlNext, hmissing, hmissing, hmissing); 
     string hdrAdd = hdr.get_Address(hmissing, hmissing, Microsoft.Office.Interop.Excel.XlReferenceStyle.xlA1, hmissing, hmissing); 
     string[] pcs = hdrAdd.Split('$'); 
     string col = pcs[1]; 
     int row; 
     int.TryParse(pcs[2], out row); 
     string methName; 
     row++; 
     while ((methName = App.get_Range(col + row.ToString(), hmissing).get_Value(hmissing) as String) != null) 
     { 
      App.Run(methName.Split('.')[1], hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, 
       hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, 
       hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, 
       hmissing, hmissing, hmissing); 
      row++; 
     } 
-1

備註供將來參考。 只是想指出,與interop工作是凌亂的。你最好的選擇是使用庫。

+0

這應該是一個評論。 – Mangesh