小编Gay*_*ake的帖子

获得Excel行范围的最快方法

在VSTO C#项目中,我想从一组行索引中获取一系列行.

行索引可以是例如"7,8,9,12,14".

然后我想要范围"7:9,12,14"行.

我现在这样做:

Range rng1 = sheet.get_Range("A7:A9,A12,A14", Type.Missing);
rng1  = rng1.EntireRow;
Run Code Online (Sandbox Code Playgroud)

但由于范围规范中的字符串处理,它的效率有点低.

sheet.Rows["7:9"]
Run Code Online (Sandbox Code Playgroud)

有效,但我不能给这个

sheet.Rows["7:9,12,14"] // Fails
Run Code Online (Sandbox Code Playgroud)

c# excel vsto office-interop

8
推荐指数
2
解决办法
7万
查看次数

简化excel单元列表以创建Range

我想从动态生成的单元格引用列表中创建Excel.Range对象.

Excel.Range outputRange = sheet.get_Range(strCellRange, Type.Missing);
Run Code Online (Sandbox Code Playgroud)

由于strCellRange可以变得非常大,因此它提供了com异常.因此,我想简化它以使用联合范围符号.

例如

string strCellRange = "F2,G2,H2,I2,J2,K2,L2,F7,G7,H7,I7,J7,K7,L7,F12,G12,H12,I12,J12,K12,L12,F17,G17,H17,I17,J17,K17,L17,F22,G22,H22,I22,J22,K22,L22,F27,G27,H27,I27,J27,K27,L27";
Run Code Online (Sandbox Code Playgroud)

string strCellRange = "F2:L2,F7:L7,F12:L12,F17:L17,F22:L22,F27:L27";
Run Code Online (Sandbox Code Playgroud)
  1. 是否有任何Excel方法来创建具有大量单元格引用的Range对象?
  2. 是否有已知的算法来实现上述简化(矩阵算法)?

c# algorithm excel vsto

5
推荐指数
1
解决办法
1596
查看次数

在 VSTO 中的 Excel get_Range 中使用的正确分隔符

在用 C# 编写的 Excel VSTO 项目中,我需要从单元格字符串列表中获取 Range 对象。

这是问题的简化版本:

string strRange = "A1:A2,A5";
Excel.Range r = sheet.get_Range(strRange);
Run Code Online (Sandbox Code Playgroud)

然而,由于列表分隔符在不同的区域性设置中可能与逗号不同,所以我实际上使用的是:

listSep = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator;
string strRange = "A1:A2" + listSep + "A5";
Excel.Range r = sheet.get_Range(strRange);
Run Code Online (Sandbox Code Playgroud)

我的问题是,当用户在 Excel 选项 > 高级(Application.DecimalSeparator)中更改“小数分隔符”以匹配 ListSeparator 时,这将不起作用。

使用指定范围的字符串调用 get_Range 的正确方法是什么?

编辑:稍加修改以添加我下面评论的信息。

c# excel vsto cultureinfo

5
推荐指数
1
解决办法
2640
查看次数

高效的对象平等C#

我正在尝试提高以下(示例)代码的性能.

Object[] inputKeys = new Object[10];
inputKeys[0] = "4021";
inputKeys[1] = "3011";
inputKeys[2] = "1010";
inputKeys[3] = "1020";
inputKeys[4] = "1030";
Run Code Online (Sandbox Code Playgroud)

然后比较输入键.

for (int i = 0; i < 5; i++)
{
    for (int j = 0; j < 5; j++)
    {
        bool result = inputKeys[i].Equals(inputKeys[j]);
    }
}
Run Code Online (Sandbox Code Playgroud)

inputKeys可以是所有类型string,int32DateTime.

.Equals当它达到数百万次时,会有巨大的性能下降.

关于如何提高这条线的性能的任何建议(等式检查)?

我试过这个:使用下面的类数组而不是Object数组来保存键.我保留了Key类型和键值.

public class CustomKey : IEquatable<CustomKey>{
    internal int KeyType { get; private set; }

    internal string ValueString { get; private set; } …
Run Code Online (Sandbox Code Playgroud)

c#

5
推荐指数
1
解决办法
247
查看次数

标签 统计

c# ×4

excel ×3

vsto ×3

algorithm ×1

cultureinfo ×1

office-interop ×1