POI导出Excel 含一维码图片

代码如下:

/**
     * 创建excel
     * @return 
     * @throws InvalidAtributeException 
     * @throws IOException 
     * @see
     */
    private InputStream createExcel(List<Dealer> dealerList)
        throws IOException, InvalidAtributeException
    {
        //创建Excel工作簿对象
        HSSFWorkbook wb = new HSSFWorkbook();

        //创建Excel工作表
        HSSFSheet sheet = wb.createSheet("sheet1");

        //设置列宽
        sheet.setColumnWidth(0, 25 * 256);
        sheet.setColumnWidth(1, 10 * 256);
        sheet.setColumnWidth(2, 15 * 256);
        sheet.setColumnWidth(3, 13 * 3 * 256);

        //单元格样式
        HSSFCellStyle wrapTextAlignLeft = wb.createCellStyle();
        wrapTextAlignLeft.setAlignment(HSSFCellStyle.ALIGN_LEFT);
        wrapTextAlignLeft.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        wrapTextAlignLeft.setWrapText(true);

        //单元格样式
        HSSFCellStyle wrapTextAlignCenter = wb.createCellStyle();
        wrapTextAlignCenter.setWrapText(true);
        wrapTextAlignCenter.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        wrapTextAlignCenter.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

        //单元格图片处理对象
        HSSFPatriarch patriarch;

        //单元格图片锚点
        HSSFClientAnchor barcodeAnchor;

        int rowNum = 0;

        //创建标题行
        HSSFRow dataRow = sheet.createRow(rowNum);
        dataRow.setHeight((short)(2 * 255));
        HSSFCell nameCell = dataRow.createCell(0);
        nameCell.setCellStyle(wrapTextAlignCenter);
        nameCell.setCellType(HSSFCell.CELL_TYPE_STRING);
        nameCell.setCellValue("经销商名称");

        HSSFCell codeCell = dataRow.createCell(1);
        codeCell.setCellStyle(wrapTextAlignCenter);
        codeCell.setCellType(HSSFCell.CELL_TYPE_STRING);
        codeCell.setCellValue("经销商编号");

        HSSFCell areaCell = dataRow.createCell(2);
        areaCell.setCellStyle(wrapTextAlignCenter);
        areaCell.setCellType(HSSFCell.CELL_TYPE_STRING);
        areaCell.setCellValue("区域");

        HSSFCell barcodeCell = dataRow.createCell(3);
        barcodeCell.setCellStyle(wrapTextAlignCenter);
        barcodeCell.setCellType(HSSFCell.CELL_TYPE_STRING);
        barcodeCell.setCellValue("一维码");

        rowNum++ ;

        //一维码对象初始化
        JBarcode barcode = new JBarcode(Code39Encoder.getInstance(),
            WideRatioCodedPainter.getInstance(), BaseLineTextPainter.getInstance());

        //不需要校验位
        barcode.setCheckDigit(false);

        //一维码图片宽度
        barcode.setXDimension(0.26458333299999998D * 2.2);

        //一维码图片高度
        barcode.setBarHeight(0.26458333299999998D * 120);

        //一维码图片对象
        BufferedImage barcodeImage;

        //一维码图片字节流
        ByteArrayOutputStream barcodeByteArray;

        String tempAreaName;

        //POI图片操作对象
        patriarch = sheet.createDrawingPatriarch();

        for (Dealer tempDealer : dealerList)
        {

            //创建行
            dataRow = sheet.createRow(rowNum);

            //设置行高
            dataRow.setHeight((short)(7.5 * 255));

            //初始化区域
            tempAreaName = "";

            //名称单元格
            nameCell = dataRow.createCell(0);
            nameCell.setCellStyle(wrapTextAlignCenter);
            nameCell.setCellType(HSSFCell.CELL_TYPE_STRING);
            nameCell.setCellValue(tempDealer.getDealerName());

            //编码单元格
            codeCell = dataRow.createCell(1);
            codeCell.setCellStyle(wrapTextAlignCenter);
            codeCell.setCellType(HSSFCell.CELL_TYPE_STRING);
            codeCell.setCellValue(tempDealer.getDealerCode());

            //区域单元格
            areaCell = dataRow.createCell(2);
            areaCell.setCellStyle(wrapTextAlignCenter);
            areaCell.setCellType(HSSFCell.CELL_TYPE_STRING);
            tempAreaName = DBCommon.getAreaAndParentString(tempDealer.getAreaId());
            areaCell.setCellValue(tempAreaName);

            //一维码单元格
            barcodeCell = dataRow.createCell(3);

            //初始化图片锚点
            barcodeAnchor = new HSSFClientAnchor(10, 10, 1013, 245, (short)3, rowNum, (short)3,
                rowNum);

            //图片锚点样式
            barcodeAnchor.setAnchorType(HSSFClientAnchor.DONT_MOVE_AND_RESIZE);

            //一维码图片初始化
            barcodeImage = barcode.createBarcode(tempDealer.getDealerCode());

            //初始化图片字节流
            barcodeByteArray = new ByteArrayOutputStream();

            //图片对象写入字节流
            ImageUtil.encodeAndWrite(barcodeImage, ImageUtil.JPEG, barcodeByteArray, 96, 96);
            
            barcodeByteArray.close();

            //添加图片字节流到Excel
            patriarch.createPicture(barcodeAnchor,
                wb.addPicture(barcodeByteArray.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));

            //行数自增
            rowNum++ ;

        }

        //excel输出流
        ByteArrayOutputStream excelByteArrayOutputStream = new ByteArrayOutputStream();

        //excel对象写入输出流
        wb.write(excelByteArrayOutputStream);
        
        return new ByteArrayInputStream(excelByteArrayOutputStream.toByteArray());
    }
    public static String getAreaAndParentString(String areaId)
    {
        Connection con = null;
        Statement pstmt = null;
        ResultSet rs = null;
        String area = "";

        try
        {
            con = DBManager.getDBConnection();
            pstmt = con.createStatement();           
            rs = pstmt.executeQuery("select t.area_name from tqs_area_info t start with t.area_id="
                                    + areaId
                                    + " connect by t.area_id= prior t.parent_id order by t.area_id");


            while (rs.next())
            {
                area += rs.getString(1);
            }


            rs.close();
        }
        catch (Exception e)
        {
            logger.error(e.getMessage());
        }
        finally
        {
            try
            {
                if (pstmt != null)
                {
                    pstmt.close();
                }
                if (con != null)
                {
                    con.close();
                }
            }
            catch (SQLException ex)
            {
                logger.error(ex.getMessage());
            }
        }


        return area;
    }
该工具为个人整理修改的常用工具类,maven结构,Java语言编写详细依赖间pom文件,如有冲突自行修改, 包括条形操作工具、二维操作、图片验证工具、动态密工具、雪花算法id工具、签名工具、poi导出、json转换、文件操作、分页、日期处理、jdbc、大数运算及格式化、gzip压缩、http 结构说明如下: datasourceconfig:多数据源使用配置包 对数据源配置.txt:配置说明文件 function:功能代及工具类 delayqueue:java自带延迟对了使用包 DelayMsg:延迟消息实体 DelayMsgHandler:延迟消息处理工具 paramvalid:空参检查包 CommonUtil:空参检查工具类 ParamNotNull:参数注解 RegistParam:参数实体 RequestMsg:公共参数实体 pdf:pdf导出工具包,包4个导出工具类,具体使用根据导出结果确定 websocket:服务端websockt配置包,比较简单,具体使用需自行扩充 ActiveMqUtil:ActiveMq操作工具类 BarCodeUtil:条形操作工具类,包括生成和读取 CorsConfig:服务端防止跨域请求公共设置 DateUtil:时间处理工具类 DBConnection:jdbc工具类 FileOperater:文件处理工具类 包括 读取文本文件,写出文本文件, 大文件切分,文件下载,文件或文件夹比较,文件或文件夹遍历筛选 ...... HttpClientCard:http工具类 HttpUtil:http工具类 Identification:id生成工具类,包括 UUID luhn算法id(适用于有序的流水号) ImgUtil:图片相似度计算工具 ItvJsonUtil:基于fastjson的json工具类 JsonUtility:基于jackjson的接送工具类 MailUtil:邮件工具类,包括发送纯文本邮件,带(1个/多个)附件的邮件, 群发邮件 NumberUtil:数字操作工具 包括精准数字运算,数据格式化 PageUtil:分页工具类, POIUtil:poi工具类,excel导出 QrCodeUtil:二维操作工具, 包括生成和读取 ShellUtil:shell命令操作工具,包括linux登陆,命令执行...... 较为简单,具体需要自行扩充 SignUtil:签名工具,包括MD5 位运算 AES BASE64 SnowflakeIdWorker:ID生成工具 雪花算法 SocketUtil:socket测试工具 TotpAuthUtil:动态密工具 包括生成和校验 VerifyCodeUtil:图片验证生成工具 ZipUtils:gzip压缩工具
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值