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]

... 31  32  33  34  35  36  37  38  39  40  [41]  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
4829윤현수4/26/201714706System.Text.Encoding 질문 [1]
4828jaem...4/20/201710989시스템 종료시 block 함수 xp 지원가능한 방법 질문 [2]
4827ds4/13/201712838매서드 정의로 이동시 [메타데이터에서]에서 라고 나오는 것은 뭔가요? [1]
4826김솔지4/11/201710137CxImage 문자 출력 [1]
4825플메4/10/201710524덱스트 업로드 하는데 구성요소 서비스에 엑셀이 안뜨네요..ㅜㅜ [1]파일 다운로드1
4824김상경4/9/20179889win7에서 vb6.0을 이용해서 프로그램을 만들었습니다.(제가 만든건 아니고 옆 동료가 만들었습니다.) [1]파일 다운로드1
4823조상현3/28/201710896windows event log 에 대한 정보는 어디서 얻을 수 있을까요? [1]
4822부우3/24/201712569글수정이 안되어 다시올려드립니다ㅠ [12]파일 다운로드2
4821부우3/22/201726204파일이나 어셈블리 중 하나를 로드에러 좀 봐주세요 [9]파일 다운로드1
4820듀이3/20/201711011오차 없이 동시에 명령을 보내게 가능한가요? [2]파일 다운로드1
4819popo3/20/201712326C# sslstream 사용시 Cipher List 설정 [3]
4818부우3/16/201721193DllImport 사용시 진입점을 찾을수 없습니다 [2]
4817yun3/15/201710530서피스프로4의 HYPER-V로 윈도우7을 깔았는데... [1]
4816부우3/15/201713266C++ DLL함수 사용 질문드립니다 [10]
4815김지용3/14/20179333.net core linux 오류 [2]
4814김솔지3/13/201710390인쇄 시 , 출력화면을 이미지 파일로 저장하고 싶습니다. [1]파일 다운로드1
4813spow...3/8/201711957멀티 스레드 환경에서 처리하여야 할 목록을 효율적으로 사용하는 기법 질문 드립니다 [2]
4812popo2/23/201712029.NET Window ClassName 변경 질문 드립니다. [1]
4809힘찬도약2/15/201715090C# 가상 시리얼 [4]
4808이길용2/9/201713798WCF 외부 접속 관련해서 질문드립니다ㅠ [1]
4807헬조선식...2/8/201720399WPF의 속도에 대해서 궁금합니다. [3]
4803헬조선식...2/7/201713828WPF로 메신져 메세지 박스 구현 문의 [2]
4802spow...2/6/201710851특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은? [7]
4804spow...2/7/201710713    답변글 [답변]: 특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은?
4805spow...2/7/201710402    답변글 [답변]: 특정 범위의 값을 다른 값으로 치환하는 메소드를 만들어야 할 때 가장 빠른 방법은? (글삭제가 안돼 재첨부합니다)파일 다운로드1
4801spow...2/3/201710282C#의 참조 동작관련하여 아이디어 문의 드립니다 [4]
... 31  32  33  34  35  36  37  38  39  40  [41]  42  43  44  45  ...