这里主要是要针对数据量过大,通过生成多个excel文件并打成一个zip压缩包提供下载.
压缩excel的类 ZipUtil:
- import java.io.*;
- import java.util.*;
- import java.util.zip.ZipOutputStream;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipFile;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
-
-
- public class ZipUtil {
-
- private static final Log log = LogFactory.getLog(ZipUtil.class);
-
-
- /**
- * 压缩文件
- *
- * @param srcfile File[] 需要压缩的文件列表
- * @param zipfile File 压缩后的文件
- */
- public static void zipFiles(List<File> srcfile, File zipfile) {
- byte[] buf = new byte[1024];
- try {
- // Create the ZIP file
- ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));
- // Compress the files
- for (int i = 0; i < srcfile.size(); i++) {
- File file = srcfile.get(i);
- FileInputStream in = new FileInputStream(file);
- // Add ZIP entry to output stream.
- out.putNextEntry(new ZipEntry(file.getName()));
- // Transfer bytes from the file to the ZIP file
- int len;
- while ((len = in.read(buf)) > 0) {
- out.write(buf, 0, len);
- }
- // Complete the entry
- out.closeEntry();
- in.close();
- }
- // Complete the ZIP file
- out.close();
- } catch (IOException e) {
- log.error("ZipUtil zipFiles exception:"+e);
- }
- }
-
- /**
- * 解压缩
- *
- * @param zipfile File 需要解压缩的文件
- * @param descDir String 解压后的目标目录
- */
- public static void unZipFiles(File zipfile, String descDir) {
- try {
- // Open the ZIP file
- ZipFile zf = new ZipFile(zipfile);
- for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
- // Get the entry name
- ZipEntry entry = ((ZipEntry) entries.nextElement());
- String zipEntryName = entry.getName();
- InputStream in = zf.getInputStream(entry);
- // System.out.println(zipEntryName);
- OutputStream out = new FileOutputStream(descDir + zipEntryName);
- byte[] buf1 = new byte[1024];
- int len;
- while ((len = in.read(buf1)) > 0) {
- out.write(buf1, 0, len);
- }
- // Close the file and stream
- in.close();
- out.close();
- }
- } catch (IOException e) {
- log.error("ZipUtil unZipFiles exception:"+e);
- }
- }
-
- /**
- * Main
- *
- * @param args
- */
- public static void main(String[] args) {
- List<File> srcfile=new ArrayList<File>();
- srcfile.add(new File("e:\\1.xls"));
- srcfile.add(new File("e:\\2.xls"));
- srcfile.add(new File("e:\\3.xls"));
- srcfile.add(new File("e:\\4.xls"));
- srcfile.add(new File("e:\\5.xls"));
-
- File zipfile = new File("e:\\edm.zip");
- ZipUtil.zipFiles(srcfile, zipfile);
- }
- }
生成多个excel 类:
- /**
- * forward:导出Excel
- * @throws Exception
- */
- private ModelAndView forwardExport2Excel(HttpServletRequest request, HttpServletResponse response)
- throws Exception{
- try {
-
- Integer page=0;//页数
- Integer pagesize=Integer.valueOf(PropertiesUtil.getPropertyValue("PAGESIZE"));//每页显示数
- Integer total=0;//总数
- int pageindex=1;//当前页数
- Integer rowfrom = 1;
- Integer rowto = 10;
- total =service.getTotal();
- if(total<pagesize){
- page=1;
- System.out.println("from:"+rowfrom+"---"+total);
- List<Object> list = new ArrayList<Object>();
- list = service.getAllList(rowfrom,total);
- JXLUtil.writeEmailInfo2Excel(response, "邮箱信息总览", "titles", list,pageindex);
- }else{
- Integer mode=total%pagesize;
- if(mode!=0){
- page=total/pagesize+1;
- }else{
- page=total/pagesize;
- }
- if(total!=0 && page!=0){
- while(pageindex<=page ){
- if(total<0){
- break;
- }
- if( total>pageindex*pagesize ){
- System.out.println("from:"+(rowfrom)+"----"+pageindex*pagesize);
- List<Object> list = new ArrayList<Object>();
- list = service.getAllList(rowfrom,pagesize);
- JXLUtil.writeEmailInfo2Excel(response, "邮箱信息总览", "titles", list,pageindex);
- rowfrom=pageindex*pagesize;
- pageindex++;
- }else{
- System.out.println("from:"+rowfrom+"--"+total);
- List<Object> list = new ArrayList<Object>();
- list = service.getAllList(rowfrom,total);
- JXLUtil.writeEmailInfo2Excel(response, "邮箱信息总览", "titles", list,pageindex);
- break;
- }
- }
- }
- }
- List<File> srcfile=new ArrayList<File>();
- for(int p=1;p<=page;p++){
- srcfile.add(new File(PropertiesUtil.getPropertyValue("URL")+"zipname"+p+".xls"));
- }
- File zipfile = new File(PropertiesUtil.getPropertyValue("OUTPATH")+"zipname.zip");
- ZipUtil.zipFiles(srcfile, zipfile);
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- writeObject("成功导出excel 地址:<html><a href="+basePath+"zipname.zip>点击下载</a></html>", response);
-
- } catch (Exception e) {
- log.error("error:"+e);
- }
- return null;
- }
jxl生成excel参考我之前的一篇即可
|