使用interop.Excel在C#中显示Excel范围。范围为空和不为空?

使用interop.Excel在C#中显示Excel范围。范围为空和不为空?,c#,excel,vba,C#,Excel,Vba,我有一张Excel表格,看起来像这样。 |A1 | B1 |“空白”| D1 | E1 | F1| 即,仅填充第一行,第三列为空。我使用interop.excel以以下方式在C#中解析它: Excel.Application exApp = OpenExcel(); String mySheet = @"C:\c#\rapport.xlsx"; Excel.Workbook wb = exApp.Workbooks.Open(mySheet);

我有一张Excel表格,看起来像这样。 |A1 | B1 |“空白”| D1 | E1 | F1| 即,仅填充第一行,第三列为空。我使用interop.excel以以下方式在C#中解析它:

        Excel.Application exApp = OpenExcel();
        String mySheet = @"C:\c#\rapport.xlsx";
        Excel.Workbook wb = exApp.Workbooks.Open(mySheet);
        Excel.Worksheet ws = wb.Sheets[1];
        Excel.Range row = ws.Rows[1];
我创建了一个只包含第1行中非空单元格的新区域

        Excel.Range rng = row.SpecialCells(Excel.XlCellType.xlCellTypeConstants);
现在:如果我使用
rng。选择
我工作表中的所有非空单元格。如果我使用
rng.Count
它将返回5,这是我的工作表中非空单元格的数量。但当我使用以下方式逐单元格打印时:

Console.WriteLine(rng[1,i].Value.ToString());
它表明rng[1,1-2]包含“A1和B1”,这很好。但是 rng[1,3]为空或null。rng[1,4-7]包含D1-F1

这怎么可能

我的主要目标是将所有非空值存储在字符串数组中。但我无法选择正确的值,因为我的量程rng为空且非空是一种奇怪的方式。

尝试使用:

ws.Columns.ClearFormats();
ws.Rows.ClearFormats();
确保您的范围不包括格式化但为空的单元格

另一种尝试可能是:

Excel.Range rng = row.SpecialCells(Excel.XlCellType.xlCellTypeConstants,Type.Missing);

这就解决了!但是,我没有按照Rory的建议使用.Item方法来存储值。Thnx Rory

        string[] str = new String[rng.Count];
        int i = 0;

        foreach (Excel.Range cell in rng.Cells)
        {
            str[i] = cell.Value.ToString();
            i++;
        }

        for (int j = 0; j < str.Length; j++)
            Console.WriteLine(str[j]);
string[]str=新字符串[rng.Count];
int i=0;
foreach(单元格中的Excel.Range单元格)
{
str[i]=cell.Value.ToString();
i++;
}
对于(int j=0;j
谢谢你,但没用。我仍然会在我的rng中存储一个空值。我不明白。它清楚地突出显示了工作表中的所有非空单元格,还说它只包含5个非空单元格。但是,rng中的第三个位置存储空值。您需要使用foreach构造在rng中迭代单元格。按原样使用
.Item
方法并不局限于范围内的实际单元格-它只是相对于范围内的第一个单元格。谢谢,伙计!这就解决了!