1

我通过 VSTO 3.0 遇到了 Excel 2007 的问题。在我的项目中,我需要偶尔对列进行洗牌。通常,这可以正常工作,但我最近发现当过滤数据并且过滤后的数据不连续时会出现问题。

例如,使用这个数据集:

俄亥俄东部
肯塔基东部
伊利诺伊州中部
加州太平洋
佛罗里达东部

如果第二列的过滤器不包括太平洋或中部,则以下代码会产生错误。

ListObject table = FindReportTable();
// Get data to shuffle around.
ListColumn tempColumn = table.ListColumns.Add(missing);
Range range1 = table.ListColumns[column1].Range;
Range range2 = table.ListColumns[column2].Range;
Range tempRange = tempColumn.Range;
// Swap the rows.
range1.Copy(tempRange); // This is where an error is thrown.
range2.Copy(range1);
tempRange.Copy(range2);
tempColumn.Delete();

抛出的错误是System.Runtime.InteropServices.COMException错误代码 -2146827284 和消息“该命令不能用于多项选择”。

我已经尝试了很多东西,但似乎没有一个完全有效。如果我使用table.AutoFilter.ShowAllData(),我可以继续没有问题,但是我已经清除了用户的过滤器并且无法table.AutoFilter.ApplyFilter()像我假设的那样将它们取回。

我不能可靠地存储和重新创建过滤器有两个原因:第一,table.AutoFilter.Filters如果过滤器中的数据集太大,迭代和存储过滤器的数据可能会导致问题。参考我的示例数据,如果过滤器要从第 2 列中排除 Central,则尝试检索过滤器的信息会导致互操作错误。其次,要重新创建过滤器,我需要知道过滤器最初位于哪一行以传递给table.Range.AutoFilter(object, object, XlFilterOperator, object, object)方法。

我一直在努力解决这个问题太久了,似乎无法在我自己的头脑或庞大的互联网上找到解决方案。任何帮助将非常感激。

4

1 回答 1

1

我会考虑删除和重新创建过滤器。如果您发现问题,那么您应该解决这些问题。

查看ListObject.AutoFilter.Filters集合。

在这里查看更多信息。

于 2009-12-28T18:21:40.637 回答