使用interop.Excel在C#中显示Excel范围。范围为空和不为空?
我有一张Excel表格,看起来像这样。 |A1 | B1 |“空白”| D1 | E1 | F1| 即,仅填充第一行,第三列为空。我使用interop.excel以以下方式在C#中解析它:使用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.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
方法并不局限于范围内的实际单元格-它只是相对于范围内的第一个单元格。谢谢,伙计!这就解决了!