【发布时间】: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<Cell>().((value, i) => new { i, value }))无法工作,因为您正在调用无名函数。您需要将 LinQ 与.Select((value, i) => 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<Cell>().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#