您的位置:首页 > 其它

解决使用NPOI在已有Sheet中插入多张图片问题

2012-04-11 11:35 465 查看
NPOI是操作Office的第三方组件,使用流方式,读写速度非常快。关于NPOI的更多认识,请见http://www.cnblogs.com/tonyqus/archive/2009/04/12/1434209.html
我在实践中遇到在Sheet中插入图片的问题,参考http://www.cnblogs.com/atao/archive/2009/09/28/1576044.html,可以向Sheet中插入图片,但是问题是Sheet必须是通过Workbook新创建的,在现有的Sheet上插入每次都没有成功。
现在场景要求:在现有的Excel模板中填写数据,并插入相应图片,当然模板是已存在的Sheet。经过N+1次的试验(N>=20)后,发现可以实现,并可以实现插入多图片。关键步骤在于:先将图片加入Workbook,然后再获取Sheet,否则添加的图片看不到。

//将图片加入Workbook
byte[] bytes = System.IO.File.ReadAllBytes(@"D:\MyProject\NPOIDemo\ShapeImage\image1.jpg");
int pictureIdx1 = hssfworkbook.AddPicture(bytes, HSSFWorkbook.PICTURE_TYPE_JPEG);

bytes = System.IO.File.ReadAllBytes(@"D:\MyProject\NPOIDemo\ShapeImage\image2.jpg");
int pictureIdx2 = hssfworkbook.AddPicture(bytes, HSSFWorkbook.PICTURE_TYPE_JPEG);

//获取存在的Sheet,必须在AddPicture之后
HSSFSheet sheet = hssfworkbook.GetSheet("Sheet1");
HSSFPatriarch patriarch = sheet.CreateDrawingPatriarch();

//插入图片
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 0, 0, 0, 1, 3);
HSSFPicture pict1 = patriarch.CreatePicture(anchor, pictureIdx1);

anchor = new HSSFClientAnchor(0, 0, 1023, 0, 10,10, 11, 13);
HSSFPicture pict2 = patriarch.CreatePicture(anchor, pictureIdx2);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: