OAF_文件系列10_实现OAF将数据资料导出Excel到本地JXL(案例)

简介: 20150729 Created By BaoXinjian 一、摘要 将页面上的信息通过调用JXL脚本,将资料导出为Excel 引用的一些包方法 1. 获取输出文件流 1.1. HttpServletResponse: 将文件写到客户端所引用的包 1.

20150729 Created By BaoXinjian

一、摘要


将页面上的信息通过调用JXL脚本,将资料导出为Excel

引用的一些包方法

1. 获取输出文件流

1.1. HttpServletResponse: 将文件写到客户端所引用的包

1.2. OutputStream: 从HttpServeltResponse中导出输出文件流

2. 创建Excel

2.1 WorkbookSetting:创建Excel的格式

2.2 WritableWorkbook:创建Excel文件

2.3  WritableSheet:创建Excel工作簿

3. 设定Excel中单元格格式

3.1  WritableFont:定义单元格格式

3.2 WritableCellFormat :定义单元格内容

 

二、实现分析


1. 创建Export Excel Button,触发在CO中的方法,调用导出Excel功能

 

2. 设计CO中的方法

  public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)  
  {
    super.processFormRequest(pageContext, webBean);
    
      EmpManageAMImpl empam = (EmpManageAMImpl) pageContext.getApplicationModule(webBean); EmployeesVOImpl empvo = empam.getEmployeesSummaryVO(); if ("exportexcel".equals(pageContext.getParameter(EVENT_PARAM))) { System.out.println("exportexcel co"); empexportexcel(pageContext, empvo); } public void empexportexcel(OAPageContext pageContext, EmployeesVOImpl empvo) { HttpServletResponse response = (HttpServletResponse) pageContext.getRenderingContext().getServletResponse(); response.setCharacterEncoding("gb2312"); response.reset(); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); String filenames = "gavin_emp_export.xls"; String[] expLabels = new String[] {"Employee Id","Employee Num","Employee Name","Type","HireDate","Country","Address","Salary"}; String[] expFields = new String[] {"EmployeeId","EmployeeNum","EmployeeName","EmployeeType","HireDate","EmployeeCountry","EmployeeAddress","Salary"}; Class[] colClasses = new Class[] {null,null,null,null,null,null,null,null}; int inId = empvo.getRangeStart(); EmployeesVORowImpl currentRow = (EmployeesVORowImpl) empvo.getCurrentRow(); if (empvo == null) { return; } try{ OutputStream fileos = response.getOutputStream(); response.addHeader("Content-Disposition", (new StringBuilder()).append("attachment; filename=\"").append(filenames).append("\"").toString()); WorkbookSettings workbookSettings = new WorkbookSettings(); workbookSettings.setEncoding("ISO-8859-1"); //乱码处理 WritableWorkbook workbook = Workbook.createWorkbook(fileos, workbookSettings); WritableSheet sheet = workbook.createSheet("Employee List Sheet",0); // 定义格式 字体 下划线 斜体 粗体 颜色 WritableFont wf_h = new WritableFont(WritableFont.ARIAL, 20, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,Colour.BLUE_GREY); WritableCellFormat wcf_h = new WritableCellFormat(wf_h); // 单元格定义 wcf_h.setAlignment(Alignment.LEFT); // 设置对齐方式  wcf_h.setBorder(jxl.format.Border.NONE,BorderLineStyle.NONE); // 定义格式 字体 下划线 斜体 粗体 颜色 WritableFont wf_t = new WritableFont(WritableFont.ARIAL, 11, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,Colour.WHITE); WritableCellFormat wcf_t = new WritableCellFormat(wf_t); // 单元格定义 wcf_t.setBackground(Colour.BLUE_GREY); // 设置单元格的背景颜色 wcf_t.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式 wcf_t.setVerticalAlignment(VerticalAlignment.TOP); // 设置对齐方式  wcf_t.setBorder(jxl.format.Border.ALL,BorderLineStyle.MEDIUM,Colour.GREY_25_PERCENT); // 定义格式 字体 下划线 斜体 粗体 颜色 WritableFont wf_cs = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,Colour.BLACK); WritableCellFormat wcf_cs = new WritableCellFormat(wf_cs); // 单元格定义 wcf_cs.setAlignment(Alignment.LEFT); // 设置对齐方式  wcf_cs.setVerticalAlignment(VerticalAlignment.TOP); wcf_cs.setWrap(true); wcf_cs.setBorder(jxl.format.Border.ALL,BorderLineStyle.MEDIUM,Colour.GREY_25_PERCENT); // 定义格式 字体 下划线 斜体 粗体 颜色 WritableFont wf_cn = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,Colour.BLACK); WritableCellFormat wcf_cn = new WritableCellFormat(wf_cn); // 单元格定义 wcf_cn.setAlignment(Alignment.RIGHT); // 设置对齐方式  wcf_cn.setVerticalAlignment(VerticalAlignment.TOP); wcf_cn.setBorder(jxl.format.Border.ALL,BorderLineStyle.MEDIUM,Colour.GREY_25_PERCENT); Label expLabel = null; // 头 expLabel = new Label(0, 0, "Employee Summary Report", wcf_h); sheet.addCell(expLabel); sheet.mergeCells(0,0,2,0); sheet.setRowView(0, 500); // 标题 for (int i = 0, j=0; i < expLabels.length; i++, j++) { expLabel = new Label(j, 1, expLabels[i], wcf_t); sheet.addCell(expLabel); } sheet.setRowView(1, 400); // 内容  EmployeesVORowImpl rowfield; rowfield = (EmployeesVORowImpl) empvo.first(); if (rowfield != null) { for (int i = 0; i < expFields.length; i++) //获取每个字段的数据类型String/Date/Number  { colClasses[i] = rowfield.getStructureDef().lookupAttributeDef(expFields[i]).getJavaType(); } } empvo.previous(); while (empvo.hasNext()) { rowfield = (EmployeesVORowImpl) empvo.next(); int rowcount = empvo.getCurrentRowIndex() + 2; for (int i = 0, j=0; i < expFields.length; i++, j++) { if (rowfield.getAttribute(expFields[i]) != null) { if (colClasses[i].equals(Class.forName("oracle.jbo.domain.Date"))) { expLabel = new Label(j, rowcount, rowfield.getAttribute(expFields[i]).toString(), wcf_cs); //Date类型格式  } else if (colClasses[i].equals(Class.forName("oracle.jbo.domain.Number"))) { expLabel = new Label(j, rowcount, rowfield.getAttribute(expFields[i]).toString(), wcf_cn); //Number类型格式  } else if (colClasses[i].equals(Class.forName("java.lang.String"))) { expLabel = new Label(j, rowcount, rowfield.getAttribute(expFields[i]).toString(), wcf_cs); //String类型格式  } } else { expLabel = new Label(j, rowcount, "", wcf_cs); } sheet.addCell(expLabel); } } sheet.setColumnView(0, 15); //设定栏位EmployeeId长度 sheet.setColumnView(1, 15); //设定栏位EmployeeNum长度 sheet.setColumnView(2, 20); //设定栏位EmployeeName长度 sheet.setColumnView(3, 15); //设定栏位Type长度 sheet.setColumnView(4, 15); //设定栏位HireDate长度 sheet.setColumnView(5, 15); //设定栏位Country长度 sheet.setColumnView(6, 15); //设定栏位Address长度 sheet.setColumnView(7, 10); //设定栏位Salary长度 //关闭服务 sheet.getSettings().setShowGridLines(false); workbook.write(); workbook.close(); fileos.close(); response.flushBuffer(); }catch(Exception ex){ empvo.setRangeStart(inId); empvo.setCurrentRow(currentRow); throw new OAException(ex.getMessage()); } }
 

三、测试运行


1. 点击导出ExportExcel

 

2. 页面出现保存文件提示框

 

3. 打开导出的Excel

 

Thanks and Regards

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
|
9月前
|
Python
Excel中如何批量重命名工作表与将每个工作表导出到单独Excel文件
本文介绍了如何在Excel中使用VBA批量重命名工作表、根据单元格内容修改颜色,以及将工作表导出为独立文件的方法。同时提供了Python实现导出工作表的代码示例,适用于自动化处理Excel文档。
|
11月前
|
人工智能 算法 安全
使用CodeBuddy实现批量转换PPT、Excel、Word为PDF文件工具
通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把
642 10
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
3559 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
文字识别 Serverless 开发工具
【全自动改PDF名】批量OCR识别提取PDF自定义指定区域内容保存到 Excel 以及根据PDF文件内容的标题来批量重命名
学校和教育机构常需处理成绩单、报名表等PDF文件。通过OCR技术,可自动提取学生信息并录入Excel,便于统计分析和存档管理。本文介绍使用阿里云服务实现批量OCR识别、内容提取、重命名及导出表格的完整步骤,包括开通相关服务、编写代码、部署函数计算和设置自动化触发器等。提供Python示例代码和详细操作指南,帮助用户高效处理PDF文件。 链接: - 百度网盘:[链接](https://pan.baidu.com/s/1mWsg7mDZq2pZ8xdKzdn5Hg?pwd=8866) - 腾讯网盘:[链接](https://share.weiyun.com/a77jklXK)
2115 5
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分到不同的工作表中。本文通过一个示例代码展示了如何生成一个包含总成绩表和三个班级表的Excel文件。代码首先创建了一个包含学生姓名、班级和各科成绩的数据框,然后按班级分组,将每个班级的数据分别写入不同的工作表。最后,生成的Excel文件将包含四个工作表,分别为总成绩表和三个班级的成绩表。
325 6
按条件将Excel文件拆分到不同的工作表
|
Python
批量将不同的工作簿合并到同一个Excel文件
本文介绍如何使用Python的`pandas`库批量合并不同工作簿至同一Excel文件。通过模拟生成三个班级的成绩数据,分别保存为Excel文件,再将这些文件合并成一个包含所有班级成绩的总成绩单。步骤包括安装必要库、生成数据、保存与合并工作簿。
458 6
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分为多个工作表。本文通过一个具体示例,展示了如何根据学生班级将成绩数据拆分到不同的工作表中,并生成一个包含总成绩表和各班级成绩表的Excel文件。代码简洁明了,适合初学者学习和应用。
537 6
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
320 1
|
9月前
|
Python
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
9月前
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。