论坛首页 Java企业应用论坛

Apache POI向excel中插入图片

浏览 28701 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-02-16  
强烈建议参考一下jXLS,POI搭配jXLS(excel的模板引擎),会达到事半功倍的效果。

1、先写模板,什么chart啊,style啊,锁定啊,等等等等,都先在模板中做好了,填充数据的地方就用expression占位。

2、准备数据。

3、渲染模板。
0 请登录后投票
   发表时间:2006-02-17  
alin_ass 写道
YuLimin 写道
alin_ass 写道
poi hssf是怎么固定excel某行(不滚动)?


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



这个是分割工作表啊...我问的是如何固定title行


Sorry,拷贝错误代码了:(

应当是:
HSSFSheet.createFreezePane(int colSplit, int rowSplit, int leftmostColumn, int topRow)

or

HSSFSheet.createFreezePane(int colSplit, int rowSplit)
0 请登录后投票
   发表时间:2006-02-17  
flyjie 写道
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-23  
public HSSFClientAnchor(int dx1,
                        int dy1,
                        int dx2,
                        int dy2,
                        short col1,
                        int row1,
                        short col2,
                        int row2);Creates a new client anchor and sets the top-left and bottom-right coordinates of the anchor. 

Parameters:
dx1 - the x coordinate within the first cell.
dy1 - the y coordinate within the first cell.
dx2 - the x coordinate within the second cell.
dy2 - the y coordinate within the second cell.
col1 - the column (0 based); of the first cell.
row1 - the row (0 based); of the first cell.
col2 - the column (0 based); of the second cell.
row2 - the row (0 based); of the second cell.


能不能解释下这些参数的意思。 我现在不知道怎么把一张图片放到特定的位置。

javadoc也不明白他说什么。 能举例说下就更好。 我不想一个参数一个参数去试呀。
0 请登录后投票
   发表时间:2006-02-23  
试了几次 知道了

col1 图片的左上角放在第几个列cell,
row1 图片的左上角放在第几个行cell,

col2 图片的右下角放在第几个列cell,
row2 图片的右下角放在第几个行cell,
可是我往一个sheet里面加 多个图片时  好像只有一张图片能被插入。




引用
// Create the drawing patriarch.  This is the top level container for
    // all shapes. This will clear out any existing shapes for that sheet.


这是Quick Guide 上面说的  难道不能添加多个图片么?
0 请登录后投票
   发表时间:2006-02-27  
dengyin2000 写道
试了几次 知道了

col1 图片的左上角放在第几个列cell,
row1 图片的左上角放在第几个行cell,

col2 图片的右下角放在第几个列cell,
row2 图片的右下角放在第几个行cell,
可是我往一个sheet里面加 多个图片时  好像只有一张图片能被插入。




引用
// Create the drawing patriarch.  This is the top level container for
    // all shapes. This will clear out any existing shapes for that sheet.


这是Quick Guide 上面说的  难道不能添加多个图片么?


&nbsp&nbsp&nbsp一个sheep是可以插入多个图片的,看以下代码:

public class TestPOI {

	public static void main(String[] args); {
		 FileOutputStream fileOut = null;
		 BufferedImage bufferImg =null;
		 BufferedImage bufferImg1 = null;
		try{
	      ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();; 
	      ByteArrayOutputStream byteArrayOut1 = new ByteArrayOutputStream();;
	      bufferImg = ImageIO.read(new File("d:/ok.jpeg"););; 
	      bufferImg1 = ImageIO.read(new File("d:/ok1.jpeg"););;
	      ImageIO.write(bufferImg,"jpeg",byteArrayOut);;
	      ImageIO.write(bufferImg1,"jpeg",byteArrayOut1);;
	      
	      
	HSSFWorkbook wb = new HSSFWorkbook();; 
    HSSFSheet sheet1 = wb.createSheet("new sheet");;
    //HSSFRow row = sheet1.createRow(2);;
    HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();;
    HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,512,255,(short); 0,0,(short);10,10);;
    HSSFClientAnchor anchor1 = new HSSFClientAnchor(0,0,512,255,(short); 0,15,(short);10,20);;
    patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray();,HSSFWorkbook.PICTURE_TYPE_JPEG););; 
    patriarch.createPicture(anchor1 , wb.addPicture(byteArrayOut1.toByteArray();,HSSFWorkbook.PICTURE_TYPE_JPEG););; 
    
    fileOut = new FileOutputStream("d:/workbook.xls");;
    wb.write(fileOut);;
    fileOut.close();;

	}catch(IOException io);{
		io.printStackTrace();;
		System.out.println("io erorr :  "+ io.getMessage(););;
	} finally
    {
        if (fileOut != null);
			try {
				fileOut.close();;
			} catch (IOException e); {
				// TODO Auto-generated catch block
				e.printStackTrace();;
			}
    }
}
0 请登录后投票
   发表时间:2006-02-27  
you are right.

我是create了多个DrawingPatriarch  (sheet1.createDrawingPatriarch();)

那个document上面说的是createDrawingPatriarch的时候会This will clear out any existing shapes for that sheet. 吧。

多个pic应该share同一个DrawingPatriarch在同一个sheet里面。
0 请登录后投票
   发表时间:2006-09-04  
借楼主地问一下,如何设置cell的长和宽,或都最好能根据数据动态设置。
0 请登录后投票
   发表时间:2006-10-25  
列宽
sheet.setColumnWidth((short)column,(short)width);
行高
row.setHeight((short)height);
0 请登录后投票
   发表时间:2007-09-16  
HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short) 0,0,(short)10,10);   
图片放进去变形了有谁给讲讲
dx1 - the x coordinate within the first cell.  
dy1 - the y coordinate within the first cell.  
dx2 - the x coordinate within the second cell.  
dy2 - the y coordinate within the second cell.
这几个参数如何设
0 请登录后投票
论坛首页 Java企业应用版

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