您的位置:首页 > 编程语言 > Java开发

java POI导出excel(带有图片的数据)以及ftp上传图片到另一台服务器的方法参考代码

2016-01-28 16:17 856 查看
这几天在做一个艺术品展示的系统,里面需要做艺术品的数据导出其中就要求做带有图片的导出,因为是初次接触poi且带有图片的数据导出,参考了网上的一些资料自己写了出来,特此记录以备后用,同时也希望跟我一样初次接触带有图片的数据导出的程序猿提供一些帮助,下面提供一些方法代码:

public class testPOIExport {

public void exportExcel(HttpServletRequest request, HttpServletResponse response) {

      response.setContentType("application/msexcel;charset=utf-8");
       
response.setHeader("Content-disposition", "attachment;filename=artResultList.xls");
OutputStream out = null;

String[] tableHeader = {"序号","缩略图", "编号", "作品名", "创作年份", "类别","材质", "尺寸"};

        
short cellNumber = (short) tableHeader.length;// 表的列数

HSSFWorkbook workbook = new HSSFWorkbook(); // 创建一个excel

HSSFCell cell = null; // Excel的列

HSSFRow row = null; // Excel的行

HSSFCellStyle style = workbook.createCellStyle(); // 设置表头的类型

style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

HSSFCellStyle style1 = workbook.createCellStyle(); // 设置数据类型

style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);

HSSFFont font = workbook.createFont(); // 设置字体

HSSFSheet sheet = workbook.createSheet("sheet1"); // 创建一个sheet

HSSFHeader header = sheet.getHeader();// 设置sheet的头

SearchResult<Map<String, Object>> result = eSManger.findResult(qc); 

List<Map<String, Object>> dataList = result.getDataList();//这个就是要导出的结果集合

try {

if (dataList.size() < 1) {
header.setCenter("查无数据");
} else {

header.setCenter("艺术品数据展示表");
row = sheet.createRow(0);
row.setHeight((short) 450);
for (int k = 0; k < cellNumber; k++) {
cell = row.createCell(k);// 创建第0行第k列
cell.setCellValue(tableHeader[k]);// 设置第0行第k列的值
sheet.setColumnWidth(k, 6000);// 设置列的宽度

font.setColor(HSSFFont.COLOR_NORMAL); // 设置单元格字体的颜色. 
font.setFontHeight((short) 350); // 设置单元字体高度 
style1.setFont(font);// 设置字体风格 
cell.setCellStyle(style1); 
                
}
int number=1; 
 
for (int i=0; i<dataList.size(); i++) {

 
Map<String, Object> map = dataList.get(i); 

 
row = sheet.createRow((short) (i + 1));//创建第i+1行 
 
row.setHeight((short)1200);//设置行高 
 
cell = row.createCell(0);//创建第i+1行第0列 
 
cell.setCellValue(number);//设置第i+1行第0列的值 
 
cell.setCellStyle(style);//设置风格 

                        
//下面是插入图片到excel中第二列的代码

ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); 
  <
bb6f
/span>InputStream input = null; //存储一个图片流

input = this.getImageInputStream(map); 
  byte[] buffer = new byte[100]; 
  int n; 
  while ((n = input.read(buffer)) != -1) {
  byteArrayOut.write(buffer, 0, n); 
  }
  HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); 

 
HSSFClientAnchor anchor= new HSSFClientAnchor(5,5,18,18,(short) 1,i+1,(short)2,2+i); //创建第i+1行第1列 
 
anchor.setAnchorType(2); //插入图片到第二列  

patriarch.createPicture(anchor , workbook.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG)); 

input.close();
                    
byteArrayOut.flush();
                   
byteArrayOut.close();//不要忘记关闭InputStream 与ByteArrayOutputStream ,不然导出时会报错

  cell = row.createCell(2); //创建第i+1行第2列 
  cell.setCellValue(String.valueOf(map.get("number")));//设置第i+1行第2列的值 
  cell.setCellStyle(style); //设置风格 

  cell = row.createCell(3); //创建第i+1行第3列
  cell.setCellValue(String.valueOf(map.get("cnName")));//设置第i+1行第3列的值 
  cell.setCellStyle(style); //设置风格 

  cell = row.createCell(4);  
  cell.setCellValue(String.valueOf(map.get("createYear")));//设置第i+1行第4列的值 
  cell.setCellStyle(style); //设置风格 

  cell = row.createCell(5); //创建第i+1行第5列 
  String type = ""; 
  if (map.get("type") != null && StringUtils.isNotBlank(String.valueOf(map.get("type")))) { 
type = String.valueOf(map.get("type")); 
  } 
  cell.setCellValue(type);//设置第i+1行第5列的值 
  cell.setCellStyle(style); //设置风格 
  cell = row.createCell(6); //创建第i+1行第6列 
  String texture = ""; 
  if (map.get("texture") != null && StringUtils.isNotBlank(String.valueOf(map.get("texture")))) { 
 
texture = String.valueOf(map.get("texture")); 
  } 
  cell.setCellValue(texture);//设置第i+1行第6列的值 
  cell.setCellStyle(style); //设置风格 

  cell = row.createCell(7); //创建第i+1行第7列 
  String artSize = ""; 
  if (map.get("artSize") != null && StringUtils.isNotBlank(String.valueOf(map.get("artSize")))) { 
  artSize = String.valueOf(map.get("artSize")); 
  } 
  cell.setCellValue(artSize);//设置第i+1行第7列的值 
  cell.setCellStyle(style); //设置风格

                     number++;
                 }
}

out = response.getOutputStream();
workbook.write(out);
out.flush();

}  catch (IOException e) {
logger.error("io erorr : ", e);
} finally {
try {
if (out != null) {

out.close();
}
} catch (IOException e) {
logger.error("io erorr : ", e);
}
}

}

//从存储图片的服务器读取图片流

private InputStream getImageInputStream(Map<String, Object> map) {
HttpURLConnection httpURLConnection = null;
InputStream inputStream = null;
try {

String imageUrl =
systemParamDao.findValueByName(imageUrlprefix)+String.valueOf(map.get("downloadImageUrl")).replace(CommonContants.ROOTPATH, "/loadfiles");//imageUrlprefix表示存储图片的地址前缀
URL url = new URL(imageUrl);
httpURLConnection = (HttpURLConnection) url.openConnection();
// 设置网络连接超时时间
httpURLConnection.setConnectTimeout(5000);
// 设置应用程序要从网络连接读取数据
httpURLConnection.setDoInput(true);

httpURLConnection.setRequestMethod("GET");
int responseCode = httpURLConnection.getResponseCode();
if (responseCode == 200) {
// 从服务器返回一个输入流
inputStream = httpURLConnection.getInputStream();
}
} catch (Exception e) {
logger.error("读取图片流异常!", e);
}
return inputStream;
}

}

导出结果如附件中所示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poi java excel