Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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
C# 如何让excel加载项从工作表中读取行,直到没有更多数据?_C#_.net_Excel_Ms Office_Vsto - Fatal编程技术网

C# 如何让excel加载项从工作表中读取行,直到没有更多数据?

C# 如何让excel加载项从工作表中读取行,直到没有更多数据?,c#,.net,excel,ms-office,vsto,C#,.net,Excel,Ms Office,Vsto,我已经开始使用C编写Excel 2003的Com加载项。我正在寻找一个代码示例,演示如何从活动工作表中读取单元格数据。我看到您可以编写如下代码: Excel.Range firstCell = ws.get_Range("A1", Type.Missing); Excel.Range lastCell = ws.get_Range("A10", Type.Missing); Excel.Range worksheetCells = ws.get_Range(firstCell, lastCell

我已经开始使用C编写Excel 2003的Com加载项。我正在寻找一个代码示例,演示如何从活动工作表中读取单元格数据。我看到您可以编写如下代码:

Excel.Range firstCell = ws.get_Range("A1", Type.Missing);
Excel.Range lastCell = ws.get_Range("A10", Type.Missing);
Excel.Range worksheetCells = ws.get_Range(firstCell, lastCell);
抓住一系列的细胞。我需要的帮助是,当您不知道有多少行数据时,如何读取单元格数据。我可能能够确定数据的起始行,但要读取的数据行数未知

有人能给我举一个例子,说明如何在遇到一行空单元格之前从工作表中读取行吗

还有人知道如何获取用户选择的单元格范围吗


任何帮助都将不胜感激。这似乎是一个强大的开发工具,但我很难找到详细的文档来帮助我学习它:

我可以想出两种方法。第一种选择是使用命名范围,而不是单元格的位置。在本例中,您可以将实例命名为A1:A10 MyList,并使用

Excel.Range range = worksheet.get_Range("MyList", Type.Missing);
object[,] data = (object[,])range.Value2;
其好处是,如果您通过在工作表中插入行或列来调整命名范围的大小,这仍然可以正常工作。 也可以一直读取,直到遇到空单元格或空单元格,但必须逐个单元格读取。如果你只有很少的单元格,这不是问题,但是如果你处理的数据量较大,比如说100个单元格,那么逐单元格读取会降低速度。我还没有尝试过该代码,但从startRow开始,一直到找到一个空行为止,这些代码应该都是有效的:

     int startRow = 1;
     bool hasContent = false;

     int row = startRow;
     do
     {
        var cell = (Excel.Range)sheet.Cells[row,1];
        if (cell.Value2 != null)
        {
           hasContent = true;
           row++;
        }
     }
     while (hasContent);

使用此代码,它应该找到最后一行,并在其第一列中结束

var lastExcel=worksheet.Rows.get_EndXlDirection.xlDown;
lastExcel.Cells[worksheet.Rows.get_EndXlDirection.xlUp.Row+1,1].Value2=End

命名范围听起来很有趣。我从您的示例中了解了如何检索命名范围。但是如何创建公式呢?您可以在工作表上选择要命名的区域,在单元格上方的左上角,在键入公式的位置的左侧有一个下拉列表;只需为您的范围键入一个名称,就可以了。美妙之处在于你可以在之后的工作表中使用它。例如,如果你把A1命名为Taxes,那么你可以输入A2=Taxes,它会起作用——这会使公式更容易阅读!hasContent不应该在do while开始时设置为false吗?现在看起来像是一个无限循环。