使用C#从非连续地址字符串创建Excel范围

时间:2013-10-22 14:13:22

标签: c# string excel range excel-dna

我正在开发Excel Addin! 我想创建一个单元格的联合(范围)而不使用 Xlapp.Union (递归方式),只需在中给出单元格(x,y)的单元格一个字符串

我尝试使用XLapp.Union,但它确实很慢,然后我正在寻找一种新的方法来做同样的事情,只需将cellsAdress作为字符串。

我正在寻找一个函数,它接受一个字符串的参数:类似这样的东西(“A1,B3,C5 ......”)并且重新调整一个范围!

我试过了: 范围RE = ExcelWorkbook.ActiveSheet.get_Range(RgEvenString,Type.Missing); 其中RgEvenString是一个字符串,如:“A1,B3,C5 ......” 抛出异常!!

任何人都可以帮助PLZ!

2 个答案:

答案 0 :(得分:1)

http://social.msdn.microsoft.com/Forums/en-US/abf5a953-caa2-44c1-9723-fb7b1d99f2fc/how-to-reference-noncontiguous-selected-rows-in-excel?forum=isvvba

查看此链接,了解在Excel中引用非连续单元格的方法。该链接在VBA中,但您应该能够将其应用于C#。考虑通过解析包含单元格地址的字符串创建自己的“选择”来模仿该帖子中的“选择”。

顺便问一下,联盟有多慢?您是否可以发布一个示例,说明您在其他代码的上下文中使用Union函数的方式?也许还有其他可以优化的东西。

答案 1 :(得分:-1)

public static Range OldUnionRange(List<System.Drawing.Point> list,Range range, Boolean Even){
Range RgEven = null;
Boolean RgEvenBool = false;
Range RgOdd = null;
Boolean RgOddBool = false;
for (int j = 0; j < list.Count; j++){
System.Drawing.Point p = list[j];
int x = p.X;
int y = p.Y;
if (x % 2 == 0 && Even)
{Range rng = range.Cells[x + 1, y + 1];
if (!RgEvenBool){
RgEven = range.Cells[x + 1, y + 1];
RgEvenBool = true;
}
RgEven = Shuttle_add_in_Loader.XlApp.Union(RgEven, rng);
}
else if (x % 2 != 0 && !Even)
{Range rng = range.Cells[x + 1, y + 1];
if (!RgOddBool)
{
RgOdd = range.Cells[x + 1, y + 1];
RgOddBool = true;
}
RgOdd = Shuttle_add_in_Loader.XlApp.Union(RgOdd, rng);
}
}
if (Even)
{
return RgEven;
}
else
{return RgOdd;}
}