现象:不弹出“文件下载”的提示框,后台也没报错。是我什么地方没写对吗?
代码如下:
private String createXLS(List list,HttpServletResponse response)throws Exception
{
String flag = "";
String path = "C:/文件备份.xls"; // Excel文件URL
try
{
OutputStream os = new FileOutputStream(path); // 输出的Excel文件URL
//打开文件
WritableWorkbook book = Workbook.createWorkbook(os);
//生成名为"第一页"的工作表,参数0表示这是第一页
WritableSheet sheet=book.createSheet("第一页",0);
//设置字体为宋体,16号字,加粗,颜色为红色
WritableFont font1=new WritableFont(WritableFont.createFont("宋体"),16,WritableFont.BOLD);
font1.setColour(Colour.RED);
WritableCellFormat format1=new WritableCellFormat(font1);
WritableFont font2=new WritableFont(WritableFont.createFont("宋体"),12);
//font2.setColour(Colour.RED);
WritableCellFormat format2=new WritableCellFormat(font2);
format1.setWrap(true);// 自动换行
format1.setAlignment(jxl.format.Alignment.CENTRE);
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
Receivefile im = new Receivefile();
// EXCEL的第一行,设置标题
Label labelA1 = new Label(0,0,"收号",format1);
Label labelB1 = new Label(1,0,"单位",format1);
Label labelC1 = new Label(2,0,"文号",format1);
Label labelD1 = new Label(3,0,"标题",format1);
Label labelH1 = new Label(4,0,"当前部门",format1);
Label labelE1 = new Label(5,0,"文件类型",format1);
Label labelF1 = new Label(6,0,"拟稿时间",format1);
Label labelG1 = new Label(7,0,"拟稿人",format1);
// 将定义好的单元格添加到工作表中
sheet.addCell(labelA1);
sheet.addCell(labelB1);
sheet.addCell(labelC1);
sheet.addCell(labelD1);
sheet.addCell(labelE1);
sheet.addCell(labelF1);
sheet.addCell(labelG1);
sheet.addCell(labelH1); for (int i = 1; i <=list.size(); i++) {
im = (Receivefile) list.get(i-1);
String receiveno = ComUtil.replaceNull2Space(im.getReceiveno());
String fromdept = ComUtil.replaceNull2Space(im.getFromdept());
String fromno = ComUtil.replaceNull2Space(im.getFromno());
String filetitle = ComUtil.replaceNull2Space(im.getFiletitle());
String currentdept = ComUtil.replaceNull2Space(im.getCurrentdept());
String fileclassify = ComUtil.replaceNull2Space(im.getFileclassify());
String drafttime =ComUtil.Date2StringYMD(im.getDrafttime()); // 拟稿时间
String sceretlevel = ComUtil.replaceNull2Space(im.getSecretlevel());
// 设置每一行的数据
Label labelA = new Label(0,i,receiveno,format2);
Label labelB = new Label(1,i,fromdept,format2);
Label labelC = new Label(2,i,fromno,format2);
Label labelD = new Label(3,i,filetitle,format2);
Label labelE = new Label(4,i,currentdept,format2);
Label labelF = new Label(5,i,fileclassify,format2);
Label labelG = new Label(6,i,drafttime,format2);
Label labelH = new Label(7,i,sceretlevel,format2); //将定义好的单元格添加到工作表中
sheet.addCell(labelA);
sheet.addCell(labelB);
sheet.addCell(labelC);
sheet.addCell(labelD);
sheet.addCell(labelE);
sheet.addCell(labelF);
sheet.addCell(labelG);
sheet.addCell(labelH);
}
//写入数据并关闭文件
book.write();
book.close();
os.close();
flag = "创建文件成功!";
log.info("创建文件成功!");
}catch(Exception e)
{
// 如果文件是打开的,会报"请求的操作无法在使用用户映射区域打开的文件上执行"。
System.out.println(e);
if(e.toString().indexOf("请求的操作无法在使用用户映射区域打开的文件上执行")>=0)
{
flag ="请确认收文备份文件没有打开";
}
else
{
flag="创建文件失败!";
}
}
// 得到文件名字和路径
File file = new File(path);
if (!file.exists()) {
response.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
out.write("<script type='text/javascript'>");
out.write("alert('文件不存在!');");
out.write("</script>");
return null;
}
// 设置响应头和下载保存的文件名
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
// 打开指定文件的流信息
response.reset();
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=\""
+ new String("接转明细.xls".getBytes("gb18030"), "iso8859-1")
+ "\"");
try {
InputStream inputStream = new FileInputStream(file);
byte[] data = new byte[(int) inputStream.available()];
inputStream.read(data);
inputStream.close();
java.io.ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
data);
bis = new BufferedInputStream(byteArrayInputStream);
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
// 写出流信息
int j;
while ((j = bis.read(buff, 0, buff.length)) != -1) {
bos.write(buff, 0, j);
}
} catch (Exception e) {
e.printStackTrace();
}
finally{
if (bis != null)
bis.close();
log.info("12!");
if (bos != null)
bos.close();
log.info("13!");
while (file.exists()) {
file.delete();
}
return flag;
}
}
代码如下:
private String createXLS(List list,HttpServletResponse response)throws Exception
{
String flag = "";
String path = "C:/文件备份.xls"; // Excel文件URL
try
{
OutputStream os = new FileOutputStream(path); // 输出的Excel文件URL
//打开文件
WritableWorkbook book = Workbook.createWorkbook(os);
//生成名为"第一页"的工作表,参数0表示这是第一页
WritableSheet sheet=book.createSheet("第一页",0);
//设置字体为宋体,16号字,加粗,颜色为红色
WritableFont font1=new WritableFont(WritableFont.createFont("宋体"),16,WritableFont.BOLD);
font1.setColour(Colour.RED);
WritableCellFormat format1=new WritableCellFormat(font1);
WritableFont font2=new WritableFont(WritableFont.createFont("宋体"),12);
//font2.setColour(Colour.RED);
WritableCellFormat format2=new WritableCellFormat(font2);
format1.setWrap(true);// 自动换行
format1.setAlignment(jxl.format.Alignment.CENTRE);
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
Receivefile im = new Receivefile();
// EXCEL的第一行,设置标题
Label labelA1 = new Label(0,0,"收号",format1);
Label labelB1 = new Label(1,0,"单位",format1);
Label labelC1 = new Label(2,0,"文号",format1);
Label labelD1 = new Label(3,0,"标题",format1);
Label labelH1 = new Label(4,0,"当前部门",format1);
Label labelE1 = new Label(5,0,"文件类型",format1);
Label labelF1 = new Label(6,0,"拟稿时间",format1);
Label labelG1 = new Label(7,0,"拟稿人",format1);
// 将定义好的单元格添加到工作表中
sheet.addCell(labelA1);
sheet.addCell(labelB1);
sheet.addCell(labelC1);
sheet.addCell(labelD1);
sheet.addCell(labelE1);
sheet.addCell(labelF1);
sheet.addCell(labelG1);
sheet.addCell(labelH1); for (int i = 1; i <=list.size(); i++) {
im = (Receivefile) list.get(i-1);
String receiveno = ComUtil.replaceNull2Space(im.getReceiveno());
String fromdept = ComUtil.replaceNull2Space(im.getFromdept());
String fromno = ComUtil.replaceNull2Space(im.getFromno());
String filetitle = ComUtil.replaceNull2Space(im.getFiletitle());
String currentdept = ComUtil.replaceNull2Space(im.getCurrentdept());
String fileclassify = ComUtil.replaceNull2Space(im.getFileclassify());
String drafttime =ComUtil.Date2StringYMD(im.getDrafttime()); // 拟稿时间
String sceretlevel = ComUtil.replaceNull2Space(im.getSecretlevel());
// 设置每一行的数据
Label labelA = new Label(0,i,receiveno,format2);
Label labelB = new Label(1,i,fromdept,format2);
Label labelC = new Label(2,i,fromno,format2);
Label labelD = new Label(3,i,filetitle,format2);
Label labelE = new Label(4,i,currentdept,format2);
Label labelF = new Label(5,i,fileclassify,format2);
Label labelG = new Label(6,i,drafttime,format2);
Label labelH = new Label(7,i,sceretlevel,format2); //将定义好的单元格添加到工作表中
sheet.addCell(labelA);
sheet.addCell(labelB);
sheet.addCell(labelC);
sheet.addCell(labelD);
sheet.addCell(labelE);
sheet.addCell(labelF);
sheet.addCell(labelG);
sheet.addCell(labelH);
}
//写入数据并关闭文件
book.write();
book.close();
os.close();
flag = "创建文件成功!";
log.info("创建文件成功!");
}catch(Exception e)
{
// 如果文件是打开的,会报"请求的操作无法在使用用户映射区域打开的文件上执行"。
System.out.println(e);
if(e.toString().indexOf("请求的操作无法在使用用户映射区域打开的文件上执行")>=0)
{
flag ="请确认收文备份文件没有打开";
}
else
{
flag="创建文件失败!";
}
}
// 得到文件名字和路径
File file = new File(path);
if (!file.exists()) {
response.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
out.write("<script type='text/javascript'>");
out.write("alert('文件不存在!');");
out.write("</script>");
return null;
}
// 设置响应头和下载保存的文件名
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
// 打开指定文件的流信息
response.reset();
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=\""
+ new String("接转明细.xls".getBytes("gb18030"), "iso8859-1")
+ "\"");
try {
InputStream inputStream = new FileInputStream(file);
byte[] data = new byte[(int) inputStream.available()];
inputStream.read(data);
inputStream.close();
java.io.ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
data);
bis = new BufferedInputStream(byteArrayInputStream);
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
// 写出流信息
int j;
while ((j = bis.read(buff, 0, buff.length)) != -1) {
bos.write(buff, 0, j);
}
} catch (Exception e) {
e.printStackTrace();
}
finally{
if (bis != null)
bis.close();
log.info("12!");
if (bos != null)
bos.close();
log.info("13!");
while (file.exists()) {
file.delete();
}
return flag;
}
}
response.reset();
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=\""
+ new String("接转明细.xls".getBytes("gb18030"), "iso8859-1")
+ "\"");
这一段
放在PrintWriter out = response.getWriter(); 前面试一下
有高手能说一下吗?