问一个关于EXCEL报表导出的问题(无法读取):
我的思路是这样的,首先调用生成EXCEL报表的方法,生成EXCEL表。接着调用下载的页面去下载该表。但是出现的问题是,有时候程序会在还未完全写完EXCEL表的时候,就去调用了此表。导致的结果是:EXCEL表错误,无法读取该表。
后面只能用来折衷的方法Thread.sleep()。。只有把它设到2秒以上才能完全不出现问题。但此方法无故浪费了2秒时间,不爽啊 希望朋友们能告诉我好的方法,在此谢谢大家了。 附上代码:
try{
//调用生成EXCEL报表的方法
rcmdSgs.creatExcel(Stmt, PubDb, filePath, year, month, OrderBy );
}catch(Exception ex){
out.println( "<font color=red>出错:" + ex + "/font>" );
} //停止2秒
try{
Thread.sleep(2000);
}catch(InterruptedException e){} //调用下载页面下载该EXCEL表
response.sendRedirect("download.jsp?filename=Qyrcmd("+ year + month +").xls");
我的思路是这样的,首先调用生成EXCEL报表的方法,生成EXCEL表。接着调用下载的页面去下载该表。但是出现的问题是,有时候程序会在还未完全写完EXCEL表的时候,就去调用了此表。导致的结果是:EXCEL表错误,无法读取该表。
后面只能用来折衷的方法Thread.sleep()。。只有把它设到2秒以上才能完全不出现问题。但此方法无故浪费了2秒时间,不爽啊 希望朋友们能告诉我好的方法,在此谢谢大家了。 附上代码:
try{
//调用生成EXCEL报表的方法
rcmdSgs.creatExcel(Stmt, PubDb, filePath, year, month, OrderBy );
}catch(Exception ex){
out.println( "<font color=red>出错:" + ex + "/font>" );
} //停止2秒
try{
Thread.sleep(2000);
}catch(InterruptedException e){} //调用下载页面下载该EXCEL表
response.sendRedirect("download.jsp?filename=Qyrcmd("+ year + month +").xls");
response.setHeader("Content-disposition", "attachment; filename=file.xls");
response.setContentType("application/vnd.ms-excel");
<%@ page import=" org.apache.poi.hssf.usermodel.HSSFCell"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFCellStyle"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFDataFormat"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFFont"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFRow"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFSheet"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFWorkbook"%>
<%@ page import="org.apache.poi.hssf.util.HSSFColor"%>
<%@ page import="java.io.*,java.util.*"%>
<%
response.setContentType("Application/msexcel");
response.setHeader("Content-disposition","attachment; filename=workbook.xls" );
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("sheet1");
HSSFRow row = sheet.createRow((short)0);
HSSFCell cell0 = row.createCell((short)0);
cell0.setEncoding(HSSFCell.ENCODING_UTF_16);
cell0.setCellValue("一个字符串值");
FileOutputStream fileOut = new FileOutputStream("sample.xls");
wb.write(fileOut);
fileOut.close();
OutputStream outsys = response.getOutputStream();
wb.write(outsys);
outsys.close();
%>
我用的是jxl..在weblogic下调试正常!
以下是代码,给需要的朋友~<%@ page import="java.io.*;"%>
<%@ page import="jxl.*;"%>
<%@ page import="jxl.write.*;"%>
<%@ page import="jxl.format.*;"%>
<%@ page import="java.util.*;"%>
<%@ page import="java.awt.Color;"%>
<%
try{
response.reset();//如果不用这句,很可能会出现乱码!应该是response的buffer里面有别的东西吧..
response.setHeader("Content-disposition", "attachment; filename=file.xls");//设定输出文件头
OutputStream os = response.getOutputStream(); WritableFont wf = new WritableFont(WritableFont.TIMES,12,WritableFont.NO_BOLD,false);
WritableCellFormat wcfF = new WritableCellFormat(wf);
WritableWorkbook wwb = Workbook.createWorkbook(os);
WritableSheet ws = wwb.createSheet("Test Sheet 1", 0);
Label labelC = new Label(0,0,"姓名",wcfF);
ws.addCell(labelC);
wwb.write();
wwb.close();
os.close(); }catch(Exception ex){
out.println( "<font color=red>出错:" + ex + "/font>" );
}
%>