성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Excel Sheet를 WinForm에서 사용하는 방법</h1> <p> Devpia에서 질문이 하나 떴군요. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 이것이 가능한가요? 엑셀 관련.. ; <a target='tab' href='http://mblog.devpia.com/link/?no=2124168'>http://mblog.devpia.com/link/?no=2124168</a> </pre> <br /> 저도 예전에 WebBrowser 컨트롤을 이용해서 다뤄본 적이 있어서 답변은 일단 링크로 마무리를 했는데요.<br /> <br /> 마이크로소프트의 KB 문서에 이와 관련해서 자세하게 소개되어 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > How to use the WebBrowser control to open Office documents in Visual C# 2005 or in Visual C# .NET ; <a target='tab' href='http://support.microsoft.com/default.aspx?scid=kb;EN-US;304662'>http://support.microsoft.com/default.aspx?scid=kb;EN-US;304662</a> </pre> <br /> 우선, Excel 문서를 WinForm에서 어떻게 보는지부터 한번 테스트를 해볼까요?<br /> <br /> 간단한 WinForm 프로젝트를 생성한 후 WebBrowser 컨트롤을 폼에 추가하고, 테스트용 Excel 파일을 만든 후 다음과 같이 코딩을 추가합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > private void Form1_Load(object sender, EventArgs e) { string xlsPath = Path.Combine(Environment.CurrentDirectory, "excel_test.xlsx"); this.webBrowser1.Navigate(xlsPath, false); } </pre> <br /> 예상했던 것과는 달리, 이렇게 하는 경우 새로운 Excel 프로그램이 실행되어 외부에서 문서가 열리는 것을 볼 수 있는데요. 이에 대해서는 Office 2007부터 그렇게 동작하도록 바뀌었다고 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Windows Internet Explorer 7 또는 Internet Explorer 8에서 2007 Microsoft Office 프로그램 문서를 보려고 하면 새 창이 열림 ; <a target='tab' href='http://support.microsoft.com/kb/927009'>http://support.microsoft.com/kb/927009</a> </pre> <br /> <a target='tab' href='http://support.microsoft.com/default.aspx?scid=kb;EN-US;304662'>How to use the WebBrowser control to open Office documents in Visual C# 2005 or in Visual C# .NET</a> 문서에 보면, 그런 방법을 피하기 위한 2가지 방법이 제시되고 있는데요. 일단 사용자 측의 레지스트리를 건드리는 <a target='tab' href='http://support.microsoft.com/kb/927009'>2번째 방법(KB - 927009)</a>은 별로 현실성이 없어 보이니 넘어가고... 첫 번째 방법이 그나마 적합한 것 같은데 현재 <a target='tab' href='http://support.microsoft.com/kb/311765'>링크</a>가 깨져 있습니다.<br /> <br /> 이런 걸로 봐서, 마이크로소프트는 더 이상 엑셀 문서를 컨트롤로 포함시키는 기능을 지원하지 않기로 한 것 같습니다. 아쉽지만, 길게 쓸 수 있는 기술은 아니라는 의미이니 주의는 해야 할 것 같습니다.<br /> <br /> 어쨌든... 문제 해결은 해야 하는데.<br /> <br /> 남은 희망은 웹 검색이군요. ^^ 다음의 글을 통해서, 그나마 해당 컨트롤이 "DSO Framer Control"이라는 것을 알게 되었고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Hosting Office in .NET applications ; http://blogs.msdn.com/b/erikaehrli/archive/2005/08/26/hostofficeinnet.aspx </pre> <br /> 이름으로 검색하니, 빌드된 바이너리 파일을 CNET에서 발견할 수 있었습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Microsoft Developer Support Office Framer Control Sample (KB 311765) ; <a target='tab' href='http://download.cnet.com/Microsoft-Developer-Support-Office-Framer-Control-Sample-KB-311765/3000-2206_4-10732960.html'>http://download.cnet.com/Microsoft-Developer-Support-Office-Framer-Control-Sample-KB-311765/3000-2206_4-10732960.html</a> </pre> <br /> 운이 좀 따라주는지 ^^ 중국 사이트에서 소스 코드까지 구할 수 있었는데요.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > MS_DSOFramer_OpenSource ; <a target='tab' href='http://www.hackchina.com/en/cont/89652'>http://www.hackchina.com/en/cont/89652</a> </pre> <br /> 일단, 제 경우는 소스 코드를 다운로드해서 Visual Studio 2010 + MS Office 2010으로 마이그레이션 한 후 빌드를 완료했습니다. 그렇게 생성된 OCX 파일을 regsvr32.exe로 등록하고 툴박스에 추가, "DSO Framer Control Object"를 WinForm 위에 올린 후 다음과 같이 코드를 작성해 주면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > string xlsPath = Path.Combine(Environment.CurrentDirectory, "excel_test.xlsx"); this.axFramerControl1.Open(xlsPath); </pre> <br /> 다음과 같이 WinForm에 추가된 Excel 문서를 볼 수 있습니다. ^^<br /> <br /> <img alt='excel_embed_1.png' src='/SysWebRes/bbs/excel_embed_1.png' /><br /> <br /> 소스 코드는 2개를 첨부했습니다.<br /> <br /> 하나는, <a target='tab' href='http://www.sysnet.pe.kr/bbs/DownloadAttachment.aspx?fid=671&boardid=331301885'>Visual Studio 2010으로 마이그레이션 된 DSO Framer 소스 코드</a>이고, <a target='tab' href='http://www.sysnet.pe.kr/bbs/DownloadAttachment.aspx?fid=672&boardid=331301885'>다른 하나는 위와 같이 테스트 해본 C# 예제 프로젝트</a>입니다. (참고로, 예제 프로젝트에는 디버그 버전으로 빌드된 dsoframer.ocx 파일을 첨부해 놓았습니다.)<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
8827
(왼쪽의 숫자를 입력해야 합니다.)