对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集合。
在这里寻找更多的信息。