如何从电子表格中删除过滤后的数据?

时间:2012-07-19 17:10:06

标签: c# excel range

我正在努力的事情一直困扰着我,我不禁想到别人会指出我一个简单的解决方案。

我写的一部分程序涉及以下内容:

我有一个C#程序,它使用自动排序将一系列过滤器应用于电子表格。已经排序的数据我要删除,目前它有点使用特殊单元但我认为我的方法并不精彩。

在删除数据之前,我删除了第一行,这是我的标题,不包括在删除中。然而,这可能会导致一个问题,如果我删除标题并且过滤后的数据实际上没有返回0行,那么当我调用我的specialcell删除它时会标记某种错误,说明没有范围。 什么是最好的解决方案,理想情况下我可以获取过滤范围并检查数据是否超过1行,但我尝试过的属性如rows.count正在标记错误的数据类型。 这是我的代码的简化版本

Excel.Range AllRange = mySheet.UsedRange;
Excel.Range filtered = AllRange.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeVisible, Type.Missing);

if (//SOME SORT OF COUNT SHOULD GO HERE IM GUESSING > 1)
{
 mySheet.Rows.EntireRow[1].Hidden = true;
 filtered = mySheet.UsedRange.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeVisible, Type.Missing);

filtered.EntireRow.Delete(Excel.XlDirection.xlUp);
mySheet.Rows.EntireRow[1].Hidden = false;       
}

这样的事情,我希望有所帮助。感谢您就此事提供任何建议。

1 个答案:

答案 0 :(得分:0)

我找到了一个有效的解决方案。基本上你想要接受Areas.Count

Excel.Range AllRange = mySheet.UsedRange;
Excel.Range filtered = AllRange.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeVisible, Type.Missing);

long colstuff = filtered.Areas.Count;

if (colstuff > 1)
{
  mySheet.Rows.EntireRow[1].Hidden = true;
  filtered = mySheet.UsedRange.SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeVisible, Type.Missing);

  filtered.EntireRow.Delete(Excel.XlDirection.xlUp);
  mySheet.Rows.EntireRow[1].Hidden = false;   
}