在C#中使用'foreach'循环创建一个字符串数组

时间:2013-10-20 20:52:26

标签: c# arrays excel openxml-sdk

我稍微修改了一些来自msdn.com的代码。我试图在Excel电子表格中获取所有工作表名称的字符串数组。我可以在foreach语句中添加一些代码,这样每次循环时,都会将attr.Value放入数组中吗?

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]的索引,那么它是如何超出界限的呢?

1 个答案:

答案 0 :(得分: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