2010-05-19 8 views
0

이 사무실에 대한 C# .NET 엑셀 Interop를 자동화의 모든입니다하나의 Excel 시트에서 다른 Excel 시트로 변경 사항을 어떻게 복제합니까?

2007은 두 개의 앱을 능가하고 각 응용 프로그램에 대해 동일한 통합 문서를 열 생성 말 : 나는 모든 변경 사항을 복제 할 지금

app = new Excel.ApplicationClass(); 
app2 = new Excel.ApplicationClass(); 

string fileLocation = "myBook.xslx"; 

workbook = app.Workbooks.Open(fileLocation, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing); 

workbook2 = app2.Workbooks.Open(fileLocation, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing); 

통합 문서에 통합 문서 2에서 발생합니다. 셀 변경을 캡처하기 위해 SheetChanged 이벤트를 연결할 수 있다고 생각했습니다.

app.SheetChange += new Microsoft.Office.Interop.Excel.AppEvents_SheetChangeEventHandler(app_SheetChange); 

void app_SheetChange(object Sh, Microsoft.Office.Interop.Excel.Range Target) 
{ 
    Excel.Worksheet sheetReadOnly = (Excel.Worksheet)Sh; 

    string changedRange = Target.get_Address(missing, missing, 
       Excel.XlReferenceStyle.xlA1, missing, missing); 

    Console.WriteLine("The value of " + sheetReadOnly.Name + ":" + 
       changedRange + " was changed to = " + Target.Value2); 

    Excel.Worksheet sheet = workbook.Worksheets[sheetReadOnly.Index] as Excel.Worksheet; 

    Excel.Range range = sheet.get_Range(changedRange, missing); 

    range.Value2 = Target.Value2; 
} 

계산 변경 내용을 어떻게 캡처합니까? 나는 calculate 이벤트에 연결할 수 있지만 통과 된 유일한 것은 시트이며 업데이트 된 셀은 아닙니다. app.Calculate() 또는 app.CalculateFullRebuild()를 강제 실행했지만 다른 응용 프로그램에서 아무것도 업데이트하지 않았습니다. 수식이 변경되면 변경 이벤트가 발생하지 않습니다 (예 : 슬라이더 컨트롤이 SheetCalculate 이벤트를 발생시키고 SheetChange 이벤트가 발생하지 않음)

업데이트 된 수식을 볼 수있는 방법이 있습니까? 또는 두 개의 통합 문서를 프로그래밍 방식으로 실시간으로 동기화하는 더 쉬운 방법이 있습니까?

답변

0

이벤트 포고가 false로 기본값으로 설정되어 있기 때문에 계산할 셀을 알려주는 직접 이벤트가 없다고 생각하면 계산 기능이 무한 루프로 끝납니다. 또한 시트 변경으로 자동 계산이 시작됩니다. 그리고 계산은 수식 주소에 수정이 있는지 확인하기 위해 변경 사항뿐만 아니라 전체 시트에서 발생합니다. 희망이 도움이됩니다.

+0

나는 이것을 대답으로 할 것이다. Microsoft는 개발자가 응용 프로그램을 제어 할 수 있기를 바라지 않습니다. 미래에는 가능하지만 현재로서는 그렇지 않습니다. 감사합니다 StevenzNPaul – incognick

0

두 명의 사용자가 Excel 파일에서 동일한 셀을 편집하는 경우 통합 문서를 저장 한 두 번째 사용자에게 팝업 질문이 표시됩니다. 이는 사용자에게 마지막 저장 이후 다른 사용자가 변경 한 셀을 변경했다는 것을 사용자에게 알립니다. 그녀는 자신의 변경 사항을 유지하고 다른 사용자를 삭제하거나 최근 변경 사항을 삭제할 수있는 옵션이 제공됩니다. 이는 Excel 스프레드 시트를 공유 할 때 일반적으로 사용되는 일반적인 방법입니다. 그러나이 동작은 "통합 문서 공유"창의 "고급"탭에서 해제되어있을 수 있습니다.

자세히보기 : 하나의 Excel 스프레드 시트에서 여러 사용자를 제어하는 ​​방법 | eHow.com http://www.ehow.com/how_5913825_control-users-one-excel-spreadsheet.html#ixzz0xcXAZvP1

+1

질문은 사용자간에 공유하는 것이 아니라 동일한 PC에서 실행되는 두 가지 Excel 응용 프로그램 사이에서 공유하는 것입니다. 앞의 대답에서 이것이 가능하지 않다고 언급되었습니다. 내 상위 질문은 여기에서 찾을 수 있습니다. http://stackoverflow.com/questions/2861430/how-do-you-place-an-excel-sheet-workbook-onto-a-c-net-winform – incognick

관련 문제