2013-10-22 78 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;} 
}