做过jsp导出excel文件的朋友,请指教!谢谢 我查询得到数据在显示在当前页,页面有个button按钮希望点击以后弹出一个保存对话框 选择路径保存为excel格式的文件. 如果大家有做过的,能给我一份详细点的例子吗?谢谢.. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我在上课...对于你要导出的数据是否是当前页完全没关系(当然也可以是当前页)一般步奏:HQL 查询要导出的数据自己定制导出的excel表样式(不设定的话,就是不美观而已)...没了把~ POI,不知道写错没,很久没用了。去找找这个资料,简单易用 可以将要导出的数据展示在 jsp 页面,该JSP页面头为<%@ page contentType="application/vnd.ms-excel; charset=gb2312"%> 即可 在后台写一个导出的函数,用java操作excel将数据封装成list等一类,就行了 现成的例子没有哇!我们都是封装的,不直接写JSP,我们做的系统不是网站,纯JSP太难维护。我用POI写了一个工具类,只要给他结果集,表头,就可以了。哦是一个ExcelServlet和一个封装的类。表格工具我们用的是ECTable不知道听说过没,用他的话有自动导出功能,还能导出PDF呢。 我在后台写的函数都已经测试好了,能保存到excel。但是,前台jsp页面的数据,不知道怎么和后台的数据结合。public void export(){ ExcelExportAction e=new ExcelExportAction(); // String path = getServletContext().getRealPath("excelexport"); // System.out.println("path:"+path); Date now = new Date(); String as=e.time(now); FileOutputStream fos; try { fos = new FileOutputStream("d://excel/a.xls"); HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("sheet1"); String[] term_id ={"1","2"}; String[] name={"a","b"}; // 以下以写表头 // 表头为第一行 HSSFRow row = sheet.createRow((short) 0); // 定义10列 HSSFCell cell1 = row.createCell((short) 0); HSSFCell cell2 = row.createCell((short) 1); cell1.setEncoding((short) 1); cell1.setCellType(1); cell2.setEncoding((short) 1); cell2.setCellType(1); // 定义表头的内容 cell1.setCellValue("纳税人管"); cell2.setCellValue("姓名"); for (int j = 0; j < 2; j++) { // 定义数据从第二行开始 row = sheet.createRow((short) j + 1); cell1 = row.createCell((short) 0); cell2 = row.createCell((short) 1); cell1.setEncoding((short) 1); cell1.setCellType(1); cell2.setEncoding((short) 1); cell2.setCellType(1); // 填充内容 cell1.setCellValue(term_id[j]); cell2.setCellValue(name[j]); } wb.write(fos); fos.flush(); fos.close(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } POI 就可以,将 POI 的代码写在 <% %>里面,不过建议楼主还是用点框架吧,struts都发明10年了,你还在 jsp里面写代码。 用POI做导出Excel 是个不错的选择建议楼主试试。 乱?怎么个乱法?用表格控制了。不行的话就用poi了。基本如下,具体的查资料吧 ... HSSFSheet sheet;//Excel电子表格的页 HSSFRow sheetRow;// 行 HSSFCell cell;//单元格 sheet = wb.createSheet("test");//创建页 sheet.setDefaultColumnWidth((short)12);//设置默认列宽 cell = getCell(sheet,0,0);//定位表格 A1 cell.setEncoding(HSSFCell.ENCODING_UTF_16);//支持中文 setText(cell,"the first test"); List words = ... for(int i=0;i<words.size;i++){ cell =getCell(sheet,2+i,0);setText(cell,words.get(i);} 把你的数据都放到table中哪会乱,我都做过 把你哦的格式先用excel做好,然后另存为.xml格式的数据,然后在文件头上加上这个<%@ page contentType="application/vnd.ms-excel; charset=gb2312"%> ,就可以了。然后在各个地方填好你要的数据,就可以下载指定格式的文件了 这个应该是把查出来的数据先保存到服务器上,然后下载到客户端。如果表中存的是字符串或int型的话,可以试一下下面这种导出。try{ String filepath = i_stationinfodeal.writeStationToExcel(sql, select_station_notrim); File f = new File(filepath); String downFilename = "station.xls";//要下载的文件名称 response.setContentType("text/plain"); response.setHeader("Location",downFilename); response.setHeader("Content-Disposition", "attachment; filename=" + downFilename); OutputStream outputStream = response.getOutputStream(); InputStream inputStream = new FileInputStream(filepath); byte[] buffer = new byte[1024]; int i = -1; while ((i = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, i); } outputStream.flush(); outputStream.close(); inputStream.close(); //outputStream = null; //删除文件 f.delete(); } catch(Exception e){ }public String writeStationToExcel(String sql,String queryselect) { //创建文件 Date date = new Date(); String filename = String.valueOf(date.getTime()); String filepath = "c:\\"+filename+".xls"; try{ File f = new File(filepath); f.createNewFile(); FileOutputStream fileoutputstream = new FileOutputStream(f); //创建表头 jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(fileoutputstream); jxl.write.WritableSheet ws = wwb.createSheet("Station",0); boolean fot = false; int i = 0; int length = 0; //选择列的个数 jxl.write.Label labelC; length = queryselect.split(",").length; String[] query = queryselect.split(","); for(int k=0;k<length;k++){ labelC=new jxl.write.Label(k,0,query[k]); ws.addCell(labelC); } //查询数据库中的数据导出到excel中 con = new ConnectionManager().getConnection(); pst = con.prepareStatement(sql); rs = pst.executeQuery(); while(rs.next()){ for(int j=0;j<length;j++){ String a = ""; try{ a=rs.getString(j+1); } catch(Exception e){ a=String.valueOf(rs.getInt(j+1)); } labelC=new jxl.write.Label(j,i+1,a); ws.addCell(labelC); } i++; fot = true; } //关闭各种流 if(fot){ wwb.write(); wwb.close(); } else{ wwb.close(); } fileoutputstream.close(); } catch(Exception e){ } finally{ try{ rs.close(); pst.close(); con.close(); } catch(Exception e){ e.printStackTrace(); } } return filepath; } 可以将要导出的数据展示在 jsp 页面,该JSP页面头为 <%@ page contentType="application/vnd.ms-excel; charset=gb2312"%> 即可 这个方法是最简单的! 如何在JSP中 即时在网页上更新数据中更新的数据,在线等~~ 高分求response.addCookie(newCookie)源代码 关于include 引用.do的问题 业余程序员如何理解JAVABEAN数据库连接 如何分页显示 如何把一个登陆用户强制下线呀? 求Servlet下分页显示代码,要有搜索结果分页功能 高手救我:设置Tomcat出现的问题 在JSP中怎样访问WINDOWS中的AD? 高手:现在要取得在线用户列表怎作???? WEB电子工商技术方案 dwr 上传到服务器就不运行了
自己定制导出的excel表样式(不设定的话,就是不美观而已)
.
.
.没了把~
去找找这个资料,简单易用
public void export(){
ExcelExportAction e=new ExcelExportAction();
// String path = getServletContext().getRealPath("excelexport");
// System.out.println("path:"+path); Date now = new Date();
String as=e.time(now);
FileOutputStream fos;
try {
fos = new FileOutputStream("d://excel/a.xls");
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("sheet1");
String[] term_id ={"1","2"};
String[] name={"a","b"};
// 以下以写表头
// 表头为第一行
HSSFRow row = sheet.createRow((short) 0);
// 定义10列
HSSFCell cell1 = row.createCell((short) 0);
HSSFCell cell2 = row.createCell((short) 1);
cell1.setEncoding((short) 1);
cell1.setCellType(1);
cell2.setEncoding((short) 1);
cell2.setCellType(1);
// 定义表头的内容
cell1.setCellValue("纳税人管");
cell2.setCellValue("姓名");
for (int j = 0; j < 2; j++) {
// 定义数据从第二行开始
row = sheet.createRow((short) j + 1);
cell1 = row.createCell((short) 0);
cell2 = row.createCell((short) 1);
cell1.setEncoding((short) 1);
cell1.setCellType(1);
cell2.setEncoding((short) 1);
cell2.setCellType(1);
// 填充内容
cell1.setCellValue(term_id[j]);
cell2.setCellValue(name[j]);
}
wb.write(fos);
fos.flush();
fos.close();
}
catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
建议楼主试试。
HSSFSheet sheet;//Excel电子表格的页
HSSFRow sheetRow;// 行
HSSFCell cell;//单元格
sheet = wb.createSheet("test");//创建页
sheet.setDefaultColumnWidth((short)12);//设置默认列宽
cell = getCell(sheet,0,0);//定位表格 A1
cell.setEncoding(HSSFCell.ENCODING_UTF_16);//支持中文
setText(cell,"the first test");
List words = ...
for(int i=0;i<words.size;i++){
cell =getCell(sheet,2+i,0);
setText(cell,words.get(i);
}
try{
String filepath = i_stationinfodeal.writeStationToExcel(sql, select_station_notrim);
File f = new File(filepath);
String downFilename = "station.xls";//要下载的文件名称
response.setContentType("text/plain");
response.setHeader("Location",downFilename);
response.setHeader("Content-Disposition", "attachment; filename=" + downFilename);
OutputStream outputStream = response.getOutputStream();
InputStream inputStream = new FileInputStream(filepath);
byte[] buffer = new byte[1024];
int i = -1;
while ((i = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, i);
}
outputStream.flush();
outputStream.close();
inputStream.close();
//outputStream = null;
//删除文件
f.delete();
}
catch(Exception e){
}
public String writeStationToExcel(String sql,String queryselect)
{
//创建文件
Date date = new Date();
String filename = String.valueOf(date.getTime());
String filepath = "c:\\"+filename+".xls";
try{
File f = new File(filepath);
f.createNewFile();
FileOutputStream fileoutputstream = new FileOutputStream(f);
//创建表头
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(fileoutputstream);
jxl.write.WritableSheet ws = wwb.createSheet("Station",0);
boolean fot = false;
int i = 0;
int length = 0; //选择列的个数
jxl.write.Label labelC;
length = queryselect.split(",").length;
String[] query = queryselect.split(",");
for(int k=0;k<length;k++){
labelC=new jxl.write.Label(k,0,query[k]);
ws.addCell(labelC);
}
//查询数据库中的数据导出到excel中
con = new ConnectionManager().getConnection();
pst = con.prepareStatement(sql);
rs = pst.executeQuery();
while(rs.next()){
for(int j=0;j<length;j++){
String a = "";
try{
a=rs.getString(j+1);
}
catch(Exception e){
a=String.valueOf(rs.getInt(j+1));
}
labelC=new jxl.write.Label(j,i+1,a);
ws.addCell(labelC);
}
i++;
fot = true;
}
//关闭各种流
if(fot){
wwb.write();
wwb.close();
}
else{
wwb.close();
}
fileoutputstream.close();
}
catch(Exception e){
}
finally{
try{
rs.close();
pst.close();
con.close();
}
catch(Exception e){
e.printStackTrace();
}
}
return filepath;
}