项目笔记:导出Excel功能分sheet页插入数据

  导出Excel功能分sheet页处理数据:

/*导出EXCEL*/
public void createExcel() {
    log.info("导出Excel功能已经启动-BEGIN");
    JxlUtil jsl = new JxlUtil();
    List<Device> dataList =new ArrayList<Device>();
    List<DeviceExport> list = new ArrayList<DeviceExport>();
    // 构建路径
    String downLoadPath = "/WEB-INF/download/asset/";
    String rootPath = getServletContext().getRealPath(downLoadPath);

    String fileName = "";
    File file=new File(rootPath);    

    try {
        if(!(file.exists()||file.isDirectory())){
            file.mkdirs();
        }

        if (null != getRequest().getParameter("ids")) {
            String ids[] = getRequest().getParameter("ids").split(",");
            for (int i = 0; i < ids.length; i++) {
                if(null!=ids[i]){
                    device = deviceService.queryById(ids[i].trim());
                    dataList.add(device);
                }
            }
          }else{
              dataList = deviceService.queryForExcel();
          }

        if(dataList!=null){
            for (Device device : dataList) {
                DeviceExport deviceExport= new DeviceExport();
                if(null!=device.getId()){
                    deviceExport.setId(device.getId());
                     }
                if(null!=device.getIp()){
                    deviceExport.setIp(device.getIp());
                }
                if(null!=device.getMac()){
                    deviceExport.setMac(device.getMac());
                }
                if(null!=device.getName()){
                    deviceExport.setName(device.getName());
                }
                if(null!=device.getOrganization()){
                    Organization organization=device.getOrganization();
                    String Aname =organization.getName();
                    String name= getAname(organization, Aname);
                    deviceExport.setOrganizationName(name);
                }
                if(null!=device.getRegState()){
                        deviceExport.setRegState(device.getRegState());
                }
                if(null!=device.getUser()){
                    deviceExport.setUserName(device.getUser().getName());
                }
                if(null!=device.getProtectState()){
                    deviceExport.setProtectState(device.getProtectState());
                }
                if(null!=device.getIsOpened()){
                    deviceExport.setIsOpened(device.getIsOpened());
                }
                String osName = MessageUtils.getMessage(device.getOs().getName());
                deviceExport.setOsName(osName);
                String deviceType = MessageUtils.getMessage(device.getDeviceType().getName());
                deviceExport.setDeviceTypeName(deviceType);
                list.add(deviceExport);
            }
        }

        String interBase = "sys.column.name.device";
        //String inter_value_key = "#isOpened#roamState#protectState#";
        String inter_value_key = "#isOpened#protectState#regState#";
        String[] inter_value_ary = { "isOpened.0", "isOpened.1", "protectState.0", "protectState.1","regState.0","regState.1"};
        //导出不显示漫游状态
        //String[] inter_value_ary = { "isOpened.0", "isOpened.1","roamState.0", "roamState.1","protectState.0", "protectState.1"};

        fileName = jsl.getInter(interBase.replace("column", "table"))
                + new Date().getTime();
        String targetfile = rootPath + System.getProperty("file.separator")
                + fileName + ".xls";

        //分sheet页处理
        int total = dataList.size();//总数
        int max = 5000;//每sheet页允许最大数
        int avg = total / max;//sheet页个数

        // 创建可写入的Excel工作薄
        WritableWorkbook wwb;
        wwb = Workbook.createWorkbook(new File(targetfile));

        for(int i=0;i<avg+1;i++){
            // 创建Excel工作表
            WritableSheet ws = wwb.createSheet("已注册设备"+(i+1), i);
            int num = i * max;
            int index = 0;
            List<DeviceExport> exportList = new ArrayList<DeviceExport>();
            for(int m = num; m < total; m++){//m即为每个sheet页应该开始的数
                if(index == max){//判断 index = max 的时候跳出里层的for循环
                    break;
                }
                DeviceExport deviceExport=list.get(m);
                exportList.add(deviceExport);//从总的list数据里面取出该处于哪个sheet页的数据,然后加进exportList,exportList即为当前sheet页应该有的数据
                index++;
            }
            // 获取需要内容国际化的字段
            jsl.creatDeviceExcel(ws, exportList, interBase, inter_value_key,inter_value_ary);
        }

        // 写入Exel工作表
        wwb.write();
        // 关闭Excel工作薄对象
        wwb.close();

        getResponse().setContentType(getServletContext().getMimeType(fileName));
        getResponse().setHeader("Content-Disposition", "attachment;fileName="+new String(fileName.getBytes("gb2312"), "ISO8859-1")+".xls");
        String fullFileName = getServletContext().getRealPath(downLoadPath + fileName+ ".xls");
        InputStream in = new FileInputStream(fullFileName);
        OutputStream out = getResponse().getOutputStream();
        int b;
        while((b=in.read())!= -1){
            out.write(b);
        }
        in.close();
        out.close();
        /*ServletActionContext.getRequest().setAttribute("downLoadPath",
                downLoadPath);
        ServletActionContext.getRequest().setAttribute("fileName",
                fileName + ".xls");*/
        this.msg = RESULT_SUCCESS;
        log.info("导出EXCEL提示信息为:"+this.msg);
    } catch (Exception e) {
        log.error("导出EXCEL失败:" + e.getMessage());
    }
    log.info("导出Excel功能已经启动-END");
    /*return "downLoadUI";*/
}
时间: 2024-11-05 06:19:08

项目笔记:导出Excel功能分sheet页插入数据的相关文章

公司项目笔记-导出excel

一.asp.net中导出Excel的方法:在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出流写给浏览器.在Response输出时,t分隔的数据,导出Excel时,等价于分列,n等价于换行. 1.将整个html全部输出Excel此法将html中所有的内容,如按钮,表格,图片等全部输出到Excel中. Response.Clear();        Response.Buffer=   true;  

flex 导出Excel功能实现

方法一: 1.Excel导出主要代码: try   {    var bytes: ByteArray = new ByteArray();    bytes.writeMultiByte(DataGridExporter.exportSCV(dataGrid),"cn-gb");    var fr:FileReference = new FileReference();    var date:Date = new Date();    var dateTime:String =

扩展GridView导出Excel功能

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Runtime.CompilerServices;using System.Text;using System.Web;using System.Web.Compilation;using System.Web.UI;using System.Web.UI.WebControls; namespace Web{ 

CRM报表导出excel时指定sheet名

如图所示,设置PageName即可: 这样导出excel时,sheet的名就有了:

CRM 报表导出excel时指定sheet名

如图所示,设置PageName即可: 这样导出excel时,sheet的名就有了:

laravel-admin 自定义导出excel功能,并导出图片

https://www.jianshu.com/p/91975f66427d 最近用laravel-admin在做一个小项目,其中用到了excel导出功能. 但是laravel-admin自带的导出功能不带图片,并且导出的数据有很多冗余的字段,并非我所需要的功能. 所以参考官方文档调整代码,实现了自定义导出excel文件,并且带上图片: 步骤如下: 1. 安装laravel-excel插件 可参考laravel5.5 中使用laravel-excel composer require maatw

asp.net core web的导入导出excel功能

这里主要记录下asp.net core web页面上进行导入导出excel的操作. 主要是导入,因为现在使用的很多前端框架(例如kendo ui)本身就有导出的功能. 这里使用到EPPlus.Core,其实对于excel的导入导出还可以使用NPOI, 这里讲解EPPlus的方式 1.创建asp.net core web (mvc)项目 效果图如下 2.在项目上右键,进入nuget管理器,安装EPPlus.Core 3.添加一个XlsxController控制器,在其中添加导入和导出功能 usin

java、jsp导出excel功能备份

问题踩坑: ajax请求不能下载文件 必须这样: <a href="/media">点击下载Excel</a> 或者 location.href = '/media'; js取表单数据: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 20.0px Consolas; color: #788d93 } span.s1 { color: #c39900 } span.s2 { color: #2fafa9 } var s

Atitit.导出excel功能的设计 与解决方案

1.1. 项目起源于背景1 1.2. Js  jquery方案(推荐)jquery.table2excel1 1.3. 服务器方案2 1.4. 详细信息2 1.5. 参考4 1.1. 项目起源于背景 正好我们项目也正好在研究更快速的导出excel的方法..昨天终于有了结论..除了我们常用的后端导出excel,前端js导出excel效果也不错,估计可以覆盖90%的领域...所以更好的导出方案就是 js导出(90%)+后端语言导出(10%),取长补短,结合使用 1.2. Js  jquery方案(推