JAVA导出Excel

来源:互联网 发布:给自己口 淘宝 编辑:程序博客网 时间:2024/06/06 01:05

1.Java导出excel工具类,主要提供一些创建单元格,设置单元格样式和向excel中插入图片的方法 

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;


import javax.imageio.ImageIO;


import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  
public class ExcelUtil{  
    private XSSFWorkbook wb = null;  
  
    private XSSFSheet sheet = null;  
  
    /** 
     * @param wb 
     * @param sheet 
     */  
    public ExcelUtil(XSSFWorkbook wb, XSSFSheet sheet)  
    {  
        this.wb = wb;  
        this.sheet = sheet;  
    }  
  
    /** 
     * 合并单元格后给合并后的单元格加边框 
     *  
     * @param region 
     * @param cs 
     */  
    public void setRegionStyle(CellRangeAddress region, XSSFCellStyle cs)  
    {  
  
        int toprowNum = region.getFirstRow();  
        for (int i = toprowNum; i <= region.getLastRow(); i++)  
        {  
            XSSFRow row = sheet.getRow(i);  
            for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++)  
            {  
                XSSFCell cell = row.getCell(j);// XSSFCellUtil.getCell(row,  
                                                // (short) j);  
                cell.setCellStyle(cs);  
            }  
        }  
    }  
  
    /** 
     * 设置表头的单元格样式 
     *  
     * @return 
     */  
    public XSSFCellStyle getHeadStyle()  
    {  
        // 创建单元格样式  
        XSSFCellStyle cellStyle = wb.createCellStyle();  
        // 设置单元格的背景颜色为淡蓝色  
        cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index);  
        cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);  
        // 设置单元格居中对齐  
        cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);  
        // 设置单元格垂直居中对齐  
        cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);  
        // 创建单元格内容显示不下时自动换行  
        cellStyle.setWrapText(true);  
        // 设置单元格字体样式  
        XSSFFont font = wb.createFont();  
        // 设置字体加粗  
        //font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);  
        font.setFontName("冬青黑体简");  
        font.setFontHeight((short) 300);  
        cellStyle.setFont(font);  
        // 设置单元格边框为细线条  
        cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);  
        cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);  
        cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);  
        cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);  
        return cellStyle;  
    }  
  
    /** 
     * 设置表体的单元格样式 
     *  
     * @return 
     */  
    public XSSFCellStyle getBodyStyle()  
    {  
        // 创建单元格样式  
        XSSFCellStyle cellStyle = wb.createCellStyle();  
        // 设置单元格居中对齐  
        cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);  
        // 设置单元格垂直居中对齐  
        cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);  
        // 创建单元格内容显示不下时自动换行  
        cellStyle.setWrapText(true);  
        // 设置单元格字体样式  
        XSSFFont font = wb.createFont();  
        // 设置字体加粗  
        //font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);  
        font.setFontName("冬青黑体简");  
        font.setFontHeight((short) 300);  
        cellStyle.setFont(font);  
        // 设置单元格边框为细线条  
        cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);  
        cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);  
        cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);  
        cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);  
        return cellStyle;  
    }
    
    /**
     * 样式设置
     * @param fontSize字体的大小
     * @param flag是否拥有边框
     * @param align对其方式
     * @param fontType字体类型
     * @param isBold是否加粗
     * @return
     *  创建时间 2015-6-23 上午8:49:12
     *  @auther lp
     */
    public XSSFCellStyle getStyle(int fontSize,boolean flag,String align,String fontType,boolean isBold)  
    {  
        // 创建单元格样式  
        XSSFCellStyle cellStyle = wb.createCellStyle();
        //设置单元格水平对齐方式
        if("left".equals(align)){
        cellStyle.setAlignment(XSSFCellStyle.ALIGN_LEFT);
        }else if("right".equals(align)){
        cellStyle.setAlignment(XSSFCellStyle.ALIGN_RIGHT);
        }else if("center".equals(align)){
        cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
        }else if("vertical".equals(align)){
        cellStyle.setAlignment(XSSFCellStyle.VERTICAL_CENTER);
        }
        
        // 设置单元格垂直居中对齐  
        cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);  
        // 创建单元格内容显示不下时自动换行  
        cellStyle.setWrapText(true);
        // 设置单元格字体样式  
        XSSFFont font = wb.createFont();  
        // 设置字体加粗  
        //font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
        if("微软雅黑".equals(fontType)){
        font.setFontName("微软雅黑");
        }else{
        font.setFontName("宋体");
        }
        if(isBold){
        font.setBold(true);
        }
        font.setFontHeight((short) fontSize); 
        cellStyle.setFont(font); 
        if(flag){
        // 设置单元格边框为细线条  
            cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);  
            cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);  
            cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);  
            cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);
        }
        return cellStyle;  
    }
    
    /**
     * 样式设置
     * @param fontSize字体的大小
     * @param flag是否拥有边框
     * @param align对其方式
     * @param isRed是否为红色
     * @return
     *  创建时间 2015-6-23 上午8:49:12
     *  @auther lp
     */
    public XSSFCellStyle getStyle(int fontSize,boolean flag,String align,boolean isRed,boolean isBlue)  
    {  
        // 创建单元格样式  
        XSSFCellStyle cellStyle = wb.createCellStyle();
        //设置单元格水平对齐方式
        if("left".equals(align)){
        cellStyle.setAlignment(XSSFCellStyle.ALIGN_LEFT);
        }else if("right".equals(align)){
        cellStyle.setAlignment(XSSFCellStyle.ALIGN_RIGHT);
        }else if("center".equals(align)){
        cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
        }else if("vertical".equals(align)){
        cellStyle.setAlignment(XSSFCellStyle.VERTICAL_TOP);
        }
          
        // 设置单元格垂直居中对齐  
        cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);  
        // 创建单元格内容显示不下时自动换行  
        cellStyle.setWrapText(true);  
        // 设置单元格字体样式  
        XSSFFont font = wb.createFont();  
        // 设置字体加粗  
        //font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);  
        font.setFontName("冬青黑体简");
        font.setFontHeight((short) fontSize);
        if(isRed){
        font.setColor(new XSSFColor(Color.red));
        }
        if(isBlue){
        font.setColor(new XSSFColor(Color.blue));
        }
        cellStyle.setFont(font); 
        if(flag){
        // 设置单元格边框为细线条  
            cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);  
            cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);  
            cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);  
            cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);
        }
        return cellStyle;  
    }
    
    /**
     * 创建图片
     * @param filePath图片的路径
     * @param dx1第一个坐标的x轴
     * @param dy1第一个坐标的y轴
     * @param dx2第二个坐标的x轴
     * @param dy1第二个坐标的y轴
     * @param col1第一列
     * @param row1第一行
     * @param col2第二列
     * @param row2第二行
     *  创建时间 2015-6-24 上午8:53:11
     *  @auther lp
     */
    public void createImg(String filePath,int dx1,int dy1,int dx2,int dy2,int col1,int row1,int col2,int row2){
        BufferedImage bufferImg = null;
        ByteArrayOutputStream byteArrayOut = null;
       //先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
       try {
           byteArrayOut = new ByteArrayOutputStream();
           bufferImg = ImageIO.read(new File(filePath));
           ImageIO.write(bufferImg, "jpg", byteArrayOut);
            
           //画图的顶级管理器,一个sheet只能获取一个(一定要注意这点)
           XSSFDrawing patriarch = sheet.createDrawingPatriarch();
           //anchor主要用于设置图片的属性(指定图片所在的位置)
           XSSFClientAnchor anchor = new XSSFClientAnchor(dx1, dy1, dx2, dy2,(short) col1, row1, (short) col2, row2);
           anchor.setAnchorType(3);
           //插入图片
           patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG));
       } catch (Exception e) {
           e.printStackTrace();
       }finally{
      if(null != byteArrayOut){
      try {
byteArrayOut.close();
  } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
  }
      }
       
       }
    }
}  


2.region = new CellRangeAddress(rowCount, rowCount, 1, 2);
            sheet.addMergedRegion(region);

此方法用作,合并单元格,

3. sheet.setColumnWidth(0, 60 * 50);
            sheet.setColumnWidth(1, 60 * 100);
            sheet.setColumnWidth(2, 50 * 80);
            sheet.setColumnWidth(3, 60 * 50);
            sheet.setColumnWidth(4, 60 * 40);
            sheet.setColumnWidth(5, 0 * 20);
            sheet.setColumnWidth(6, 50 * 80);
            sheet.setColumnWidth(7, 50 * 80);
            sheet.setColumnWidth(8, 25 * 30);

此方法为工作簿的列设置宽度,第一个参数为工作簿列所在的索引,第二个为设置的宽度的值。

4.headRow.setHeight((short)600);

此方法给工作簿的行设置高度。

5./**
             * 设置文件名称
             */
            String fileName = "";
            try {
    fileName = new String((orderCode + saleMan).getBytes("UTF-8"), "ISO-8859-1");
    } catch (UnsupportedEncodingException e1) {
    e1.printStackTrace();
    }
            
            response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xls");// 组装附件名称和格式

此方法用来设置excel文件导出的名字和导出的格式。

6.//指定文件的保存类型
response.setContentType("application/vnd.ms-excel;charset=utf-8");

用来指定导出文件的类型

0 0