2

只是我一直在做的事情一直困扰着我,我不禁想到其他人会为我指出一个简单的解决方案。

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

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

在删除数据之前,我删除了第一行,即我的标题,以便不将其包含在删除中。但是,这可能会导致问题,如果我删除标题并且过滤后的数据实际上返回的行数不超过 0 行,那么当我调用我的特殊单元格来删除它时,它将标记某种错误,说明没有范围。什么是最好的解决方案,理想情况下我可以抓取过滤范围并检查数据是否超过 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;       
}

类似的东西,希望对你有帮助。感谢您就此事提供任何建议。

4

1 回答 1

1

我找到了一个可行的解决方案。基本上你想参加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;   
}
于 2012-07-23T16:36:36.737 回答