本文实例为大家分享了java使用poi导出图片到excel的具体代码,供大家参考,具体内容如下
代码实现
controller
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
/**
* 导出志愿者/人才数据
* @param talent_type
* @return
*/
@requestmapping ( "/exportdata" )
public void exportdata(integer talent_type, httpservletresponse response) {
string fileid = uuid.randomuuid().tostring().replace( "-" , "" );
map<string, object> param = new hashmap<>() ;
param.put( "talent_type" , talent_type) ;
try {
list<map<string, object>> volunteermaplist = volunteerservice.getexportdata(param) ;
string rootpath = sysconfigmanager.getinstance().gettext( "/config/sys/rootpath" );
string filepath = rootpath + "/" + fileid + ".xlsx" ;
volunteerservice.exportdata(volunteermaplist, filepath) ;
// 下载
fileinputstream inputstream = null ;
try {
//设置发送到客户端的响应内容类型
response.reset();
response.setcontentlength(( int ) new file(filepath).length());
response.setcontenttype( "application/octet-stream" );
response.addheader( "content-disposition" , "attachment; filename=\"" + urlencoder.encode( "文件名.xlsx" , "utf-8" )+ "\"" );
//读取本地图片输入流
inputstream = new fileinputstream(filepath);
// 循环取出流中的数据
byte [] b = new byte [ 1024 ];
int len;
while ((len = inputstream.read(b)) > 0 )
response.getoutputstream().write(b, 0 , len);
} finally {
if (inputstream != null ){
inputstream.close();
}
}
logger.debug( "导出志愿者/人才数据成功!" );
} catch (exception e) {
e.printstacktrace();
logger.error( "导出志愿者/人才数据异常!" );
}
}
|
service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
public void exportdata(list<map<string, object>> volunteermaplist, string filepath) throws exception {
string[] alias = { "头像" , "名称" , "个人/团体" , "志愿者/人才" , "性别" , "生日" , "手机号" ,
"身份证" , "省份" , "市" , "区/县" , "详细地址" , "邮箱" , "政治面貌" , "学历" , "民族" ,
"职业" , "团队人数" , "艺术特长" , "介绍" };
string[] keys = { "photo" , "name" , "type" , "talent_type" , "sex" , "birth_day" , "mobile" ,
"idcard" , "province" , "city" , "county" , "address" , "email" , "political" ,
"education" , "nation" , "profession" , "member_count" , "art_spetiality" , "content" };
file file = new file(filepath);
if (!file.exists()) file.createnewfile();
fileoutputstream fileoutput = new fileoutputstream(file);
xssfworkbook workbook = new xssfworkbook();
int sheetsize = volunteermaplist.size() + 50 ;
double sheetno = math.ceil(volunteermaplist.size() / sheetsize);
string photoimgpath = sysconfigmanager.getinstance().gettext( "/config/sys/rootpath" ) ;
for ( int index = 0 ; index <= sheetno; index++) {
xssfsheet sheet = workbook.createsheet();
workbook.setsheetname(index, "人才、志愿者" + index);
xssfrow row = sheet.createrow( 0 );
sheet.setcolumnwidth( 0 , 2048 );
xssfcell cell;
xssfcellstyle cellstyle = workbook.createcellstyle();
xssffont font = workbook.createfont();
font.setboldweight(xssffont.boldweight_bold);
// 居中
cellstyle.setalignment(xssfcellstyle.align_center);
// 加粗
cellstyle.setfont(font);
//创建标题
for ( int i = 0 ; i < alias.length; i++) {
cell = row.createcell(i);
cell.setcellvalue(alias[i]);
cell.setcellstyle(cellstyle);
}
int startno = index * sheetsize;
int endno = math.min(startno + sheetsize, volunteermaplist.size());
cellstyle = workbook.createcellstyle();
// 居中
cellstyle.setalignment(xssfcellstyle.align_center);
cellstyle.setverticalalignment(xssfcellstyle.vertical_center);
// 写入各条记录,每条记录对应excel表中的一行
for ( int i = startno; i < endno; i++) {
int rownum = i + 1 - startno ;
row = sheet.createrow(rownum);
map<string, object> map = (map<string, object>) volunteermaplist.get(i);
for ( int j = 0 ; j < keys.length; j++) {
cell = row.createcell(j);
string key = keys[j] ;
if (key.equals( "photo" )){
sheet.addmergedregion( new cellrangeaddress(i + 1 ,i + 1 ,i + 1 ,i + 1 )) ;
// 头像
file photofile = new file(photoimgpath + map.get(key)) ;
if (photofile.exists()){
bufferedimage bufferedimage = imageio.read(photofile) ;
bytearrayoutputstream bytearrayout = new bytearrayoutputstream();
imageio.write(bufferedimage, "jpg" , bytearrayout);
byte [] data = bytearrayout.tobytearray();
xssfdrawing drawingpatriarch = sheet.createdrawingpatriarch();
xssfclientanchor anchor = new xssfclientanchor( 480 , 30 , 700 , 250 , ( short ) 0 , i + 1 , ( short ) 1 , i + 2 );
drawingpatriarch.createpicture(anchor, workbook.addpicture(data, xssfworkbook.picture_type_jpeg));
sheet.setcolumnwidth(( short ) 500 , ( short ) 500 );
row.setheight(( short ) 500 );
} else {
cell.setcelltype(xssfcell.cell_type_string);
cell.setcellvalue( "" );
}
} else {
cell.setcelltype(xssfcell.cell_type_string);
object value = map.get(key);
cell.setcellvalue(value == null ? "" : value.tostring());
cell.setcellstyle(cellstyle);
}
}
}
// 设置列宽
for ( int i = 1 ; i < alias.length; i++)
sheet.autosizecolumn(i);
// 处理中文不能自动调整列宽的问题
this .setsizecolumn(sheet, alias.length);
}
fileoutput.flush();
workbook.write(fileoutput);
fileoutput.close();
}
// 自适应宽度(中文支持)
private void setsizecolumn(xssfsheet sheet, int size) {
for ( int columnnum = 0 ; columnnum < size; columnnum++) {
int columnwidth = sheet.getcolumnwidth(columnnum) / 256 ;
for ( int rownum = 0 ; rownum <= sheet.getlastrownum(); rownum++) {
xssfrow currentrow;
//当前行未被使用过
if (sheet.getrow(rownum) == null ) {
currentrow = sheet.createrow(rownum);
} else {
currentrow = sheet.getrow(rownum);
}
if (currentrow.getcell(columnnum) != null ) {
xssfcell currentcell = currentrow.getcell(columnnum);
if (currentcell.getcelltype() == xssfcell.cell_type_string) {
int length = currentcell.getstringcellvalue().getbytes().length;
if (columnwidth < length) columnwidth = length;
}
}
}
columnwidth = columnwidth * 256 ;
sheet.setcolumnwidth(columnnum, columnwidth >= 65280 ? 6000 : columnwidth);
}
}
|
以上所述是小编给大家介绍java poi导出图片到excel示例代码解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:https://blog.csdn.net/wkh___/article/details/87431066