2011-04-01 6 views
2

Excel Interop 라이브러리를 사용하여 시트를 가져 와서 시트의 값을 바꿉니다. 내 시트 구조는 다음과 같습니다.Excel Interop 및 수식 범위

열 A-E는 F-L 열의 데이터를 처리하는 수식을 포함합니다. 시트를 업데이트하면 F-L의 내용을 지우고 A-E의 수식을 그대로 둡니다. 그런 다음 F-L 열에 새 데이터를 채 웁니다.

입력 한 새 데이터의 전체 범위까지 확장하려면 열 A - E (모든 행)에 내 공식이 필요합니다.

예를 들어 =sum(G1,G8)은 데이터를 8에서 20 행으로 확장하면 이되어야합니다. 시트에있는 현재 수식을 모두 얻을 수있는 방법이 있습니까? 수식의 범위를 어떻게 확장합니까?

답변

4

입력 된 데이터의 양을 프로그래밍 방식으로 8 행에서 20까지 확장한다고 가정합니다.이 데이터를 입력하는 동안 데이터를 입력하는 각 셀의 수를 유지 한 다음 할 수있다 :

yourWorkSheet.Cells[rowCount, column].Formula = string.Format("=SUM(G1:G{0})", rowCount); 

내가 당신이 묻고있는 것이 있으면 좋겠다. 내가 그 요점을 놓친다면 나에게 알려줘.

+1

형식 끝에')'이 누락 된 것처럼 보입니다. ' "= SUM (G1, G {0})"' – SwDevMan81

+0

@ SwDevMan81 좋은 지점. 수정 됨. – SeeSharp

+0

그게 내가 생각한거야. -하지만 그들은 수식을 가질 수 있기 때문에 더 쉬운 방법이 있기를 바랐다. 이 메서드를 사용하고 정규식을 사용하는 것일까 요? – Bob

0

Excel 개체 모드를 조작하는 방법에 대한 자세한 내용은 먼저 VBA 솔루션을 살펴본 다음 C#으로 변환하는 것이 좋습니다 (이는 간단합니다). 웹에서 사용할 수있는 VBA 리소스가 훨씬 더 많으며 때로는 VBA 매크로를 기록하여 도움을받을 수도 있습니다.

수식의 위치에 따라 행을 삽입하여 원하는 결과를 얻을 수 있습니다.

예. G1 : G8 범위를 참조하는 A3에 수식이 있고 이제 8 개가 아닌 20 개의 데이터 행을 삽입하려는 경우 데이터를 쓰기 전에 행 8을 20-8 = 12 배로 이동시킬 수 있습니다 .

Dim rng As Range 
Dim nIndex As Long 
Set rng = Rows("8:8") 
For nIndex = 1 To 20 - 8 
    rng.Insert Shift:=xlDown 
Next nIndex 

이렇게하면 A3의 수식이 삽입 된 행을 포함하도록 자동으로 수정됩니다.

Interop을 통해이를 수행하는 것이 많은 수의 행 (응용 프로그램에서 삽입 된 각 행에 대한 Excel 프로세스로의 왕복)에 특히 효율적이지는 않습니다. 성능을 향상시키는 한 가지 방법은 한 번에 여러 행을 삽입하는 것입니다.

+0

범위가 아래로 이동하는 것처럼 보입니다. 어떤 공식의 범위도 수정해야하며 단순한 범위 G1 : G20이 아닙니다. 중첩 된 모든 수식에 대해 합계 (G1 : G20) 또는 최대 (G1 : G20) 또는 연결 (G1 : G20) 등을 찾고 있습니다. – Bob

0
당신은 범위에 객체를 구문 분석 할 수 있습니다

...

(((Excel.Range))yourWorkSheet.Cells[rowCount, column]).Formula = string.Format("=SUM(G1,G{0})", rowCount); 
0

나는 비슷한 문제가 있었지만, IF 식. 수식 속성으로 설정하지 못했습니다. 그러나 FormulaLocal로 설정하면 같은 작품 ...

덕분에 마이크로 소프트는 :

은 BTW : 공식 및 FormulaLocal은 A1 reference style 만 작동합니다. R1C1의 경우 FormulaR1C1 및 FormulaR1C1Local을 사용해야합니다.