2013-10-20 131 views
1

我稍微改變了一些來自msdn.com的代碼。我試圖在Excel電子表格中獲取所有工作表名稱的字符串數組。我可以在foreach語句中添加一些代碼,以便每次循環時都將attr.Value放入數組中?用C#中的'foreach'循環創建一個字符串數組

public static void GetSpreadsheetData(string fileName) 
{ 
    using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, false)) 
    { 
     string[] allTheSheets = new string[0]; 
     string[] allTheData = new string[0]; 
     S sheets = spreadsheetDocument.WorkbookPart.Workbook.Sheets; 

     foreach (E sheet in sheets) 
     { 
      foreach (A attr in sheet.GetAttributes()) 
      { 
       int i = 0; 
       string sheetName = attr.Value; 
       allTheSheets[i] = attr.Value.ToString(); 
       i++; 
       Console.WriteLine(allTheSheets[0]); 
       Console.ReadLine(); 
      } 
     } 
    } 
} 

以下是錯誤消息我得到:

「索引數組的範圍之外。」

讓我困惑的事情之一是,當我實例化數組時,我給了它一個索引[0],那麼這是如何超出邊界?

+0

你正在創建與'0'長度的陣列(allTheSheets)。你有沒有考慮過使用List? –

+0

陣列大小固定。你無法調整它的大小。所以你必須首先正確確定它的大小。如果您不知道尺寸,請使用「列表」。 –

+0

你的代碼有點奇怪。你知道你在哪一行得到異常。仔細查看,您的數組中的索引始終爲零,這會使您的數組無用。 – Steve

回答

3

您已經創建了可能包含只是一個元素的數組,這元素將在指數0。當然被保存,如果你有A級的多個實例在你的內部循環,你需要在陣列中更多的元素。

而不是使用數組,你可以改變你的代碼以使用List<string>

using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, false)) 
{ 
    List<string> allTheSheets = new List<string>(); 
    List<string> allTheData = new List<string>(); 
    S sheets = spreadsheetDocument.WorkbookPart.Workbook.Sheets; 


    foreach (E sheet in sheets) 
    { 
     foreach (A attr in sheet.GetAttributes()) 
     { 
      string sheetName = attr.Value; 
      allTheSheets.Add(attr.Value.ToString()); 
     } 
    } 

在這兩個循環的末尾,你會在你的名單allTheSheets所有A值,你可以用另一種的foreach看在其內容。

說,你的代碼看起來有點怪。用於存儲和打印字符串元素的索引始終爲零,因此您不應該有任何Index Out Of Bound

+0

非常感謝。試了清單,它似乎工作得很好!我很感激幫助。 – will

相關問題