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;
}
}
导出结果如附件中所示。
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;
}
}
导出结果如附件中所示。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 使用Python生成Excel格式的图片
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序