对filter完整的Excel表格列进行重新sorting

我遇到了与Excel 2007通过VSTO 3.0的问题。 在我的项目中,我偶尔需要洗牌。 通常情况下,这工作正常,但我最近发现,当数据被过滤和适配的数据是非连续的问题出现。

例如,使用这个数据集:

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

如果列2上的筛选器排除Pacific或Central,则以下代码会产生错误。

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(); 

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

我已经尝试了很多东西,似乎没有一个完全工作。 如果我使用table.AutoFilter.ShowAllData() ,我可以继续没有问题,但我已经清除了用户的filter,并不能让我回来与table.AutoFilter.ApplyFilter() ,我假设。

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

我现在一直对此感到头痛,似乎无法在自己的脑海中或在广阔的互联网上find解决办法。 任何帮助将非常感激。

我会考虑删除并重新创buildfilter。 如果你看到问题,那么你应该解决这些问题。

看看ListObject.AutoFilter.Filters集合。

在这里寻找更多的信息。