2017-11-24 20 views
1

DataGridView의 내용을 Excel으로 내보내려고합니다. 그러나이 코드를 사용하여 원하는 열을 추가 할 수 있습니다. Excel FormulaC#에서 Excel로 내보내고 Excel 수식이있는 다른 열을 추가하십시오.

이 코드 지금까지

private void button1_Click_1(object sender, EventArgs e) 
    { 
     Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); 
     Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing); 
     Microsoft.Office.Interop.Excel._Worksheet worksheet = null; 
     app.Visible = true; 
     worksheet = workbook.Sheets["Sheet1"]; 
     worksheet = workbook.ActiveSheet; 
     worksheet.Name = "Testing this"; 
     for (int i = 1; i < dataGridView2.Columns.Count + 1; i++) 
     { 
      worksheet.Cells[1, i] = dataGridView2.Columns[i - 1].HeaderText; 
     } 
     for (int i = 0; i < dataGridView2.Rows.Count - 1; i++) 
     { 
      for (int j = 0; j < dataGridView2.Columns.Count; j++) 
      { 
       worksheet.Cells[i + 2, j + 1] = dataGridView2.Rows[i].Cells[j].Value.ToString(); 
      } 
     } 
     workbook.SaveAs("c:\\output.xlsx", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
     app.Quit(); 
    } 

내가 수식 항목에 추가하는 방법에 대한 갈로 확실하지 오전이, 어떤 도움을 주시면 감사하겠습니다있다.

감사합니다.

답변

1

수식을 추가하려는 범위의 .Formula 속성을 간단히 사용할 수 있지만 다른 셀 (가능할 수 있음)을 참조하는 경우 .FormulaR1C1은 상대 참조를 기준으로 셀을 참조 할 수 있으므로 정말 좋습니다. 위치가 아니라 행/열이 무엇인지 알아 내려고합니다. 위의 예에서

,이 2로 매우 마지막 컬럼으로 수식을 부가 왼쪽에서 두번째 컬럼의 값을 가지고 곱 것이다 :

int formulaCol = dataGridView2.Columns.Count + 1; 
for (int i = 0; i < dataGridView2.Rows.Count - 1; i++) 
{ 
    for (int j = 0; j < dataGridView2.Columns.Count; j++) 
    { 
     worksheet.Cells[i + 2, j + 1] = dataGridView2.Rows[i].Cells[j].Value.ToString(); 
    } 

    worksheet.Cells[i + 2, formulaCol].FormulaR1C1 = "=R[0]C[-2]*2"; 
} 

R[0] 현재 행을 의미한다. R1은 한 행 앞이고 R[-1]은 한 행 뒤가됩니다.

- 수정 11/28/17 - 귀하의 코멘트 당

이는 뇌 전원 공급없이 R1C1에 표준 공식을 변환하는 정교한 속임수입니다. 수식을있는 그대로 입력하십시오. 파일 -> 옵션 -> 수식으로 이동하여 "R1C1 수식"탭을 확인하십시오. 그것은 귀하의 정상적인 수식을 R1C1로 변환하고 코드에서이 코드의 사용을 용이하게합니다.

멋진 것은 공식을 복사/붙여 넣기 할 때 일반적인 A1 스타일처럼 변경되지 않는다는 것입니다. I는 J7로 화학식 넣으면

이렇게하여 실시 예에서, 그것이 될 것이다 :

= IF (ISNA (MATCH (R [-5] C [-13], C [-7] 0)), INDEX (C [-7], MATCH (R [-5] C [-9], C [-7], 0)))

물론 이것은 올바르지 않습니다. 이는 처음에 표준 공식을 입력하는 셀에 따라 다릅니다.

평소처럼 입력하고 R1C1로 바꾸고 C# 코드로 사용하십시오.

enter image description here

+0

감사합니다. 나는 지금 내 수식을 추가하기 위해 고심하고 있는데, 내가 추가하고 싶은 공식은 = IF (ISNA (MATCH (A2, C : C, 0)), "", INDEX (C : C, MATCH (A2 , C : C, 0))) - 'A2'를 현재 'A'위치로 바꾸기 –

+0

@DavidWaldron -이 마지막 부분을 돕기 위해 약간 대답을 편집했습니다. 사용해보고 문제가 계속되는 경우 통합 문서 사본을 보관 용 계정 또는 G 드라이브에 업로드하십시오. – Hambone

+0

내가 원하는 것을 완벽하게 작성하십시오! - RC 변환을 자동으로 수행 할 수있을 때 훨씬 쉽습니다. –