2013-10-22 6 views
0

Excel 추가 기능을 개발 중입니다! 나는 하나의 문자열 세포의 단지주는 커플 (x, y)에 의해, Xlapp.Union (순환 방식)를 사용하지 않고 세포의 조합 (범위)을 만들!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;} 
} 
관련 문제