Microsoft MVP성태의 닷넷 이야기
글쓴 사람
진우
홈페이지
첨부 파일






첨부된 그림처럼 그리드 형태의 응용프로그램과 엑셀을 동기화(?) 하고싶습니다.
엑셀에서 셀값 입력, 시트 추가/변경 등을 하면 응용프로그램에서도 똑같이 셀값이 입력, 시트 추가/변경 되고
반대로 응용프로그램에서 값변경, 시트 추가/변경을 하면 엑셀에 똑같이 적용되게 하고싶습니다.

그러나 응용프로그램에서 발생하는 사용자 이벤트는 제가 사용방법을 알고있는데
엑셀에서 발생하는 사용자 이벤트는 어떻게 통지받고 콜백 등록하는지 방법을 모르겠습니다.
궁극적으로 엑셀 c++ COM 을 사용해야하는건지 혼란스럽습니다.
검색중에 XLL 이라는걸 알게 되었는데 이것은 엑셀 사용자 정의 함수(UDF) 인것같습니다. 제가 원하는게 아닌것같은데
이것도 아닌건지 맞는건지 모르겠습니다.

정리하자면
엑셀 C++ COM 개체를 직접 사용해야하는건지 아니면 다른 방법이 있는건지 너무 궁금합니다.
읽어주셔서 감사합니다!








[최초 등록일: ]
[최종 수정일: 7/28/2020]


비밀번호

댓글 작성자
 



2020-07-28 10시53분
글쎄요, 엑셀 측은 아마도 VSTO로 만들어야 제어가 되지 않을까 싶은데요.

C# - Excel 시트에 윈도우 폼 기능을 추가하는 방법
; https://www.sysnet.pe.kr/2/0/10998

아니면, Add-in으로 만들어 엑셀에 등록하는 식으로 만들어야 할 것입니다. 만약 아래의 글처럼, Excel Application을 COM 객체로 직접 만들어 제어하는 경우,

C# - Excel(을 비롯해 Office 제품군) COM 객체를 제어 후 Excel.exe 프로세스가 남아 있는 문제
; https://www.sysnet.pe.kr/2/0/11997

Worksheet 개체 단위로 Change 이벤트를 걸어두면 될 것입니다.
정성태
2020-07-29 03시59분
[진우] 성능때문에 c++ 을 생각하고있었는데 결국은 c# 을 사용해야하는건가 보군요
알겠습니다 링크 잘 참조하겠습니다 답변 감사합니다 ^^

[guest]
2020-07-29 04시28분
@진우 C++로 하셔도 됩니다. (물론, 더 복잡해질 것입니다. ^^;)
정성태
2020-07-29 04시40분
[진우] 네 c++ 은 com 에 접근하는거라 복잡하더라구요..
검색을 해보면 모두 COM 과 관련된 2000년대의 오래된 자료들뿐인데 VS2015나 VS2017 VC++ 에서 샘플소스들을 사용해보면 에러만 엄청나게 뜹니다..
vs2005, 2008 까지는 자료가 좀 있더라구요
그래서 MS 에서 c++ 로 엑셀 컨트롤하는 기능을 없애고 닷넷 기반으로만 사용하도록 한건지 도무지 알수가 없어서 혼란스러웠습니다.
시간을 두고 차근차근 공부하면서 해야할것같습니다
하지만 너무 오래걸리면 말씀대로 c# VSTO를 사용해야할것같네요
답변 감사합니다 ^^

[guest]
2020-07-29 09시51분
@진우 닷넷만 사용하도록 한 것은 아닙니다. 오히려 전체적인 기반은 C++을 위한 COM이지만 그것을 C#에서 쉽게 사용할 수 있기 때문에 대체로 그렇게 접근하는 것이 일반화된 것입니다.

그리고, 성능상 C++로 하신다고 했는데 사실 COM 개체를 사용하는 측에서 보면 C++이나 C#이나 그렇게 크게 차이나는 것은 아닙니다. (게임 프로그래밍처럼 fps를 다투는 상황이라면 모를까... 서로 동기화 시키는 정도의 이벤트 반응에는 거의 차이가 없다고 봐도 무방할 것입니다.)
정성태
2020-07-30 04시34분
[진우] 네 말씀대로 c++ 보다는 c# 을 많이 쓰다보니 c# 을 쓰는 방법만 있는걸로 제가 착각했던것같습니다.
지금 엑셀과 다른 응용프로그램을 연동하는게 목표인데요
파일매핑오브젝트를 통해 프로세스간 통신하게끔 하려는데 아무래도 c# 보단 win32 api 를 직접 쓰는게 낫지않을까 싶어서요
어떻게 하는게 최선의 방법인지 알아보고만 있는중입니다.
^^


[guest]

1  2  3  [4]  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5856guest3/17/20233165Form1_FormClosing에 closing time을 Sqlite 저장하는 법? [6]파일 다운로드1
5855욜로3/17/20232761C# 메타데이터에서 불러오는 참조 정의가 안됨 [1]
5854민성3/16/20232950안녕하세요 asp.net mvc using문 관련하여 [1]
5853pa3/16/20233198오피스 2016 업데이트 후 파일 출력 불가 [1]
5852guest3/16/20232891입력 foreach 검색/출력 foreach [3]
5851guest3/15/20233225foreach내 list변경 [10]
5850독서가3/14/20232888C#에서 동적dll 사용시 문의입니다. [4]파일 다운로드1
5849guest3/9/20232874C# wpf로 Web에서 구동되는 hts가능한가요? (노트북없고 스마트폰 없음) [4]
5848민성3/9/20232783도움 요청드립니다. [2]파일 다운로드1
5847guest3/7/20232934SQlike Like 구문 - 1시간째 인데 안되네요 [13]
5846Huuu...3/7/20232621웹 다운로드에 대한 고찰 [5]파일 다운로드1
5845guest3/7/20232644C# Split함수의 불친절함 [1]
5844까망이3/7/20232762c# 무료 디컴파일러는 어떤게 좋습니까? [1]
5843guest3/7/20232723판매 후 dll 등 에러 [5]
5842kr13/6/20232766publish 할 때 분석기 관련 dll 제외 [5]
5841guest3/3/20232956프로그램 판매 시 - Upgrade 버전 판매 [2]
5840joe3/2/20233053C# 클래스 라이브러리 수정 -> C++에서 참조시 함수 목록 갱신되지 않음. [4]파일 다운로드1
5839guest3/2/20233681윈도우 서비스 프로그램 - FORM 애플리케이션 감시서비스 [8]
5838랄랄라3/1/20232889event 사용 시 두 표현의 차이점이 있을까요? [1]
5837감사합니...2/28/20233046오라클 DB서버 접속관련 문의 드립니다.(Load Balancing, HA Events) [2]
5836박지범2/27/20232839static instance의 initialize 순서가 보장되나요? [6]
5835주민호2/25/20235649Windows Software Development Kit - 최신버전 1개 남기고 다 삭제하면 안되는지요? [10]파일 다운로드1
5834guest2/24/20232886Python IDE - 비주얼스튜디오 [3]
5833무지남2/23/20232597Async 메서드 그리고 나서 Bool 메서드 [5]
5832김지우2/21/20232884event와 delegate의 차이 , event를 써야하는 이유 [1]
5831이우람2/20/20233129ref 전역변수가 pinned가 될수 있나요? [2]
1  2  3  [4]  5  6  7  8  9  10  11  12  13  14  15  ...