我有一张看起来像这样的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是空的而非空的是一种奇怪的方式。
答案 0 :(得分:0)
尝试使用:
ws.Columns.ClearFormats();
ws.Rows.ClearFormats();
确保您的Range排除格式化但空单元格。
另一种尝试可能是:
Excel.Range rng = row.SpecialCells(Excel.XlCellType.xlCellTypeConstants,Type.Missing);
答案 1 :(得分: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]);