Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅获取包含数据(数字)的单元格范围_C#_Excel_Worksheet Function - Fatal编程技术网

C# 仅获取包含数据(数字)的单元格范围

C# 仅获取包含数据(数字)的单元格范围,c#,excel,worksheet-function,C#,Excel,Worksheet Function,有一个MS Excel表,其中填写了一个矩阵数据 如何仅获取数字区域? 现在,我正在使用工作表.UsedRange提取数据范围。但是,如果我删除了一行矩阵,它将在usedRange中被考虑,即使该行已被删除!那只是因为我以前用过那些细胞 那么,我如何才能仅获取包含实际内容(数字)的范围 守则: public Array ReadData(string fullPath, Size size) { Excel.Application application; Workbook wo

有一个MS Excel表,其中填写了一个矩阵数据

如何仅获取数字区域?

现在,我正在使用
工作表.UsedRange
提取数据范围。但是,如果我删除了一行矩阵,它将在usedRange中被考虑,即使该行已被删除!那只是因为我以前用过那些细胞

那么,我如何才能仅获取包含实际内容(数字)的范围

守则:

public Array ReadData(string fullPath, Size size)
{
    Excel.Application application;
    Workbook workBook;
    Worksheet workSheet;
    Range range;

    application = new Excel.ApplicationClass();
    workBook = application.Workbooks.Open(fullPath, 0, true, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
    workSheet = (Worksheet)workBook.Worksheets.get_Item(1);

    //HERE IS THE PROBLEM
    range = workSheet.UsedRange; 

    if (!size.IsEmpty)
    {
        Size availableSize = new Size(range.Columns.Count, range.Rows.Count);
        if ((availableSize.Width < size.Width) || (availableSize.Height < size.Height))
        {
            string msg = string.Format("Available data range ({0}) at the sheet is smaller than needed size ({1})", availableSize, size);
            throw new ArgumentException(msg);
        }
        else if ((availableSize.Width > size.Width) || (availableSize.Height > size.Height))
        {
            range = workSheet.get_Range(workSheet.Cells[1, 1], workSheet.Cells[size.Width, size.Height]);
            string msg = string.Format("Available data range ({0}) at the sheet is bigger than needed size ({1})", availableSize, size);
            Trace.TraceInformation(msg);
        }
    }

    Array data;

    data = (Array)range.Cells.Value2;

    return data;
}
但它会引发一个例外“找不到单元格”

我真的不知道c,但在Excel中,您使用的是
范围(“yourRange”)。特殊单元格(xlCellTypeConstants,xlNumbers)
,或
Range(“yourRange”).CurrentRegion.SpecialCells(xlCellTypeConstants,xlNumbers)






澄清:此
数据=(数组)range.Cells.Value2的结果是什么现在?它是否也包括已删除的行(如空字符串或smth)?现在,如果我编辑单元格并删除项目,它就可以工作了。它不再改变范围,可能是因为excel 2010,我不知道。特殊单元格是什么意思?xlCellTypeConstants?你能解释更多的细节吗?请看编辑…并为自己搜索一点!我给了你一个很好的答案,但你不能在你最喜欢的搜索引擎中只键入这个词?在C#:range=range.CurrentRegion.SpecialCells(XlCellType.xlCellTypeConstants,XlSpecialCellsValue.xlNumbers);不幸的是,当我使用range=range.CurrentRegion.SpecialCells(XlCellType.xlCellTypeConstants,XlSpecialCellsValue.xlNumbers)时,它不起作用;我得到一个异常“找不到单元格”。我尝试的范围=工作表.UsedRange.SpecialCells(XlCellType.xlCellTypeAllFormatConditions);但它引发了同样的例外。请参阅我答案中添加的链接?(我无法在评论中添加链接)
        range = workSheet.UsedRange;
        range = range.CurrentRegion.SpecialCells(XlCellType.xlCellTypeConstants, XlSpecialCellsValue.xlNumbers);