【问题标题】:Creating a string array with a 'foreach' loop in C#在 C# 中使用“foreach”循环创建字符串数组
【发布时间】:2013-10-20 20:52:26
【问题描述】:

我稍微修改了一些来自 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],那么它怎么会超出边界呢?

【问题讨论】:

  • 您正在创建一个长度为0 的数组(allTheSheets)。你考虑过使用 List 吗?
  • 一个数组是固定大小的。您无法调整它的大小。所以你必须首先正确地调整它的大小。如果您不知道大小,请改用List<String>
  • 你的代码有点奇怪。你知道你在哪一行得到例外。仔细观察,您在数组中有一个始终为零的索引,这会使您的数组无用。
  • @L.B 是的!这似乎奏效了!!!这里比较新,有什么可以给你点赞的吗?
  • @Steve 我的代码很奇怪,因为我几乎不知道自己在做什么,哈哈。

标签: c# arrays excel openxml-sdk


【解决方案1】:

您创建了一个仅包含一个元素的数组,该元素将存储在索引 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());
        }
    }

在这两个循环结束时,您将拥有列表中的所有 A 值allTheSheets,您可以使用另一个 foreach 来查看其内容。

话说,你的代码看起来有点奇怪。用于存储和打印字符串元素的索引始终为零,因此您不应该有任何Index Out Of Bound

【讨论】:

  • 非常感谢。尝试了列表,它似乎工作得很好!感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
相关资源
最近更新 更多