首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel VSTO计算范围大小

Excel VSTO计算范围大小
EN

Stack Overflow用户
提问于 2015-10-28 17:00:15
回答 1查看 732关注 0票数 0

我正在使用VSTO为Excel编写一个性能关键(并不是所有的)插件,并且作为其中的一部分,我包装了Excel的功能,这样我就不会总是从基本的VSTO接口返回dynamic

我的一个包装器是用于Range接口的,为此我计算了一个矩形,它基于要包装的Range来描述左上角和右下角的单元格。Range可以只是一个单元格,也可以是当前工作表的使用范围。

所以我计算左上角坐标的代码看起来像...

代码语言:javascript
复制
var x = excelRange.Column;
var y = excelRange.Row;

要计算右下角的坐标看起来像..。

代码语言:javascript
复制
var columnsCount = excelRange.Columns.Count;
var rowsCount = excelRange.Rows.Count;

var x = columnsCount * topLeftCoordinate.X;
var y = rowsCount * topLeftCoordinate.Y;

这很好也很简单,我认为在性能方面也会相对轻松一些,因为我不想多次从Range接口请求这些值。

不幸的是,在分析了我的应用程序并创建了从1x1到10x1大小不等的2631个矩形之后,我可以看到,简单地计算这些值就占用了我应用程序时间的大约18%/600ms,所有这些都是在调用VSTO Range接口时占用的。

有没有其他方法可以获得范围大小,而不需要调用4次Range接口,或者我是不是更好地重构我的代码,这样对于1x1范围,我不会为此计算一个矩形?

EN

回答 1

Stack Overflow用户

发布于 2015-10-28 18:38:10

通过查询range address可以减少调用次数:

代码语言:javascript
复制
string address = excelRange.Address; //Now you get address like "$A1$10"(single cell) or "$A$23:$Z$78"(multiple cells)

您所需要的就是解析地址字符串,这肯定比多调用5次互操作包装器要快得多。在我的测试中,它在结束时要快2-3倍。

还有一件与问题无关的事情--不要忘记检查Range中的区域,因为range可能由多个区域组成(多个区域选择)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33386712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档