c# - 当范围很大时,VSTO 4 & C# NamedRange.RefersToRange 抛出 Com 异常

标签 c# visual-studio-2010 excel vsto

我正在使用 NamedRanges 来存储 Excel 工作表的“ View ”。 因此,当用户选择一个 View 时,它将获取该 View 的 NamedRange(行的集合),然后隐藏这些行。但是,当 NamedRange 中的实际范围变得太大时,每当我尝试引用 RefersToRange 属性时,我都会收到 COM 异常

'(ViewRange).RefersToRange' threw an exception of type 'System.Runtime.InteropServices.COMException'

真正有趣的部分是,我可以在 Excel 中选择 NamedRange,它会很好地突出显示整个范围,还有其他属性,例如 .RefersTo.RefersToR1C1 返回很好。

我通过首先创建包含所有行的范围,然后为其命名来创建 NamedRange。

这是当我收到 COM 错误时 RefersToR1C1 返回的示例

"=Sheet1!R13:R23,Sheet1!R26:R39,Sheet1!R41,Sheet1!R43:R46,Sheet1!R48:R49,Sheet1!R51:R72,Sheet1!R76:R78,Sheet1!R83:R84,Sheet1!R137:R147,Sheet1!R150:R163,Sheet1!R165,Sheet1!R167:R170,Sheet1!R172:R173,Sheet1!R175:R196,Sheet1!R200:R202,Sheet1!R207:R208,Sheet1!R261:R271,Sheet1!R274:R287,Sheet1!R289,Sheet1!R291:R294,Sheet1!R296:R297,Sheet1!R299:R320,Sheet1!R324:R326,Sheet1!R331:R332,Sheet1!R385:R395,Sheet1!R398:R411,Sheet1!R413,Sheet1!R415:R418,Sheet1!R420:R421,Sheet1!R423:R444,Sheet1!R448:R450,Sheet1!R455:R456"

这是我遇到问题的代码

 Excel.Range rngAll = _Blocks.DataRange;
 rngAll.EntireRow.Hidden = false;
 Excel.Name ViewRange = Globals.ThisWorkbook.Names.Item(viewName, System.Type.Missing);

 string addy = ViewRange.RefersToR1C1 as string;   //this line works fine
 ViewRange.RefersToRange.EntireRow.Hidden = true;  //this line throws the COM Exception

任何帮助将不胜感激,或者如果您有更好的方法来完成我的“ View ”,或者有没有办法甚至使用上面的公式地址来实例化一个我可以隐藏的范围?

更新!!!

好吧,所以这并没有回答原来的问题,这就是我编辑而不是回答的原因。如果这里有信誉良好的“Stack Overflowers”,请告诉我是否应该回答。

我确实找到了一种访问相关范围的方法,这确实解决了我眼前的问题。我最终使用了以下代码行

Globals.Sheet1.InnerObject.get_Range(viewName, System.Type.Missing).EntireRow.Hidden = true;

谢谢, 皮特

最佳答案

仍然不知道为什么会失败,但有效的解决方案是通过工作表的 get_Range() 方法访问名称范围。

Globals.Sheet1.InnerObject.get_Range(viewName, System.Type.Missing).EntireRow.Hidden = true; 

关于c# - 当范围很大时,VSTO 4 & C# NamedRange.RefersToRange 抛出 Com 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9404297/

相关文章:

excel - 使用 Powershell 将 CSV 数据插入 Excel 中下一个可用的相应单元格

c# - 使用 AccountManagement 扩展类时如何设置二进制属性?

c# - ToolStripLayoutStyle.Table 在 ContextMenuStrip 中不起作用

c++ - Qt和OpenCV静态库相互冲突

excel - 如何在vba excel中拆分具有多个分隔符的字符串?

vba - Excel VBA - 图表中 'Format Data Series - Gap Width' 的宏?

c# - 如何从流中加载 PDF 并添加文件附件?

c# - 如何将哈希从 Live API for Contacts 的响应转换为文本

windows-mobile - Visual Studio 2010 Professional Beta 2 上的 Windows Mobile 6 Standard SDK Refresh 安装问题

visual-studio-2010 - 使用 Visual Studio 2010 构建 cURL 和 libcurl