【问题标题】:Get only the range of cells that have data (numbers) on it仅获取具有数据(数字)的单元格范围
【发布时间】:2012-02-16 13:40:37
【问题描述】:

有一张 MS Excel 表格,里面填满了一个矩阵数据。

我怎样才能只获得数字区域?

现在我正在使用workSheet.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;
}

我认为可能的解决方案是在 VB 中发布的。在 C# 中将是:

        range = workSheet.UsedRange;
        range = range.CurrentRegion.SpecialCells(XlCellType.xlCellTypeConstants, XlSpecialCellsValue.xlNumbers);

但它会引发“找不到单元格”的异常

【问题讨论】:

  • 澄清一下:这个data = (Array)range.Cells.Value2; 现在的结果是什么?它是否还包括已删除的行(作为空字符串或 smth)?
  • 好吧,现在如果我编辑单元格并删除项目,它就可以工作了。它不再改变范围,可能是因为excel 2010,我不知道。

标签: c# excel worksheet-function


【解决方案1】:

我不太懂 c#,但是在 Excel 中,你使用
Range("yourRange").SpecialCells(xlCellTypeConstants, xlNumbers),或
Range("yourRange").CurrentRegion.SpecialCells(xlCellTypeConstants, xlNumbers)

http://msdn.microsoft.com/en-us/library/aa213567(v=office.11).aspx

SpecialCells in VSTO

How to get the range of occupied cells in excel sheet

【讨论】:

  • SpecialCells 是什么意思? xlCellType 常量?你能详细解释一下吗?
  • 查看编辑...并为自己搜索一下!我给了你一个很好的答案,你不能在你最喜欢的搜索引擎中输入那个词吗?
  • 在 C# 中:range = range.CurrentRegion.SpecialCells(XlCellType.xlCellTypeConstants, XlSpecialCellsValue.xlNumbers);
  • 不幸的是它不起作用,当我使用 range = range.CurrentRegion.SpecialCells(XlCellType.xlCellTypeConstants, XlSpecialCellsValue.xlNumbers);我得到一个异常“找不到单元格”。我试过 range = workSheet.UsedRange.SpecialCells(XlCellType.xlCellTypeAllFormatConditions);但它引发了同样的异常。
  • 在我的回答中看到添加的链接? (我无法在 cmets 中添加链接)
猜你喜欢
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多