2012-12-07 5 views
1

그래서 여기까지 진행됩니다. C#으로 Excel dll을 사용하여 크고 불쾌한 엑셀 시트에 들어가서 다른 사람이 할 필요가 없도록합니다.수식 복사 - 새로운 셀 범위에 적용

우리는 하나의 셀에있는 공식이 크기가 커서이 때문에 모든 행에 복사하지 않으려합니다. 이 수식은 배치 된 행에 여러 값을 사용합니다. 행 1에 있으면 해당 행의 셀이 많이 사용됩니다.

정상적으로이 공식을 Excel에서 복사하면 새로운 시작 위치가 반영되도록 셀의 새 범위가 수정됩니다.

문제는이 수식을 복사 할 때 여전히 붙여 넣은 행 대신 첫 번째 행과 관련된 모든 값을 제공한다는 것입니다. 여기에 내 코드가 있습니다.

sheet.Cells[77][row].Formula = sheet.Cells[77][1].Formula; 

수식을 실제로 행 1 대신 새 행에 적용하는 방법을 알려 줄 수 있습니까?

+0

왜를 수식이있는 셀을 새 대상에 복사/붙여 넣기 하시겠습니까? –

+0

C#을 사용하여 그렇게 할 수 있습니까? 그게 내가 따라 온거야. – Mizmor

+0

@Mizmor, 제공되는 솔루션 중 어떤 것이 제공 되었습니까? – RAS

답변

5

대부분의 경우 VBA에서 작동하므로 아마 작동 할 것입니다.

sheet.Cells[77][row].FormulaR1C1 = sheet.Cells[77][1].FormulaR1C1; 

FormulaR1C1이 (안 매우 유익한 링크) 대신에 사용할 세포 말하는 현재 셀과 관련하여 참조 세포의 위치를 ​​설명 R1C1 표기법을 사용하기 때문에이 작동합니다. 즉, 실제 참조는 수식이있는 셀에 따라 달라집니다. Formula을 사용하는 경우 정확히 하드 코드 된 셀 참조를 포함하는 Formula 문자열을 복사합니다.

+0

고맙습니다. – Sam

1

당신은 =의 내 휴대 말 =Sum(B77,C77) (같은 행에서 셀)라는 공식을 가지고 77 세포를하자, 그래서 Application.ConvertFormula

를 사용할 수 있습니다. (당신은 비록 세포를 수정해야 할) 일

string formula = Sheet1.Cells[77][2].Formula; 
Sheet1.Cells[77][2].Formula = app.ConvertFormula(formula, XlReferenceStyle.xlA1, XlReferenceStyle.xlR1C1, XlReferenceType.xlRelative, Sheet1.Cells[77][3]); 

전체 콘솔 응용 프로그램 : 바로 아래 셀에 복사하려는 경우
, 당신은 뭔가를 할 것입니다.

static void Main(string[] args) 
     { 
      var app = new Microsoft.Office.Interop.Excel.Application(); 

       var workbook = app.Workbooks.Open(@"C:\Users\user\Desktop\Book1.xlsx"); 
       Microsoft.Office.Interop.Excel.Worksheet Sheet1 = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item("Sheet1"); 
       string formula = Sheet1.Cells[5][3].Formula; 
       Sheet1.Cells[5][4].Formula = app.ConvertFormula(formula, XlReferenceStyle.xlA1, XlReferenceStyle.xlR1C1, XlReferenceType.xlRelative, Sheet1.Cells[5][3]); 
       workbook.SaveAs(@"C:\Users\user\desktop\test.xlsx"); 
       workbook.Close(); 
     } 

ConvertFormula 메서드의 세 번째 및 네 번째 매개 변수를 원하는대로 수정할 수 있습니다. 이 방법에 대한 자세한 내용은 ConvertFormula을 참조하십시오. 여러 행 전체의 공식을 스트레칭하려면이 코드는 엑셀에서 셀 뒤에 수식을 복사하는 데 사용되기 때문에
, 당신은 range.AutoFill()

0

안녕 얘들이 게시 해요를 사용하려고 할 수 있습니다

public void copy_Formula_behind_cell() 
{ 
    Excel.Application xlapp; 
    Excel.Workbook xlworkbook; 
    Excel.Worksheet xlworksheet; 
    Excel.Range xlrng; 
    object misValue = System.Reflection.Missing.Value; 

    xlapp = new Excel.Application(); 
    xlworkbook =xlapp.Workbooks.Open("YOUR_FILE", 0, true, 5, "", 
    "",true,Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", 
    false, 
    false, 0, true, 1, 0); 

    xlworksheet = (Excel.Worksheet)xlworkbook.Worksheets.get_Item(1); 

    string sp = xlworksheet.Cells[3,2].Formula;//It will Select Formula using Fromula method// 

    xlworksheet.Cells[8,2].Formula = 
    xlapp.ConvertFormula(sp,XlReferenceStyle.xlA1, 
    XlReferenceStyle.xlR1C1, XlReferenceType.xlAbsolute, 
    xlworksheet.Cells[8][2]); 
    //This is used to Copy the exact formula to where you want// 

    xlapp.Visible = true; 
    xlworkbook.Close(true, misValue, misValue); 
    xlapp.Quit(); 

    releaseObject(xlworksheet); 
    releaseObject(xlworkbook); 
    releaseObject(xlapp); 
} 


private void releaseObject(object obj) 
{ 
    try 
    { 
     System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); 
     obj = null; 
    } 
    catch (Exception ex) 
    { 
     obj = null; 
     MessageBox.Show("Unable to release the Object " + ex.ToString()); 
    } 
    finally 
    { 
     GC.Collect(); 
    } 
} 
관련 문제