2016-02-02 87 views
1

我不會通過自稱程序員來侮辱真正的程序員;充其量我是一個業餘愛好者。現在要解決的問題:visual basic 2010 windows窗體應用程序將excel文件值讀入數組

我正在編寫一個程序,該程序將允許用戶在應急操作中心快速登錄並處理無線電通信量和其他數據。該軟件不會處理任何敏感信息,因此數據保密不是問題。然而,完整性和可靠性。這個程序需要從一些數據源中讀取多個實例,這些實例可以在程序之外進行編輯,並且在進行更新時(我將處理該部分),文件只是複製到位。我們選擇了Excel,因爲它本身就是一張表格,幾乎每個平臺上的軟件都可以很容易地維護xlsx文件。

我想要做的是這樣的:當主窗體打開,我想爲只讀它來調用公共子在Module1(因爲其他形式可能需要使用此子爲好),並打開文件Facilities.xlsx。有兩列:A包含設施類型(醫院,EOC,現場指揮部),B包含設施名稱(格林維爾紀念館,斯巴達堡縣EOC)等。行數將隨着設施的添加和刪除而改變,但我會處理更新分配。另一個excel文件,Personnel.xlsx,將有更多的列和再次未知數量的行。

我需要做的是A)確定要填充的數組的大小,包括需要的維數,因爲這將隨列數和行數而變化,並且B)將數據讀入數組中進一步處理決策結構或最終寫入另一個excel文件用於其他目的。有了所有的意圖和目的,數組應該是As String,因爲我要處理的所有值都是字符串。

我發現了幾十個例子,其中許多例子使用固定範圍(A1:B38)以及其他類似的工具,還有一些例子使用ADO,甚至一種以某種方式將SQL引入到這個組合中,另一些例子如此不完整甚至無法確定它們如何適合其他示例。這段代碼需要很小,很簡單,很輕便,只需要將文件中的數據讀入數組。所有的數據都是字符串,所以沒有花哨的計算或其他問題。

至於現在我有微軟的Excel 12.0對象庫和Microsoft Office 12.0對象庫(我猜的辦公室用Excel標記一起)COM引用,並在模塊1,我有:

Imports Excel = Microsoft.Office.Interop.Excel 

以幫助緩解對命名空間的引用。

迄今爲止,我已經嘗試了十幾個不同的例子,並且有一些運行時崩潰,一些讀取任何數據失敗,還有一些產生了不允許構建的錯誤。我不知所措,接近將Excel放棄到不太可靠的其他來源。我真的需要這個幫助。如果有代碼燈,資源節約解決方案,請幫助我。

回答

0

如果您使用xslx文件,請不要使用Microsoft.Office.Interop,您不需要它。看OPENXML庫(https://msdn.microsoft.com/en-us/library/office/bb448854.aspx),或者你可以用koogra(http://sourceforge.net/projects/koogra/

嘗試,如果你想互操作使用此代碼可以幫助你:

 Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); 
     Workbook wb = excelApp.Workbooks.Open(@"c:\temp_10\sample1.xlsx"); 
     Worksheet ws = wb.Worksheets[1]; 
     Range excelRange = ws.UsedRange; 

     List<string> rows = new List<string>(); 

     for (int i=1;i<=excelRange.Rows.Count;i++) 
     { 
      string r = ""; 
      for (int k=1;k<=excelRange.Columns.Count; k++) 
      { 
       r += (excelRange.Cells[i, k] as Microsoft.Office.Interop.Excel.Range).Value.ToString(); 
       r += ";"; 
      } 
      rows.Add(r); 
     } 
+0

感謝的看着這不同的角度。我需要考慮的兩件事情是:OpenXML庫在資源上更輕,它們在代碼上更輕巧嗎?我已經拉出了您提供的鏈接,並且我將註釋掉我當前的代碼並嘗試其中的一些示例。我仍然有,並且可能仍然需要幫助,處理陣列。首先,將數據獲取到字符串數組中,其次,能夠使用一個維度作爲條件來提取二列變量行(大約40個)二維數組中的第二維上的字符串。 –

+0

我一直在尋找這個解決方案,但我不認爲它會爲我工作。 MSDN說,openxml庫是2013或更高版本,我不是那麼遠。我使用的是visual studio 2010和office 2007,所以兩者都不行。我可以單獨獲得此SDK嗎?還是必須返回Interop? –

+0

我在Visual Studio 2010中使用了OpenXml 2.5。文件格式xslx與Office 2007/2010/2013相同。我認爲你可以使用它 – bdn02

相關問題