2009-09-10 4 views
0

엑셀 파일 내에 수동으로 압축을 풀어야하는 이미지가 있습니다. 나는 엑셀 2007 사용자들에게 매우 잘 기능하는 프로그램을 작성했습니다,하지만 엑셀 작동하지 않습니다 2003 프로세스Excel 2003 클립 보드에서 이미지 붙이기

: 사용자가 사용자를 클립 보드에 Excel 파일, 복사 관련 이미지를 엽니는 C# 응용 프로그램을 열거 나, 버튼을 클릭 어떤 클립 보드에서 이미지를 수집 한 다음 사용자로부터 추가 정보를 수집합니다.

응용 프로그램 코드는 매우 간단합니다. 실패한 모든

  if (Clipboard.GetImage() != null) 
      { 
       pictureBox1.Width = Clipboard.GetImage().Width; 
       pictureBox1.Height = Clipboard.GetImage().Height; 
       pictureBox1.Image = Clipboard.GetImage(); 

       //...more misc. code... 
      } 

이 엑셀 2007과 완벽하게 작동하지만,

나는 다음과 같은 코드를 디버깅을 시도 엑셀 2003과 함께 작동하지 않습니다 : 버튼 클릭에서 다음 코드가 호출됩니다

Clipboard.ContainsImage는() >> 거짓 Clipboard.GetDataObject(). GetDataPresent (DataFormats.Bitmap) >> 거짓

한 생각은 Excel 2003의 "Office 클립 보드가"방해 할 수 있다는 것 반환? MS PAINT는 이미지를 붙여 넣을 때 아무런 문제가 없습니다.

도움 말?

+0

사용자가 Shift 키를 누른 상태에서 편집> 그림 복사를 선택한 다음 "그림으로 복사"가 아닌 "비트 맵으로 복사"를 선택하면 기존 코드가 작동합니다. 어떤 점이 제기됩니까? 기본 "복사"는 "그림으로 복사"를 사용합니다. 클립 보드에서 "사진"에 ​​어떻게 액세스 할 수 있습니까? –

답변

0

은 Excel 워크 북을 열어 these examples (이 예제는 ASP.NET 용이지만 WinForms 응용 프로그램, 콘솔 응용 프로그램 등에서도 잘 작동 함)에 나와있는 것처럼 셀 범위 또는 차트에서 이미지를 가져올 수 있습니다. SpreadsheetGear는 Excel에 의존하지 않으므로 설치된 Excel 2003, Excel 2007 또는 Excel이 설치되지 않은 상태에서 작동합니다.

무료 시험판 here을 다운로드 할 수 있습니다.

면책 조항 : 소유권이 SpreadsheetGear LLC

+0

안녕하세요 Joe - 우리는 업무 프로세스를 재 설계하려고하지 않습니다.우리는 단순히 코드 또는 구성 문제를 해결하여이 기존 방법이 제대로 작동하지 못하도록하려는 것입니다. –

+0

철자가 잘못되었습니다. –

2

해결책을 찾았습니다.

분명히 Excel 2007에서는 이미지를 동일한 파일 형식으로 클립 보드에 복사하지 않습니다. . 나는 Clipboard.GetDataObject()를 통해는, getFormats을 반복()하고 다음 포함 된 것을 발견 :

오피스 모양 형식을 METAFILEPICT 그리기 EnhancedMetafile PNG + 오피스 예술 JFIF + 오피스 예술 GIF + 오피스 예술 PNG 을 JFIF GIF 는이 작업을 얻으려면

을 ActiveClipboard, 나는 다음에 내 코드에 두 번째 코드 블록을 추가했습니다 :

 if (Clipboard.GetImage() != null) //Excel 2007 
     { 
      pictureBox1.Width = Clipboard.GetImage().Width; 
      pictureBox1.Height = Clipboard.GetImage().Height; 
      pictureBox1.Image = Clipboard.GetImage(); 
      //... 
     } 
     else if(Clipboard.GetDataObject().GetDataPresent("PNG")) //Excel 2003 
     { 
      Clipboard.GetDataObject().GetFormats() 
      IDataObject data = Clipboard.GetDataObject(); 
      MemoryStream ms = (MemoryStream)data.GetData("PNG"); 

      pictureBox1.Width = Image.FromStream(ms).Width; 
      pictureBox1.Height = Image.FromStream(ms).Height; 
      pictureBox1.Image = Image.FromStream(ms); 
      //... 
     } 
,536,

그리고 작동합니다.

+0

어쨌든 더 나은 솔루션; 아무런 문제없이 투명성을 지원합니다. – Nyerguds

관련 문제