我有一些操作,需要迭代通过3000个excel单元格。问题是,我的代码在性能上似乎相当糟糕。我对秒表类做了一些调查,看看我在哪里浪费了时间。我的操作持续了24秒,仅一行代码就消耗了17秒。我使用的代码是我的类从单元格引用返回的单元格名称。
public string GetCellName(Range cell)
{
string name = "";
try
{
name = cell.Name.Name;
}
catch { }
return name;
}对我来说,这段简单的代码消耗了这么多时间,这似乎真的很奇怪。还有一些其他部分应该花更长的时间,例如带有6-8个元素的小for循环。我试着这样写这个方法:
public string GetCellName(Range cell)
{
if (cell.Name == null) return "";
else if (cell.Name.Name == null) return "";
else return cell.Name.Name;
}但是它抛出了一个异常。你对如何有效地检索excel单元格名称有什么建议吗?
发布于 2012-02-02 19:52:22
我发现最有效的方法是最小化COM和.NET应用程序接口之间的通信。实现这一点的方法是使用
range.get_Value(XlRangeValueDataType.xlRangeValueXMLSpreadsheet); 它返回包含所有信息的XML格式。也可以使用
Range.set_Value(XlRangeValueDataType.xlRangeValueXMLSpreadsheet, myStr);用于使用某些值填充range。
因此,无论您的范围有多大,您只需调用一次COM来获取所有值,而不是为范围中的每个单元格调用一次或多次。这样,你还可以格式化样式到特定的单元格/范围部分,设置单元格/范围部分的名称和所有其他内容。
发布于 2012-01-27 02:41:46
创建类型对象的扩展,当您需要使用MySpaceName.Extensions的方法时,将其放入另一个spaceName中;
下面是方法:
public static string ToSafeString(this object value)
{
if (value == null)
{
return "";
}
else
{
return value.ToString(); ;
}
}然后是你的cell.ToSafeString()
https://stackoverflow.com/questions/9023443
复制相似问题