2013-10-22 40 views
0

我正在开发一个Excel Addin! 我要在不使用Xlapp.Union(递归的方式),通过细胞只给夫妇(X,Y)在一个字符串创建细胞的联合会(范围)!使用C#从非连续地址字符串创建Excel范围

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

我要寻找的是发生在PARAMS功能的字符串:这样的事情(“A1,B3,C5 ......”)和至极retruns一系列!

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

任何人都可以帮助PLZ!

回答

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
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;} 
}