• 填报表导出excel后不可写的单元格处于锁定状态


    

    填报表单元格分为可写和不可写两种状态,当填报表在web上展现的时候可写单元格可以进行数据填报和修改,非可写单元格不可操作。

    报表导出为excel时,润乾导出excel包默认情况下不对excel单元格属性进行特殊修改,当导出的报表为填报表时,报表中设定的单元格可写属性并不能在导出后的excel中体现,也就是说无论是可写还是非可写的单元格都会在excel中变成普通单元格,而恰恰一些客户在导出excel后会对excel进行修改然后再将excel导入报表,这时候就必然需要导出后的excel中单元格的可写非可写属性要和报表中的一致,此时就需要导出excel的报表中的非可写单元格在excel中锁定。

    解决思路:

    通过Java类来操作excel文件每个单元格的属性是很容易实现的,我们这里用到了jxl这个java操作excel类来实现功能。

    思路:不使用润乾提供的导出excel方法,直接通过自定义按钮调用java代码实现对导出非可写单元格的锁定:

    1.在导出excel的过程中,要先遍历报表中的所有单元格取得所有数据。

    2.在这个遍历过程中做一个操作,将遍历到的可写单元格存在一个数组里。

    3 .遍历完后用润乾导出excel类导出excel。

    4 .通过jxl类操作excel文件,从第二步中建立的数组中取出可写单元格,并设置这些单元格不锁定,其他的单元格设置为锁定。

    下面列出部分代码

        //生成Excel文件

        String saveFile = request.getRealPath("/reportFiles/") + "/"+ reportFile + ".xls";

        ExcelReport eReoprt = new ExcelReport();

        eReoprt.export(iReport);

        FileOutputStream fos = new FileOutputStream(saveFile);

        eReoprt.saveTo(fos);

        fos.close();

        //jxl锁定单元格====================================================================

        Workbook jxlwb=null;

        WritableWorkbook book=null;

        try{

           jxlwb=Workbook.getWorkbook(new File(saveFile));   

           book=Workbook.createWorkbook(new File(saveFile),jxlwb);

           WritableSheet sheet = book.getSheet(0); 

           for(int i=0;i<cellList.size();i++){

               String[] point=(String[])cellList.get(i);

               int rowNum =Integer.parseInt(point[0].trim())-1;

               int colNum =Integer.parseInt(point[1].trim())-1;

               //获取单元格对象

               WritableCell wCell = sheet.getWritableCell(colNum, rowNum);

               CellFormat cf = wCell.getCellFormat();

               WritableCellFormat wcf = new WritableCellFormat(cf);

               //去除可写单元格锁定状态

               wcf.setLocked(false);

               wCell.setCellFormat(wcf);

           }

               // 打开sheet保护

               sheet.getSettings().setProtected(true);

               book.write();

           }catch(Exception e){

           }finally

               book.close();

                jxlwb.close();

           }

        out.println("Excel文件生成结束,文件保存在:" + saveFile);

    下面用个例子检验一下效果:

    上图是报表在设计器中的样子,A1、C1单元格是可写的,其他单元格是不可写的。打开经上面的代码导出的excel

    可以看出A1单元格是可修改的,当选择A2单元格时,会弹出一个提示,说明这个单元格是受保护的,不能修改的。

  • 相关阅读:
    敏捷开发(五)- 框架SCRUM内容
    敏捷开发(四)- 故事验收测试
    敏捷开发(三)- 估算故事
    敏捷开发(二)- 编写故事
    敏捷开发(一)- 搜集故事
    项目管理(十)- 开发准备列表
    项目管理(九)- 组织项目资源
    web 前端常用组件【04】Datetimepicker 和 Lodop
    让时间处理简单化 【第三方扩展类库org.apache.commons.lang.time】
    Word 打包 zip 并提供下载
  • 原文地址:https://www.cnblogs.com/shiGuangShiYi/p/10117515.html
Copyright © 2020-2023  润新知