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);