Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
逐行、逐单元格读取excel文件C#_C#_Excel - Fatal编程技术网

逐行、逐单元格读取excel文件C#

逐行、逐单元格读取excel文件C#,c#,excel,C#,Excel,我希望(如标题所述)以编程方式从Excel文件中读取值。一行一行,然后一个单元格一个单元格,这样就可以自由地使用单元格的数据创建自定义集合 这对我有帮助 但我需要更灵活的代码。例如,我可以写(*仅适用于所有列) 并迭代第1行中的所有单元格,只要有下一个单元格。 在C#中必须有某种优雅的方式来迭代行和单元格。您可以依赖行/列属性,然后迭代所有包含的范围(单元格)。示例代码: Range range1 = worksheet.Rows[1]; //For all columns in row 1 /

我希望(如标题所述)以编程方式从Excel文件中读取值。一行一行,然后一个单元格一个单元格,这样就可以自由地使用单元格的数据创建自定义集合

这对我有帮助

但我需要更灵活的代码。例如,我可以写(*仅适用于所有列)

并迭代第1行中的所有单元格,只要有下一个单元格。
在C#中必须有某种优雅的方式来迭代行和单元格。

您可以依赖
/
属性,然后迭代所有包含的范围(
单元格
)。示例代码:

Range range1 = worksheet.Rows[1]; //For all columns in row 1
//Range range1 = worksheet.Columns[1]; //for all rows in column 1

foreach (Range r in range1.Cells) //range1.Cells represents all the columns/rows
{
    // r is the range of the corresponding cell
}
试试这个:

 Excel.Range r = worksheet.get_Range("*1", Missing.Value);
 for (int j = 0; j < r.Rows.Count; j++) {
    Excel.Range currentCell = r.Rows[j + 1] as Excel.Range;
 }
Excel.Range r=工作表.get\u范围(“*1”,缺少.Value);
对于(int j=0;j
范围是
IEnumerable
?您建议的链接可能与@mcy重复,但与互操作无关。@varocabas应该是互操作吗?如果是,那么你可能是correct@YairNevet这个问题的答案不是基于通用C#代码,而是基于相应的互操作类。我是否应该检查r.Text是否为中断的空字符串?@eomeroff r是与单元格关联的正常范围(例如,“A1”)因此,你可以随心所欲地使用它。在这种情况下,foreach什么时候会停止?@eomeroff啊,对不起(不理解你的问题)。该循环将遍历所有单元格(如果range1是一行,则遍历所有列)。你可以在任何时候休息。此外,您还可以创建一组不同的单元格进行迭代(而不是整个列/行);这段代码只是向您展示了如何对某些行/列进行迭代。在发布之前您是否尝试过这段代码?“*1”并不表示Excel中的第1列。我试过了,结果崩溃了。
 Excel.Range r = worksheet.get_Range("*1", Missing.Value);
 for (int j = 0; j < r.Rows.Count; j++) {
    Excel.Range currentCell = r.Rows[j + 1] as Excel.Range;
 }