首页 文章

使用interop.Excel在C#中使用Excel范围 . 范围既空又不空?

提问于
浏览
2

我有一张看起来像这样的Excel表格 . | A1 | B1 | “BLANK”| 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.Select ,则选择我工作表中的所有非空单元格 . 如果我使用 rng.Count ,它将返回5,这是我工作表中非空单元格的数量 . 但是当我使用以下单元格逐个打印时:

Console.WriteLine(rng[1,i].Value.ToString());

它表明rng [1,1-2]包含“A1和B1”,这很好 . 但是rng [1,3]为空或为空 . 并且rng [1,4-7]包含D1-F1 .

这怎么可能?

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

2 回答

  • 0

    尝试使用:

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

    确保您的Range排除格式化但空单元格 .

    另一种尝试可能是:

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

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

相关问题