在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) 我想从动态生成的单元格引用列表中创建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)
在用 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 的正确方法是什么?
编辑:稍加修改以添加我下面评论的信息。
我正在尝试提高以下(示例)代码的性能.
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
,int32
或DateTime
.
.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)