您的位置:首页 > 其它

使用poi向excel中插入内容遇到的问题总结

2016-08-27 14:56 489 查看
1、如何插入图片?

在poi中有HSSFPatriarch对象,该对象为画图的顶级管理器,一个sheet只可以创建一个。它的createPicture(anchor,pictureIndex)方法可以在excel中插入一张图片。

具体代码我们可以封装成一个方法:

public static void setPicture(Workbook wb,HSSFPatriarch patriarch,String path, int iRowStart, int iColStart, int iRowStop, int iColStop){
File file = new File(path);
if(file.exists()){
ByteArrayOutputStream bos = new ByteArrayOutputStream();
//从文件中读取图片
BufferedImage bufferImage = ImageIO.read(file);
//以指定格式写入输出流
ImageIO.write(bufferImage,"jpg",bos);
//定义图片在excel中的位置,选取自己合适的位置坐标
HSSFClientAnchor anchor = new HSSFClientAnchor(20, 1, 1018, 0, (short) (iColStart), iRowStart, (short) (iColStop), iRowStop);
//加入图片
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
}
}


2、如何画线?

同样的,画线也是由HSSFPatriarch对象创建的,具体封装代码如下

public static void drawLine(Workbook wb,HSSFPatriarch patriarch,int iRowStart, int iColStart, int iRowStop, int iColStop){
//线的位置由这个类控制
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 350, 0, (short) (iColStart), iRowStart, (short) (iColStop), iRowStop);
HSSFSimpleShape lineShape = patriarch.createSimpleShape(anchor);
//画线
lineShape.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
}


3、 如何画矩形?

HSSFSheet sheet = workbook.createSheet("Test");// 创建工作表(Sheet)
HSSFPatriarch patriarch=sheet.createDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(255,122, 255, 122, (short)1, 0,(short)4, 3);
HSSFSimpleShape rec = patriarch.createSimpleShape(anchor);
rec.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
rec.setLineStyle(HSSFShape.LINESTYLE_DASHGEL);//设置边框样式
rec.setFillColor(255, 0, 0);//设置填充色
rec.setLineWidth(25400);//设置边框宽度
rec.setLineStyleColor(0, 0, 255);//设置边框颜色


4、如何设置单元格换行?

CellStyle cellstyle = wb.createCellStyle();
cellstyle.setWrapText(true);//true表示自动换行


5、如何进行数据格式化?

数据格式化要借助HSSFDataFormat这个类,当使用Excel内嵌的(或者说预定义)的格式时,直接用HSSFDataFormat.getBuiltinFormat静态方法即可。当使用自己定义的格式时,必须先调用HSSFDataFormat format= HSSFWorkbook.createDataFormat()。

HSSFSheet sheet = workbook.createSheet("Test");// 创建工作表(Sheet)
HSSFRow row=sheet.createRow(0);
//设置日期格式--使用Excel内嵌的格式
HSSFCell cell=row.createCell(0);
cell.setCellValue(new Date());
HSSFCellStyle style=workbook.createCellStyle();
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
cell.setCellStyle(style);
//设置保留2位小数--使用Excel内嵌的格式
cell=row.createCell(1);
cell.setCellValue(12.3456789);
style=workbook.createCellStyle();
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
cell.setCellStyle(style);
//设置货币格式--使用自定义的格式
cell=row.createCell(2);
cell.setCellValue(12345.6789);
style=workbook.createCellStyle();
style.setDataFormat(workbook.createDataFormat().getFormat("¥#,##0"));
cell.setCellStyle(style);
//设置百分比格式--使用自定义的格式
cell=row.createCell(3);
cell.setCellValue(0.123456789);
style=workbook.createCellStyle();
style.setDataFormat(workbook.createDataFormat().getFormat("0.00%"));
cell.setCellStyle(style);
//设置中文大写格式--使用自定义的格式
cell=row.createCell(4);
cell.setCellValue(12345);
style=workbook.createCellStyle();
style.setDataFormat(workbook.createDataFormat().getFormat("[DbNum2][$-804]0"));
cell.setCellStyle(style);
//设置科学计数法格式--使用自定义的格式
cell=row.createCell(5);
cell.setCellValue(12345);
style=workbook.createCellStyle();
style.setDataFormat(workbook.createDataFormat().getFormat("0.00E+00"));
cell.setCellStyle(style);


6、如何使用公式?

cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula("sum(A1,C1)");


7、单元格设置边框

注意单元格合并后,设置边框,并不会为其他的(未合并前)单元格设置边框,所以其他边框得自己手动补上

curStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 实线右边框
curStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 实线右边框
curStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 实线右边框
curStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 实线右边框


8、设置分页符

sheet.setRowBreak(开始行);

9、另外提供下载excel的方法:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
wb.write(bos);
DownloadUtil.download(bos, response, " XXX.xls");

//下载函数
public static void download(ByteArrayOutputStream byteArrayOutputStream, HttpServletResponse response, String returnName) throws IOException{
response.setContentType("application/octet-stream;charset=utf-8");
response.setHeader("Content-Disposition",   "attachment;filename=" + URLEncoder.encode(returnName, "UTF-8"));
response.setContentLength(byteArrayOutputStream.size());

ServletOutputStream outputstream = response.getOutputStream();  //取得输出流
byteArrayOutputStream.writeTo(outputstream);                    //写到输出流
byteArrayOutputStream.close();                                  //关闭
outputstream.flush();                                           //刷数据
}


10、提供网上一个牛人介绍poi博客地址,介绍的很详细:http://www.cnblogs.com/LiZhiW/p/4313789.html?utm_source=tuicool&utm_medium=referral
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poi excel