首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用excel interop API检索单元格名称的有效方法

使用excel interop API检索单元格名称的有效方法
EN

Stack Overflow用户
提问于 2012-01-27 02:38:25
回答 2查看 519关注 0票数 0

我有一些操作,需要迭代通过3000个excel单元格。问题是,我的代码在性能上似乎相当糟糕。我对秒表类做了一些调查,看看我在哪里浪费了时间。我的操作持续了24秒,仅一行代码就消耗了17秒。我使用的代码是我的类从单元格引用返回的单元格名称。

代码语言:javascript
复制
public string GetCellName(Range cell)
        {
            string name = "";
            try
            {
                name = cell.Name.Name;
            }
            catch { }
            return name;
        }

对我来说,这段简单的代码消耗了这么多时间,这似乎真的很奇怪。还有一些其他部分应该花更长的时间,例如带有6-8个元素的小for循环。我试着这样写这个方法:

代码语言:javascript
复制
public string GetCellName(Range cell)
        {
            if (cell.Name == null) return "";
            else if (cell.Name.Name == null) return "";
            else return cell.Name.Name;
        }

但是它抛出了一个异常。你对如何有效地检索excel单元格名称有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-02 19:52:22

我发现最有效的方法是最小化COM和.NET应用程序接口之间的通信。实现这一点的方法是使用

代码语言:javascript
复制
range.get_Value(XlRangeValueDataType.xlRangeValueXMLSpreadsheet); 

它返回包含所有信息的XML格式。也可以使用

代码语言:javascript
复制
Range.set_Value(XlRangeValueDataType.xlRangeValueXMLSpreadsheet, myStr);

用于使用某些值填充range。

因此,无论您的范围有多大,您只需调用一次COM来获取所有值,而不是为范围中的每个单元格调用一次或多次。这样,你还可以格式化样式到特定的单元格/范围部分,设置单元格/范围部分的名称和所有其他内容。

票数 1
EN

Stack Overflow用户

发布于 2012-01-27 02:41:46

创建类型对象的扩展,当您需要使用MySpaceName.Extensions的方法时,将其放入另一个spaceName中;

下面是方法:

代码语言:javascript
复制
     public static string ToSafeString(this object value)
    {
        if (value == null)
        {
            return "";
        }
        else
        {
            return value.ToString(); ;
        }
    }

然后是你的cell.ToSafeString()

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

https://stackoverflow.com/questions/9023443

复制
相关文章

相似问题

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