【问题标题】:How to get foreach index with sheetData.Elements如何使用 sheetData.Elements 获取 foreach 索引
【发布时间】:2022-01-23 13:33:11
【问题描述】:

在使用 sheetData.Elements 中的 foreach 循环时,我找不到获取当前索引位置的方法。 (读取 OpenXML 文档)。 我必须创建自己的单元格索引 (cx) 并在读取新行时将其重置为 0。

我尝试了类似的东西

foreach (Cell c in r.Elements<Cell>().Select((value, i) => new { i, value })) 但显然它不起作用。 我当前的代码:

y=0
foreach (Row r in sheetData.Elements<Row>())
{
    dataGridView1.Rows.Add();
    cx = 0;
    foreach (Cell c in r.Elements<Cell>())
    {                    
        dataGridView1.Rows[y].Cells[cx].Value = value;
        cx++;
    }                 
    y++;
}

有没有办法在没有我自己的索引的情况下创建一个 foreach。

谢谢!

【问题讨论】:

  • foreach (Cell c in r.Elements&lt;Cell&gt;().((value, i) =&gt; new { i, value })) 无法工作,因为您正在调用无名函数。您需要将 LinQ 与 .Select((value, i) =&gt; new { i, value }) 一起使用,如已(第一个)链接问题中所述。
  • 是的,很抱歉,我的初始写作失败了,不能再编辑了。我尝试使用 .Select... 我得到 ** Error CS0030 Unable to convert type '(DocumentFormat.OpenXml.Spreadsheet.Cell testvalue, int i)' en 'DocumentFormat.OpenXml.Spreadsheet.Cell'**
  • @jeffk 这样做时,你不会得到一个Cell,而是一个匿名对象(?),其中包含一个变量value,这里是一个Cell,还有一个变量i,这里索引为int。应该是 foreach (var c in r.Elements&lt;Cell&gt;().Select(...)) { dataGridView1.Rows[y].Cells[cx].Value = c.value; /* index is c.i*/ }Look it up in the hightest voted answer of dup question1

标签: c#


【解决方案1】:

感谢 Chrᴉz 记得莫妮卡,

工作代码:

foreach (Row r in sheetData.Elements<Row>())
                {
                    dataGridView1.Rows.Add();
                    foreach (var c in r.Elements<Cell>().Select((testvalue, i) => (testvalue, i)))
                    {
                        value = c.testvalue.InnerText;
                        MessageBox.Show(c.i.ToString());  
                        dataGridView1.Rows[y].Cells[c.i].Value = value;
                    }
}```

【讨论】:

    猜你喜欢
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2020-02-25
    • 2012-05-06
    • 2019-12-06
    • 2015-05-03
    相关资源
    最近更新 更多