日期:2014-05-20  浏览次数:20827 次

jsp导出excel问题。急,高分
目前我在jsp页面上使用了如下的代码:

 response.setHeader("Content-disposition", "attachment; filename=print_tmp.xls");


这样的话,当浏览器访问页面的时候。就会给出可以下载excel的提示框。
这个很容易做。

 但是由于现在从数据库查询出来的数据量太大了,用一个excel中一个sheet是存不了。
一个excel中的一个sheet只能存放65535条记录。如果超过的话,则无法打开的。

所以我想把超过65535的其他数据存到同一个excel中的第二个sheet。

如何处理数据量大时导入excel问题,我自己想了一些思路。如下:

第一种思路:
可不可以使用类似下面的代码:
response.setHeader("Content-disposition", "attachment; filename=print_tmp.xls");

在数据量超过65535的情况下,跳出的excel框中已经自动的增加了另一个sheet了。不用我做太多的处理。
只是使用类似的命令。

第二种思路:
  就是可以用多个excel来存的。不一定要使用同一个excel中的多个sheet。
  例如第一个excel存65535.第二个excel存另外的数据。
  这样的话,当在页面上点击导出excel按钮时,弹出两个提示框。其中在第一个提示框中点击保存按钮后
  可以把65535条记录存到excel。接着可以在第二个提示框中,点击保存按钮,把其他的数据保存到另外一个excel中
   
  备注:
  目前我是使用这种思路做的,但是还是只能弹出一个提示框,我是这样做的,
  当我访问projectExcel.jsp时,就会弹出一个提示框,提示可以下载excel。所以我在这个页面上嵌套了一段javascipt代码,目的是再次的访问projectExcel.jsp,好可以再弹出一个提示框,但是始终无法成功的。因为javascipt根本没有执行。

  请问高手该如何弹出两个提示框呢?

第三中思路:
  就是在页面上点击导出excel按钮后,使用后台的代码把数据存到某个excel上,此时可以使用一些jar包来生成多个sheet。
  这样的话,用一个excel就可以保存大量的数据了。
  但是这样的话,有一个缺点,就是用户无法自己指定要在哪个位置保存excel了。用户体验不是很好的。


关于导出excel时,由于数据量太大的情况,做好该如何处理呢?除了考虑技术,还得考虑用户体验。

如果我的第一种思路可以的话,当然是最好了。但估计希望渺茫。

不知道该怎么办。请高手指教一下。






------解决方案--------------------
用第3种吧。后台用poi或者jxl生成文件,前台让它下载去。点生成文件的时候给他个等待画面,这种效果感觉最好。生成好的文件,相当于让他下载你服务器上一个文件啊,跟你任意网站下载文件时另存为一样的,可以选择路径。

------解决方案--------------------
一般我做的都是结合分页来实现的。每次查询一次数据库。导出一次。
------解决方案--------------------
第一种,第二种均实现不了,第三种
参考
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException
import java.io.IOException
import java.io.InputStream; 
import java.util.List; 
import java.util.Locale; 
import jxl.Cell; 
import jxl.Sheet; 
import jxl.Workbook; 
import jxl.WorkbookSettings; 
import jxl.format.Colour; 
import jxl.read.biff.BiffException; 
import jxl.write.Label; 
import jxl.write.WritableSheet; 
import jxl.write.WritableWorkbook; 
import jxl.write.WriteException; 
import jxl.write.biff.RowsExceededException; 
/* 
* java 操作EXCEL文件的类,需集合jxl.jar包 
* 读取并显示EXCEL数据 , 向EXCEL文件内写入数据 


*/ 
public class ExcelUtils { 

/* public static void main(String[] args) { 
System.out.println(":===="); 
File file = new File("E:\\Book1.xls"); 
ExcelUtils eu = new ExcelUtils(); 
eu.readExcel(file, 0); 

System.out.println(":===="); 
File file = new File("E:\\Book2.xls"); 

ExcelUtils eu = new ExcelUtils();
String[] title = {"xingming" , " nianling "}; 
eu.addDateToExcelFile(file, null, "jerry.gao", title); 

}*/ 

public ExcelUtils() { 
super(); 
// TODO Auto-generated constructor stub 



//读取EXCEL 文件 ,num 为第几张sheet , 将结果显示出来 
public void readExcel(File file, int num) { 

try { 
Workbook wb = Workbook.getWorkbook(file); 
Sheet sheet = wb.getSheet(num); //获取第几张SHEET表 
for (int r = 0; r < sheet.getRows(); r++) { 
for (int c = 0; c < sheet.getColumns(); c++) { 
System.out.print(sheet.getCell(c, r).getContents() + " | ");