2013-10-20 96 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

相关问题