① java excel导出到用户本地
一般来说做下载功能的确是先导到服务器的一个临时目录上的,然后再用一段代码把这个excel读出来,并且输出到response流里面去,给你一段可以用的代码
//------------------------------
//step1.保存一个临时excel到temp目录下
//------------------------------
//这部分自己实现,我相信你已经实现了
//假设你已经实现了保存一个excel到一个临时文件夹里面去
//并且已经生成了一个File指向这个临时的excel,名叫exportFile
//-------------------------------
//step2.弹出下载对话框
//-------------------------------
if(exportFile==null){
logger.error("生成excel错误!exportFile为空");
return;
}
//先建立一个文件读取流去读取这个临时excel文件
FileInputStreamfs=null;
try{
fs=newFileInputStream(exportFile);
}catch(FileNotFoundExceptione){
logger.error("生成excel错误!"+exportFile+"不存在!",e);
return;
}
//设置响应头和保存文件名
HttpServletResponseresponse=ServletActionContext.getResponse();
//这个一定要设定,告诉浏览器这次请求是一个下载的数据流
response.setContentType("APPLICATION/OCTET-STREAM");
try{
//这边的"采购部门本月采购报表.xls"替换成你自己要显示给用户的文件名
excelName=URLEncoder.encode("采购部门本月采购报表.xls","UTF-8");
}catch(){
logger.error("转换excel名称编码错误!",e1);
}
response.setHeader("Content-Disposition","attachment;filename=""+excelName+""");
//写出流信息
intb=0;
try{
//这里的response就是你servlet的那个传参进来的response
PrintWriterout=response.getWriter();
while((b=fs.read())!=-1){
out.write(b);
}
fs.close();
out.close();
logger.debug(sheetName+"文件下载完毕.");
}catch(Exceptione){
logger.error(sheetName+"下载文件失败!.",e);
}
把这段代码放到你的servlet的最后一部分
② Java服务器做Excel导出遇到异常
这个异常产生的常见原因如下:
1、客户端因为网络原因断开连接了(例如拔网线)
2、客户端在服务器向Response的输出流写入内容前就强行中断了连接(例如在下载框出现之前就点了“停止”按钮)
3、Excel文件生成的过程太久了,客户端程序达到超时时间,主动断开了连接。
4、Nginx之类的负载均衡达到超时时间,断开了负载均衡服务器与应用服务器的连接。
建议:
只要能排除第3、4,就不是程序的问题,就没事了。
③ java web项目: 一个excel文件以二进制的形式存在数据库中 如何将它导出并
poi读取即可。
/**
* 读取Excel数据内容
* @param InputStream
* @return Map 包含单元格数据内容的Map对象
*/
public Map<Integer, String> readExcelContent(InputStream is) {
Map<Integer, String> content = new HashMap<Integer, String>();
String str = "";
try {
fs = new POIFSFileSystem(is);
wb = new HSSFWorkbook(fs);
} catch (IOException e) {
e.printStackTrace();
}
sheet = wb.getSheetAt(0);
// 得到总行数
int rowNum = sheet.getLastRowNum();
row = sheet.getRow(0);
int colNum = row.getPhysicalNumberOfCells();
// 正文内容应该从第二行开始,第一行为表头的标题
for (int i = 1; i <= rowNum; i++) {
row = sheet.getRow(i);
int j = 0;
while (j < colNum) {
// 每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据
// 也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean
// str += getStringCellValue(row.getCell((short) j)).trim() +
// "-";
str += getCellFormatValue(row.getCell((short) j)).trim() + " ";
j++;
}
content.put(i, str);
str = "";
}
return content;
}
④ javaweb 使用freemarker导出Excle,打开之后提示,格式与扩展名不符,点击“是”,依然可以打开
当然可以打开,扩展名只是用来提示系统选择什么软件打开文件并不会影响文件内容。要解决这个问题只要把下载的文件后缀名和模板后缀设置一致就行了
⑤ javaweb中通过POI生成Excel并弹出下载窗口!
把response的输出类型设置成
response.setContentType("application/x-download
response.addHeader("Content-Disposition","attachment;filename=myexcel.xls" );
POI结果直接给response的输出流,就可以了