【问题标题】:Excel Range in C# using interop.Excel. Range both empty and not empty?C# 中使用 interop.Excel 的 Excel 范围。范围既空又不空?
【发布时间】:2015-02-11 09:12:57
【问题描述】:

我有一个看起来像这样的 Excel 工作表。 |A1|B1| “空白”|D1|E1|F1| IE。只有第一行被填充,第三列是空白的。我在 C# 中使用 interop.excel 以下列方式解析它:

        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.Select,我的工作表中的所有非空单元格都会被选中。如果我使用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 既为空又非空是一种奇怪的方式。

【问题讨论】:

  • 您需要使用 foreach 构造迭代 rng 中的单元格。使用 .Item 方法并不局限于范围内的实际单元格 - 它只是相对于范围的第一个单元格。
  • 谢谢伙计!这解决了它!

标签: c# excel vba


【解决方案1】:

尝试使用:

ws.Columns.ClearFormats();
ws.Rows.ClearFormats();

确保您的范围不包括格式化但为空的单元格。

另一个尝试可能是得到:

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

【讨论】:

  • 谢谢,但没有帮助。我仍然得到一个存储在我的 rng 中的空值。我不明白。它清楚地突出了工作表中的所有非空单元格,它还说它只包含 5 个非空单元格,但 rng 中的第三个位置存储一个空值。
【解决方案2】:

这解决了它!但是,我没有使用 .Item 方法来存储 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]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多