poi导出excel 并处理插入网络图片 范例 处理文件下载中文乱码

package com.inborn.inshop.controller.product;

import com.inborn.inshop.common.util.DateUtils;import com.inborn.inshop.model.Goods;import com.inborn.inshop.service.GoodsService;import com.inborn.inshop.vo.ProductExportVo;import org.apache.commons.lang3.StringUtils;import org.apache.poi.hssf.usermodel.*;import org.apache.poi.hssf.util.HSSFColor;import org.apache.poi.ss.usermodel.CellStyle;import org.apache.poi.ss.usermodel.CreationHelper;import org.apache.poi.ss.util.CellRangeAddress;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.math.BigInteger;import java.net.URL;import java.net.URLConnection;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;

/** * Created by Administrator on 2017/5/2 0002. */@Controller@RequestMapping(value = "/product")public class ProductExportController {    private static Logger logger = LoggerFactory.getLogger(ProductController.class);    @Resource    private GoodsService goodsService;    // 显示的导出表的标题    private String title="商品列表";    // 导出表的列名    private String[] rowName={"商品编号","商品图片","商品分类","商品品牌","商品描述","预估价值","鉴定价值","出售价格","寄卖方式","出售方式","当前状态","创建时间"};    /**     * 商品导出     * @param info     * @param catName     * @param brandCnName     */    @RequestMapping(value = "/exportList")    @ResponseBody    public void exportList(HttpServletRequest request,                           HttpServletResponse response, Goods info, String catName, String brandCnName) {        Map searchMap = new HashMap();

if (info.getId() != null) {            searchMap.put("id", info.getId());          // searchMap.put("id",Long.parseLong("132554300037214"));        }        if (StringUtils.isNotBlank(info.getGoodsName())) {            searchMap.put("goodsName", "%" + info.getGoodsName() + "%");        }        if (StringUtils.isNotBlank(info.getSellerDesc())) {            searchMap.put("sellerDesc", "%" + info.getSellerDesc() + "%");        }

if (info.getGoodsStatus() != null) {            searchMap.put("goodsStatus", info.getGoodsStatus());        }        if (StringUtils.isNotBlank(catName)) {            searchMap.put("catName", "%" + catName + "%");        }        if (StringUtils.isNotBlank(brandCnName)) {            searchMap.put("brandCnName", "%" + brandCnName + "%");        }        if (info.getConsignWay() != null) {            searchMap.put("consignWay", info.getConsignWay());        }

//  PageHelper.startPage(curPage, pageSize);        List<ProductExportVo> dataList = goodsService.querytProdListByMap2(searchMap);       // 使用流将数据导出        OutputStream out = null;        try {      // 防止中文乱码            String fileName= toUtf8String(DateUtils.dateToString(new Date(),"yyyy-MM-dd")+title+".xls");            String headStr = "attachment; filename="+fileName;                   // + new String((title+".xls").getBytes("utf-8"), "utf-8") + "\"";            response.setContentType("APPLICATION/OCTET-STREAM");            response.setHeader("Content-Disposition", headStr);            response.setCharacterEncoding("utf-8");            out = response.getOutputStream();            HSSFWorkbook workbook = new HSSFWorkbook(); // 创建工作簿对象            HSSFSheet sheet = workbook.createSheet(title); // 创建工作表            sheet.setColumnWidth(0, 20 * 256);            sheet.setColumnWidth(1, 30 * 256);            sheet.setColumnWidth(2, 25 * 256);            sheet.setColumnWidth(3, 25 * 256);            sheet.setColumnWidth(4, 50 * 256);            sheet.setColumnWidth(5, 25 * 256);            sheet.setColumnWidth(6, 25 * 256);            sheet.setColumnWidth(7, 25 * 256);            sheet.setColumnWidth(8, 25 * 256);            sheet.setColumnWidth(9, 25 * 256);            sheet.setColumnWidth(10, 25 * 256);            sheet.setColumnWidth(11, 30 * 256);            // 产生表格标题行           // HSSFRow rowm = sheet.createRow(0);           // HSSFCell cellTiltle = rowm.createCell(0);

// sheet样式定义【getColumnTopStyle()/getStyle()均为自定义方法 - 在下面 - 可扩展】            HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);// 获取列头样式对象            HSSFCellStyle style = this.getStyle(workbook); // 单元格样式对象            /*             * sheet.addMergedRegion(new             * CellRangeAddress(0,dataList.get(0).length-1 , 0,             * (rowName.length-1)));             */// 合并单元格//            sheet.addMergedRegion(new CellRangeAddress(0, 1, 0,11));// 列行//            cellTiltle.setCellStyle(style);//            cellTiltle.setCellValue(title);

// 定义所需列数            int columnNum = rowName.length;            HSSFRow hearderRow = sheet.createRow(0); // 在索引0的位置创建行(最顶端的行开始的第一行)            hearderRow.setHeight((short) (30 * 20));            // 将列头设置到sheet的单元格中            for (int n = 0; n < columnNum; n++) {                HSSFCell cellRowName = hearderRow.createCell(n); // 创建列头对应个数的单元格                cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING); // 设置列头单元格的数据类型                HSSFRichTextString text = new HSSFRichTextString(rowName[n]);                cellRowName.setCellValue(text); // 设置列头单元格的值                cellRowName.setCellStyle(columnTopStyle); // 设置列头单元格样式            }            // 将查询出的数据设置到sheet对应的单元格中            for (int i = 0; i < dataList.size(); i++) {                ProductExportVo  obj= (ProductExportVo)dataList.get(i);// 遍历每个对象                HSSFRow row = sheet.createRow(i + 1);// 创建所需的行数(从第二行开始写数据)                row.setHeight((short) (135 * 20));

String id=obj.getId()+"";                HSSFCell cell = row.createCell(0, HSSFCell.CELL_TYPE_STRING);                cell.setCellValue(id);                cell.setCellStyle(style); // 设置单元格样式                String imgeUrl=obj.getSquareImage();                if(StringUtils.isNotBlank(imgeUrl)){                    // 创建一个图片区域                   try {                       HSSFPatriarch patriarch = sheet.createDrawingPatriarch();                       HSSFClientAnchor anchor;                       // 加载图片                       anchor = new HSSFClientAnchor(0, 0, 1023, 255, (short) 1,i+1, (short) 1, i+1);                       anchor.setAnchorType(0);                       patriarch.createPicture(anchor, loadPicture(imgeUrl, workbook));                   }catch (Exception e){                       logger.info("下载图片资源失败"+e.toString());                   }                }else{                    cell = row.createCell(1, HSSFCell.CELL_TYPE_STRING);                    cell.setCellValue(imgeUrl);                    cell.setCellStyle(style); // 设置单元格样式                }

cell = row.createCell(2, HSSFCell.CELL_TYPE_STRING);                cell.setCellStyle(style); // 设置单元格样式                if(StringUtils.isNotBlank(obj.getCatName())){                    String catNameValue=obj.getCatName();                    cell.setCellValue(catNameValue);                }

cell = row.createCell(3, HSSFCell.CELL_TYPE_STRING);                cell.setCellStyle(style); // 设置单元格样式                if(StringUtils.isNotBlank(obj.getBrandCnName())){                    String brandCnNameValue=obj.getBrandCnName();                    cell.setCellValue(brandCnNameValue);                }

cell = row.createCell(4, HSSFCell.CELL_TYPE_STRING);                cell.setCellStyle(style); // 设置单元格样式                if(StringUtils.isNotBlank(obj.getSellerDesc())){                    String sellerDescValue=obj.getSellerDesc();                    cell.setCellValue(sellerDescValue);                }

cell = row.createCell(5, HSSFCell.CELL_TYPE_NUMERIC);                cell.setCellStyle(style); // 设置单元格样式                if(obj.getEstimateMallPrice()!=null){                    HSSFCellStyle cellStyle =this.getColumnTopStyle(workbook);                   Long estimateMallPriceValue=obj.getEstimateMallPrice();                    HSSFDataFormat format= workbook.createDataFormat();                    cellStyle.setDataFormat(format.getFormat("¥#,##0"));                    cell.setCellValue(estimateMallPriceValue);                    cell.setCellStyle(cellStyle); // 设置单元格样式               }

cell = row.createCell(6, HSSFCell.CELL_TYPE_NUMERIC);                cell.setCellStyle(style); // 设置单元格样式               if(obj.getMktPrice()!=null){                   Long mktPriceValue=obj.getMktPrice();                   HSSFCellStyle cellStyle =this.getColumnTopStyle(workbook);                   HSSFDataFormat format= workbook.createDataFormat();                   cellStyle.setDataFormat(format.getFormat("¥#,##0"));                   cell.setCellValue(mktPriceValue);                   cell.setCellStyle(cellStyle); // 设置单元格样式                }

cell = row.createCell(7, HSSFCell.CELL_TYPE_NUMERIC);                cell.setCellStyle(style); // 设置单元格样式                if(obj.getMallPrice()!=null){                    Long mallPriceValue=obj.getMallPrice();                    HSSFCellStyle cellStyle =this.getColumnTopStyle(workbook);                    HSSFDataFormat format= workbook.createDataFormat();                    cellStyle.setDataFormat(format.getFormat("¥#,##0"));                    cell.setCellValue(mallPriceValue);                    cell.setCellStyle(cellStyle); // 设置单元格样式                }

cell = row.createCell(8, HSSFCell.CELL_TYPE_STRING);                cell.setCellStyle(style); // 设置单元格样式                if(obj.getConsignWay()!=null){                    Integer consignWayValue=obj.getConsignWay();                    if(consignWayValue==1){                        cell.setCellValue("平台自营");                    }                    if(consignWayValue==2){                        cell.setCellValue("邮寄");                    }                    if(consignWayValue==3){                        cell.setCellValue("非邮寄");                    }                }                cell = row.createCell(9, HSSFCell.CELL_TYPE_STRING);                cell.setCellStyle(style); // 设置单元格样式                if(obj.getActivityType()!=null){                    Integer activityTypeValue=obj.getActivityType();

if(activityTypeValue==0){                        cell.setCellValue("一口价");                    }                    if(activityTypeValue==1){                        cell.setCellValue("限时抢购");                    }                    if(activityTypeValue==2){                        cell.setCellValue("寄拍");                    }

}

cell = row.createCell(10, HSSFCell.CELL_TYPE_STRING);                cell.setCellStyle(style); // 设置单元格样式                if(obj.getGoodsStatus()!=null){                    Integer goodsStatusValue=obj.getGoodsStatus();                    if(goodsStatusValue==1){                        cell.setCellValue("不符合");                    }                    if(goodsStatusValue==10){                        cell.setCellValue("待审核");                    }                    if(goodsStatusValue==20){                        cell.setCellValue("待确认");                    }                    if(goodsStatusValue==30){                        cell.setCellValue("待付费");                    }                    if(goodsStatusValue==40){                        cell.setCellValue("待鉴定");                    }                    if(goodsStatusValue==50){                        cell.setCellValue("待上架");                    }                    if(goodsStatusValue==60){                        cell.setCellValue("出售中");                    }                    if(goodsStatusValue==70){                        cell.setCellValue("已出售");                    }                    if(goodsStatusValue==71){                        cell.setCellValue("线下售出");                    }                    if(goodsStatusValue==80){                        cell.setCellValue("已下架");                    }                    if(goodsStatusValue==90){                        cell.setCellValue("待退回");                    }                    if(goodsStatusValue==91){                        cell.setCellValue("退回中");                    }                    if(goodsStatusValue==92){                        cell.setCellValue("已退回");                    }                    if(goodsStatusValue==93){                        cell.setCellValue("已取消");                    }                }

cell = row.createCell(11);                cell.setCellStyle(style); // 设置单元格样式                if(obj.getCreateTime()!=null){                    Date createTimeValue=obj.getCreateTime();

// 给单元格 设置值                    cell.setCellValue(createTimeValue); // 第一行第一列 插入日期                    // 定义Cell格式                    HSSFCellStyle columnTopStyle2 = this.getColumnTopStyle(workbook);// 获取列头样式对象                    CreationHelper creationHelper = workbook.getCreationHelper();                    columnTopStyle2.setDataFormat(                            creationHelper.createDataFormat().getFormat("yyyy-MM-dd hh:mm:ss")                    );                    cell.setCellStyle(columnTopStyle2); // 设置单元格样式                }            }            if (workbook != null) {                try {                    workbook.write(out);                    out.flush();                } catch (IOException e) {                    logger.info(e.toString());                }            }

} catch (Exception e) {            logger.info(e.toString());        } finally {            if(out!=null){                try {                    out.close();                }catch (IOException e){                   logger.info(e.toString());                }            }        }    }    /*    * 列数据信息单元格样式    */    public HSSFCellStyle getStyle(HSSFWorkbook workbook) {        // 设置字体        HSSFFont font = workbook.createFont();        // 设置字体大小        // font.setFontHeightInPoints((short)10);        // 字体加粗        // font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);        // 设置字体名字        font.setFontName("Courier New");        // 设置样式;        HSSFCellStyle style = workbook.createCellStyle();        // 设置底边框;        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);        // 设置底边框颜色;        style.setBottomBorderColor(HSSFColor.BLACK.index);        // 设置左边框;        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);        // 设置左边框颜色;        style.setLeftBorderColor(HSSFColor.BLACK.index);        // 设置右边框;        style.setBorderRight(HSSFCellStyle.BORDER_THIN);        // 设置右边框颜色;        style.setRightBorderColor(HSSFColor.BLACK.index);        // 设置顶边框;        style.setBorderTop(HSSFCellStyle.BORDER_THIN);        // 设置顶边框颜色;        style.setTopBorderColor(HSSFColor.BLACK.index);        // 在样式用应用设置的字体;        style.setFont(font);        // 设置自动换行;        style.setWrapText(true);        // 设置水平对齐的样式为居中对齐;        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);        // 设置垂直对齐的样式为居中对齐;        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);        return style;    }

/*     * 列头单元格样式     */public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {

// 设置字体        HSSFFont font = workbook.createFont();        // 设置字体大小        font.setFontHeightInPoints((short) 11);        // 字体加粗        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);        // 设置字体名字        font.setFontName("Courier New");        // 设置样式;        HSSFCellStyle style = workbook.createCellStyle();        // 设置底边框;        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);        // 设置底边框颜色;        style.setBottomBorderColor(HSSFColor.BLACK.index);        // 设置左边框;        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);        // 设置左边框颜色;        style.setLeftBorderColor(HSSFColor.BLACK.index);        // 设置右边框;        style.setBorderRight(HSSFCellStyle.BORDER_THIN);        // 设置右边框颜色;        style.setRightBorderColor(HSSFColor.BLACK.index);        // 设置顶边框;        style.setBorderTop(HSSFCellStyle.BORDER_THIN);        // 设置顶边框颜色;        style.setTopBorderColor(HSSFColor.BLACK.index);        // 在样式用应用设置的字体;        style.setFont(font);        // 设置自动换行;        style.setWrapText(false);        // 设置水平对齐的样式为居中对齐;        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);        // 设置垂直对齐的样式为居中对齐;        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);        return style;        }

/**     *     * @param imageUrl     * @param wb     * @return     * @throws IOException     */    private static int loadPicture(String imageUrl, HSSFWorkbook wb) throws IOException {        int pictureIndex;        if(StringUtils.indexOf(imageUrl,"x-oss-process")<0){            imageUrl = imageUrl+"?x-oss-process=style/ss200";        }        URL url = new URL(imageUrl);        ByteArrayOutputStream bos = null;        try {            URLConnection conn = url.openConnection();            InputStream in = conn.getInputStream();            bos = new ByteArrayOutputStream();            int c;            while ((c = in.read()) != -1)                bos.write(c);            pictureIndex = wb.addPicture(bos.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG);        } finally {            if (bos != null)                bos.close();        }        return pictureIndex;    }    public static String toUtf8String(String s){        StringBuffer sb = new StringBuffer();        for (int i=0;i<s.length();i++){            char c = s.charAt(i);            if (c >= 0 && c <= 255){sb.append(c);}            else{                byte[] b;                try { b = Character.toString(c).getBytes("utf-8");}                catch (Exception ex) {                    System.out.println(ex);                    b = new byte[0];                }                for (int j = 0; j < b.length; j++) {                    int k = b[j];                    if (k < 0) k += 256;                    sb.append("%" + Integer.toHexString(k).toUpperCase());                }            }        }        return sb.toString();    }}

maven依赖包
<dependency>   <groupId>org.apache.poi</groupId>   <artifactId>poi</artifactId>   <version>3.9</version></dependency><dependency>   <groupId>org.apache.poi</groupId>   <artifactId>poi-ooxml</artifactId>   <version>3.9</version></dependency><dependency>   <groupId>org.apache.poi</groupId>   <artifactId>poi-ooxml-schemas</artifactId>   <version>3.9</version></dependency>

结果图:

				
时间: 2024-08-19 08:25:56

poi导出excel 并处理插入网络图片 范例 处理文件下载中文乱码的相关文章

poi导出excel

Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能,介绍poi导出excel功能实现案例,算比较常用的功能实现以及导出excel需要注意的地方,采用的是poi-3.8-20120326.jar,poi-ooxml-3.8-20120326.jar,poi-scratchpad-3.8-20120326.jar 输出表格 poi输出excel最基本是输

poi导出Excel与项目的结合-案例(包含图片的设置)

不管是xml的导入和导出还是Excel的导入和导出,对应的无非都是文件的解析和下载,下面来讲解的主要是导出(下载) 导入:上传--->解析并组装javaBean(javaBeanList)-->插入数据库(多数为数据库) 导出:查询需要下载的数据-->将JavaBean生成对应的文件(eg:xml.poi.json等)-->下载 poi导出--即下载poi 前台: 下载form表单提交(下载不可以采用ajax提交)(form表单提交查看常识题中form表单的几种提交方式,即给for

使用Apache POI导出Excel小结--导出XLS格式文档

使用Apache POI导出Excel小结 关于使用Apache POI导出Excel我大概会分三篇文章去写 使用Apache POI导出Excel小结--导出XLS格式文档 使用Apache POI导出Excel小结--导出XLSX格式文档 使用Apache POI导出Excel--大数量导出 导出XLS格式文档 做企业应用项目难免会有数据导出到Excel的需求,最近在使用其,并对导出Excel封装成工具类开放出来供大家参考.关于Apache POI Excel基本的概念与操作我在这里就不啰嗦

POI导出EXCEL经典实现

在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下.(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^) 呵呵,首先我们来导出EXCEL格式的文件吧.现在主流的操作Excel文件的开源工具有很多,用得比较多的就是Apache的POI及JExcelAPI.这里我们用Apache POI!我们先去Apach

POI导出EXCEL经典实现(转)

http://www.cnblogs.com/xwdreamer/archive/2011/07/20/2296975.html 1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 POI 的功能. 2.POI结构 HSSF - 提供读写Microsoft Excel XLS格式档案的功能.XS

JAVA关于POI导出Excel内存溢出的解决方案

JAVA关于POI导出Excel内存溢出的解决方案 在我们使用JAVA开发过程中,经常要导出查询获得的数据,这些数据一般情况下都是以Excel存储的,因此我们在导出数据的时候要使用JAVA的POI库,其主要是对各种windows平台的数据格式进行操作,在这里,我们是对Excel操作. 生成Excel的过程原理是这样的,首先,我们对数据库进行查询,获取相应的结果集,一般是list集合,然后生成Workbook对象,根据生成的Workbook对象获取sheet对象,根据此sheet对象获取Row对象

用POI导出excel时,较长的数字不想被自动变为科学计数法的解决方式(转)

做过很多次导出excel了.都碰到一个问题,内容里如果包含一个比较长的数字,比如订单号“2546541656596”,excel会自动变成科学计数法... 弄过好几次都没有解决,最近又要导出excel了,下决心一定要找到解决办法 自己在excel里测试过,较长的数字,都会自动变成科学计数法,除非我们把单元格格式设置成“文本型” 哈哈,似乎找到了思路:用poi先把单元格设置成“文本型”就可以了把. 从文档里找到了这个方法HSSFCell.setCellType(int type),怎么看这个方法都

Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下.(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^) 呵呵,首先我们来导出EXCEL格式的文件吧.现在主流的操作Excel文件的开源工具有很多,用得比较多的就是Apache的POI及JExcelAPI.这里我们用Apache POI!我们先去Apach

使用poi导出Excel

很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告.有时,一个应用程序甚至希望将Excel文件作为输入数据. 常见的java Excel  API Java Aspose Cells Java Aspose Cells 是一种纯粹的Java授权的Excel API,开发和供应商Aspose发布.这个API的最新版本是8.1.2,发布于2014年7月,是一个丰富而厚重的API(普通Java类和AWT类的组合)设计,可以读.写和操纵电子表格Excel的组件.此API常见用