//直接输出到servlet可以不用在硬盘上写文件
public class SQLtoExcel extends HttpServlet {
public void init() throws ServletException
{
}
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
HSSFRow row=null;
HSSFCell cell = null;
try{
String title = req.getParameter("title");
String hql = req.getParameter("hql");
if(hql!=null&&title!=null){
//System.out.println(+"==========title");
BaseDAO bd = new BaseDAO();
// 创建新的Excel 工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
// 在Excel工作簿中建一工作表,其名为缺省值
//HSSFSheet sheet=workbook.getSheetAt(0);//得到工作表
HSSFSheet sheet = workbook.createSheet("查询结果");
sheet=workbook.getSheetAt(0);//得到工作表
String titles[] = new String(title.getBytes(),"UTF-8").split(";");
int cols = titles.length;//列数
// 在索引0的位置创建行(最顶端的行)
row = sheet.createRow(0);
for(int i=0;i<titles.length;i++){
//在索引0的位置创建单元格(左上端)
cell = row.createCell(i);
// 在单元格中输入一些内容
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
System.out.println(titles[i]);
cell.setCellValue(titles[i]);
}
List l = bd.querySQL(hql);
int rows = l.size();//行数
System.out.println(l.size()+"=======");
for(int i=1;i<rows;i++){
// 在索引0的位置创建行(最顶端的行)
row = sheet.createRow(i);
for(int j=0;j<cols;j++){
Object[] obj = (Object[])l.get(i);
String str = String.valueOf(obj[j]);
//在索引0的位置创建单元格(左上端)
cell = row.createCell(j);
// 在单元格中输入一些内容
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
System.out.println("======="+str);
cell.setCellValue(str);
}
}
//取得输出流
OutputStream out = res.getOutputStream();
//清空输出流
res.reset();
//设置响应头和下载保存的文件名
res.setHeader("content-disposition","attachment;filename="+"Excel.xls");
//定义输出类型
res.setContentType("APPLICATION/msexcel");
workbook.write(out);
out.close();
res.flushBuffer();//强行将响应缓存中的内容发送到目的地
}
}catch(Exception e) {
e.printStackTrace();
}
}