自已写的excel报表生成

本文介绍了一个使用Java技术实现从Web应用程序导出复杂Excel报表的方法。具体涵盖了如何设置HTTP响应头来触发文件下载、创建Excel工作簿及工作表、定义单元格格式、填充表头数据并进行单元格合并等关键步骤。
 
 
ACTION类中加入方法:
public ActionForward equipExl(ActionMapping mapping, ActionForm form,
           HttpServletRequest request, HttpServletResponse response)
           throws IOException {
       List<Wrtcontract> list = wrtEquipReportManager.getList(request);
 
       String fname = "equipInfo";// Excel文件名
 
       OutputStream os = null;
       os = response.getOutputStream();// 取得输出流
 
       response.reset();// 清空输出流
 
       response.setHeader("Content-disposition", "attachment; filename="
              + fname + ".xls");// 设定输出文件头
 
       response.setContentType("application/msexcel");// 定义输出类型
       try {
           wrtEquipReportManager.createEquipExcel(os, request);
 
       } catch (Exception e) {
           System.out.println(e);
       }
 
       return null;
    }
 
 
 
Manager类中加:
public void createEquipExcel(OutputStream os, HttpServletRequest request) {
this.TableHead(os, request);
 
    }
 
    public void TableHead(OutputStream os, HttpServletRequest request) {
 
       try {
           WritableWorkbook workbook = Workbook.createWorkbook(os);
           WritableSheet wsheet = workbook.createSheet("sheet1", 0);
           WritableFont wf = new WritableFont(WritableFont.ARIAL, 10,
                  WritableFont.BOLD);
           WritableCellFormat wcf = new WritableCellFormat(wf);
           wcf.setAlignment(Alignment.CENTRE);
           Label label = null;
           int row = 4;
           int col = 40;
           String[][] head = new String[row][col];
           head[0] = new String[] { "", "自动柜员机", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "自动柜员机", "TVM", };
           head[1] = new String[] { "", "停用", "营运", "试用", "", "", "", "", "",
                  "", "", "", "", "", "", "试用", "销售", "", "", "", "", "", "",
                  "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
                  "销售", "", };
           head[2] = new String[] { "", "", "", "已签保", "保内不足一月", "", "", "",
                  "保内不足一月", "全月保内", "", "", "", "", "全月保内", "总计", "已签保",
                  "已过保", "", "已过保", "(从未签过保)保内不足一个月(当月出保)", "", "", "",
                  "(从未签过保)保内不足一个月(当月出保)", "保内", "保内-全月保内(当月出机)", "", "", "",
                  "", "保内-全月保内(当月出机)", "保内-全月在保", "", "", "", "", "保内-全月在保",
                  "总计", "", };
           head[3] = new String[] { "", "停用", "营运", "已签保", "ATM", "CRS/BCR",
                  "查询机", "单款存机", "总计", "ATM", "CRS/BCR", "查询机", "单款存机",
                  "售电机", "总计", "总计", "已签保", "曾经签过保", "从未签过保", "总计", "ATM",
                  "CRS/BCR", "查询机", "单款存机", "总计", "保内", "ATM", "CRS/BCR",
                  "查询机", "单款存机", "售电机", "总计", "ATM", "CRS/BCR", "查询机",
                  "单款存机", "售电机", "总计", "总计", "TVM" };
 
           // 列出表头
           for (int i = 0; i < row; i++) {
              for (int j = 0; j < col; j++) {
                  label = new Label(j, i, head[i][j], wcf);
                  wsheet.addCell(label);
 
              }
           }
           // 合并单元格
           for (int i = 0; i < row; i++) {
 
              for (int j = 0; j < col; j++) {
 
                  // 合并相同内容的行
                  for (int x = j + 1; x < col; x++) {
                     // 判断从该单元开始到这行的后面是否有相同内容的单元
                     if (head[i][j].toString().equals(head[i][x])) {
 
       // 判断从该单元开始到这行的后面的是否有其他不同内容的单元,如果内容是""的话,就合并,否的话就不执行合并单元
 
                         int a = j + 1;
                         for (; a <= x; a++) {
                            if (!head[i][a].equals("")) {
                                break;
 
                            }
 
                         }
                         if (a == x) {
                            wsheet.mergeCells(j, i, x, i);
                         }
                     }
                  }
                  // 合并相同内容的列
                  for (int y = i + 1; y < row; y++) {
                     // 判断从该单元相同的列的下面是否有相同内容的单元
                     if (head[i][j].toString().equals(head[y][j])) {
 
    // 判断从该单元开始到这列的下面的是否有其他不同内容的单元,如果内容是""的话,就合并,否的话就不执行合并单元
                         int b = i + 1;
                         for (; b <= y; b++) {
                            if (!head[b][j].equals("")) {
                                break;
 
                            }
 
                         }
                         if (b == y) {
                            wsheet.mergeCells(j, i, j, y);
                         }
                     }
 
                  }
              }
 
           }
 
           workbook.write();
           workbook.close();
           os.close();
       } catch (RowsExceededException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       } catch (WriteException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       } catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
 
    }
 
制作一个Docker镜像的基本流程如下: 1. 编一个Dockerfile文件,Dockerfile是Docker镜像的构建文件,它包含了一系列指令,用来描述如何构建镜像。可以在Dockerfile中指定基础镜像、安装软件、配置环境变量等操作。 2. 使用docker build命令来构建镜像,该命令会根据Dockerfile文件中的指令,自动构建并打包一个新的Docker镜像。例如,使用以下命令来构建一个新的镜像: ``` docker build -t myimage . ``` 其中,`-t`参数用来指定新镜像的名称,`.`表示Dockerfile文件所在的目录。 3. 运行新的镜像,使用docker run命令来启动一个容器,并运行镜像中的应用程序。例如,使用以下命令来启动一个新容器: ``` docker run -d -p 8080:80 myimage ``` 其中,`-d`参数表示在后台运行容器,`-p`参数表示将主机的8080端口映射到容器中的80端口,`myimage`表示要运行的镜像名称。 4. 保存镜像,使用docker save命令将镜像保存成为一个tar文件,从而可以在其他机器上部署该镜像。例如,使用以下命令来保存镜像: ``` docker save myimage > myimage.tar ``` 其中,`myimage`表示要保存的镜像名称,`>`表示将输出重定向到一个文件中。 以上是Docker镜像制作的基本流程,需要注意的是,在编Dockerfile文件时,应该尽量使用最小化的基础镜像,并注意安全性和可维护性。另外,在构建和运行镜像时,应该遵循最佳实践,例如使用Docker Hub上的官方镜像、限制容器的资源使用等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值