论坛首页 Java企业应用论坛

Apache POI向excel中插入图片

浏览 28700 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-01-11  
官方文档:
      Images are part of the drawing support. To add an image just call createPicture() on the drawing patriarch. At the time of writing the following types are supported:
PNG
JPG
DIB
It is not currently possible to read existing images and it should be noted that any existing drawings may be erased once you add a image to a sheet.

// Create the drawing patriarch. This is the top level container for
// all shapes. This will clear out any existing shapes for that sheet.
     
       poi 3.0以上是支持在excel中生成三种格式的图片:PNG JPG DIB 。通过HSSFPatriarch类createPicture方法的在指定的wb中的sheet创建图片,它接受二个参数,第一个是HSSFClientAnchor,设定图片的大小( 注:由于图形的大小是用pixel计算的,而HSSFClientAnchor中长宽用的是cell中的row和column构成. 通过HSSFClientAnchor.setAnchorType(int type) )。第二个参数是要插入的图片。
  HSSFPatriarch patriarch = sheet.createDrawingPatriarch();; 
  patriarch.createPicture(anchor,  HSSFPicture););; 
   发表时间:2006-01-11  
一个例子的主要代码:

//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
      ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();;
      BufferedImage bufferImg = ImageIO.read(new File("ok.jpg"););;
      ImageIO.write(bufferImg,"jpg",byteArrayOut);;

//读进一个excel模版
FileInputStream fos = new FileInputStream(filePathName+"/stencil.xlt");; 
fs = new POIFSFileSystem(fos);;
//创建一个工作薄
HSSFWorkbook wb = new HSSFWorkbook(fs);;
HSSFSheet sheet = wb.getSheetAt(0);;
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();;
HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short); 0,0,(short);10,10);;     
patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray();,HSSFWorkbook.PICTURE_TYPE_JPEG););;
0 请登录后投票
   发表时间:2006-01-11  
好,楼主多发一些使用POI的经验。期待中。。。。。。
0 请登录后投票
   发表时间:2006-01-11  
sendliu 写道
好,楼主多发一些使用POI的经验。期待中。。。。。。


     呵呵,其实apache的文档是最详细的! 遇到什么问题到官方的doc搜一下,基本有例子的!
0 请登录后投票
   发表时间:2006-01-11  
poi hssf是怎么固定excel某行(不滚动)?
0 请登录后投票
   发表时间:2006-01-12  
alin_ass 写道
poi hssf是怎么固定excel某行(不滚动)?


用HSSFSheet.createSplitPane(int colSplit, int rowSplit, int leftmostColumn, int topRow)
0 请登录后投票
   发表时间:2006-02-11  
借个地方问点问题!

是否可以设置默认的编码呢?因为要显示中文,我每个cell都要设置它的encoding,好麻烦啊
还有sheet也是一样..........

还有字体,是否可以设置整个文档的默认字体?

谢谢
0 请登录后投票
   发表时间:2006-02-14  
Morgan0916 写道
借个地方问点问题!

是否可以设置默认的编码呢?因为要显示中文,我每个cell都要设置它的encoding,好麻烦啊
还有sheet也是一样..........

还有字体,是否可以设置整个文档的默认字体?

谢谢


设置文档的默认字体:
HSSFFont font = new HSSFWorkbook();.createFont();;
font.setFontHeightInPoints((short);24);;
font.setFontName("宋体");;
font.setItalic(true);;

// Fonts are set into a style so create a new one to use.
    HSSFCellStyle style = wb.createCellStyle();;
    style.setFont(font);;
for(...);{
 cell.setCellStyle(style);;
}


     你创建了默认字体还是要设置到每个新建的cell中。另外POI创建工作表的默认编码是ENCODING_COMPRESSED_UNICODE(0)。显示中文要设置为ENCODING_UTF_16 (1); 其实你的
cell.setEncoding(HSSFCell.ENCODING_UTF_16);;
放在创建cell的循环中只需写一次,何来麻烦? 字体也一样!因为POI创建工作本时并不知我们有多少row,每行有多少cell.可能我们某个cell是要显示日期格式或货币的,这样创建这个cell时还要设置它的dataformat.....
0 请登录后投票
   发表时间:2006-02-14  
现在POI 3.0还是alpha 1?还是05年7月发布的?
0 请登录后投票
   发表时间:2006-02-15  
YuLimin 写道
alin_ass 写道
poi hssf是怎么固定excel某行(不滚动)?


用HSSFSheet.createSplitPane(int colSplit, int rowSplit, int leftmostColumn, int topRow)



这个是分割工作表啊...我问的是如何固定title行
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics