2014-06-06 6 views
3

Visual Studio 2010에서 C#을 사용하여 프로그램을 작성 중이며 NPOI 라이브러리를 사용하고 있습니다.NPOI를 사용하여 Excel 파일에 이미지 삽입

이미지를 Excel 파일에 삽입하려고합니다. 두 가지 방법을 시도했지만 둘 다 작동하지 않습니다.

//Method 1 

HSSFPatriarch patriarch = newSheet.CreateDrawingPatriarch() as HSSFPatriarch; 
HSSFClientAnchor anchor; 
var memoryStream = new MemoryStream(); 
System.Drawing.Image image = System.Drawing.Image.FromFile("image.jpeg"); 
image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Gif); 
anchor = new HSSFClientAnchor(0, 0, 255, 255, 0, 0, 0, 0); 
anchor.AnchorType = 2; //types are 0, 2, and 3. 0 resizes within the cell, 2 doesn't 
int index = newWorkbook.AddPicture(memoryStream.ToArray(), PictureType.JPEG); 
HSSFPicture signaturePicture = patriarch.CreatePicture(anchor, index) as HSSFPicture; //ERROR 

방법 1을 사용하면 컴파일 할 때 예외가 발생합니다. 오류 메시지는 Object reference not set to an instance of an object이고 오류는 코드의 마지막 줄에서 발생합니다.

//Method 2 

byte[] data = File.ReadAllBytes("image.jpeg"); 
int picInd = newWorkbook.AddPicture(data, XSSFWorkbook.PICTURE_TYPE_JPEG); 
XSSFCreationHelper helper = newWorkbook.GetCreationHelper() as XSSFCreationHelper; 
XSSFDrawing drawing = newSheet.CreateDrawingPatriarch() as XSSFDrawing; 
XSSFClientAnchor anchor = helper.CreateClientAnchor() as XSSFClientAnchor; 
anchor.Col1 = 0; 
anchor.Row1 = 0; 
XSSFPicture pict = drawing.CreatePicture(anchor, picInd) as XSSFPicture; 

방법 2 문제없이 컴파일하고 실행하십시오. 그러나 생성 된 Excel 파일을 열려고하면 Excel found unreadable content in 'output.xlsx'. Do you want to recover the contents of this workbook?이라는 메시지가 나타납니다. 통합 문서를 복구했지만 여전히 이미지가 표시되지 않았습니다.

이미지를 삽입 한 후의 다음 단계는 동일한 통합 문서의 Clone입니다. 방법 2를 사용하면 복제 시트가 전혀 작성되지 않았으므로 이미지 문제가 해결되면 수정 될지 확실하지 않습니다.

누군가가 도와 드릴 수 있습니까? 방법 중 하나를 제대로 작동시킬 수 있는지 또는 파일을 삽입하기 위해 이미지를 삽입하는 다른 방법이 있는지 알고 싶습니다.

또한

, 참고로, 나는 XSSFWorkbook, XSSFSheet를 사용하여, 그러한 (안 HSSF), 내 출력 파일은 어떤 도움/제안에 감사드립니다 .xlsx

입니다 해요, 감사합니다!

+0

첫 번째 방법의 오류는 'patriarch','anchor' 또는'index'가 null이라는 것을 의미합니다. –

+0

@OutlawLemur 테스트 프린트를 추가하고 총 소유주가 null이라는 것을 알았습니다. 나는 첫 번째 줄에 축복을 창조했다. 어떻게 고칠 수 있는가? – sora0419

+0

'as HSSFPatriach'로 전송해야하나요? 메서드는 이미 해당 유형을 반환합니다. –

답변

1

방법 -2가 정상입니다. 하지만 마지막 줄에 pict.Resize();을 추가해야합니다.

byte[] data = File.ReadAllBytes("image.jpeg"); 
int picInd = newWorkbook.AddPicture(data, XSSFWorkbook.PICTURE_TYPE_JPEG); 
XSSFCreationHelper helper = newWorkbook.GetCreationHelper() as XSSFCreationHelper; 
XSSFDrawing drawing = newSheet.CreateDrawingPatriarch() as XSSFDrawing; 
XSSFClientAnchor anchor = helper.CreateClientAnchor() as XSSFClientAnchor; 
anchor.Col1 = 0; 
anchor.Row1 = 0; 
XSSFPicture pict = drawing.CreatePicture(anchor, picInd) as XSSFPicture; 
pict.Resize(); 
관련 문제