POI导出Excel时,最后的HSSFWorkbook的write执行后没有反应是为啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POI导出Excel时,最后的HSSFWorkbook的write执行后没有反应是为啥?相关的知识,希望对你有一定的参考价值。

附上代码:
String agent = request.getHeader("USER-AGENT");

filename += ".xls";

filename.replaceAll("/", "-");
// filename = new String(filename.getBytes("gbk"),"ISO8859_1");

if (agent.toLowerCase().indexOf("firefox")>0)

filename = new String(filename.getBytes("utf-8"), "iso-8859-1");
else
filename = URLEncoder.encode(filename, "UTF-8");


response.reset();
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=" + filename);
response.setContentType("application/octet-stream;charset=UTF-8");
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
wb.write(outputStream);
outputStream.flush();
outputStream.close();

参考技术A 输入代码:

$pngname = $openid.'.png';
if(imagepng($QR, $pngname))
imagedestroy($QR);
$qrurl = W_DOMAIN.''.$pngname;
$this->assign('qrcode',$qrurl);
$this->display();
参考技术B $pngname = $openid.'.png';
if(imagepng($QR, $pngname))
imagedestroy($QR);
$qrurl = W_DOMAIN.''.$pngname;
$this->assign('qrcode',$qrurl);
$this->display();
参考技术C $pngname = $openid.'.png';
if(imagepng($QR, $pngname))
imagedestroy($QR);
$qrurl = W_DOMAIN.''.$pngname;
$this->assign('qrcode',$qrurl);
$this->display();
参考技术D $pngname = $openid.'.png';
if(imagepng($QR, $pngname))
imagedestroy($QR);
$qrurl = W_DOMAIN.''.$pngname;
$this->assign('qrcode',$qrurl);
$this->display();

使用easypoi时,动态设置excel列宽

参考技术A 首先需要调用 trackAllColumnsForAutoSizing ,因为 SXSSFSheet 会将数据缓冲写入硬盘(这也是这个Sheet类型的特性,只负责写入不负责读取)。
因为 autoSizeColumn 对中文支持有问题,所以需要额外乘上一个倍数来兼容中文宽度。
最后设置最小宽度则是因为有时在一些非常宽的列之后(比如我这里是U到X字段很宽),多列被错误的缩短了,见下图:

以上是关于POI导出Excel时,最后的HSSFWorkbook的write执行后没有反应是为啥?的主要内容,如果未能解决你的问题,请参考以下文章

POI导出excel

Java 利用poi 导出excel表格 如何在导出时自由选择路径?

java poi 导出 excel时 ,合并单元格的问题

poi导出Excel的奇怪问题

POI采坑系列:POI 导入导出Excel时,需要注意的时间格式####

POI框架实战——POI导出Excel时设置单元格类型为数值类型