单据设计导出excel(字段,标识,类型)原创
7人赞赏了该文章
1,448次浏览
编辑于2022年07月05日 19:17:12
项目中有时候需要导出单据的字段设计给到没有办法进入开发环境的其他开发人员。这时候需要我们开发一个导出功能,把字段,和字段标识,字段类型导出来。废话不多说直接上代码
public class Alltypes extends AbstractFormPlugin{ @Override public void registerListener(EventObject e) { // TODO Auto-generated method stub super.registerListener(e); this.addItemClickListeners("tbmain"); } @Override public void beforeItemClick(BeforeItemClickEvent evt) { // TODO Auto-generated method stub super.beforeItemClick(evt); if (evt.getItemKey().equals("exportapi")) { getPageAllData("exportdemo"); } } public Map getPageAllData(String formId){ List list=new ArrayList(); List listcaption=new ArrayList(); listcaption.add("字段名"); listcaption.add("标识"); listcaption.add("字段类型"); list.add(listcaption); HashMap<String, Object> map = new HashMap<>(); MainEntityType entityType=EntityMetadataCache.getDataEntityType(formId); FormMetadata taskMeta=(FormMetadata)MetadataDao.readRuntimeMeta(MetadataDao.getIdByNumber(entityType.getName(),MetaCategory.Form),MetaCategory.Form); List<ControlAp<?>>items=taskMeta.getItems(); for(ControlAp<?> item :items) { if(item instanceof FieldAp) { String key=item.getKey(); String name = item.getName().getLocaleValue(); Control control = this.getView().getControl(key); if(control!=null) { List listvalue=new ArrayList(); String type = control.getClass().getSimpleName(); listvalue.add(name); listvalue.add(key); listvalue.add(type); System.out.println(name+"------"+key+"----------"+type); list.add(listvalue); } } } // 创建excel XSSFWorkbook workbook = excel(list, "单据设计"); // 上传 String path = upload("exportdemo", workbook); //下载 getView().openUrl(RequestContext.get().getClientFullContextPath() + "/attachment/download.do?path=" + path); return map; } /** * excel生成 * @param excel 数据源,List<List<String>>,外层的list是行,里面的List<String>是列,存储value * excel.size()是行数,excel.get(n).size()是列数 * @return */ private XSSFWorkbook excel(List<List<String>> excel, String title) { //创建excel工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); //创建工作表sheet XSSFSheet sheet = workbook.createSheet(); //设置默认列宽 sheet.setDefaultColumnWidth(20); // 创建标题 XSSFRow headRow = sheet.createRow(0); XSSFCell headCell = headRow.createCell(0); headCell.setCellValue(title); // 设置首行标题的一些风格样式 XSSFCellStyle titleStyle = workbook.createCellStyle(); // 设置背景色 //设置填充方案 titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 正红色 //setBorder.setFillForegroundColor(new XSSFColor(Color.RED)); // 设置自定义填充颜色,天蓝色 titleStyle.setFillForegroundColor(new XSSFColor(new Color(255,255,255))); // 设置水平居中 titleStyle.setAlignment(HorizontalAlignment.CENTER); // 设置垂直居中 titleStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 设置字 XSSFFont font = workbook.createFont(); // 字体颜色橘红色 font.setColor(new XSSFColor(new Color(0 ,0,0))); // 设置字号 font.setFontHeight(15); // 设置字体 font.setFontName("微软雅黑"); titleStyle.setFont(font); headCell.setCellStyle(titleStyle); // 合并第1行的前几列,合并列数 = excel的列数 CellRangeAddress titleCellAddresses = new CellRangeAddress(0, 0, 0, excel.get(0).size()-1); sheet.addMergedRegion(titleCellAddresses); // 单据列表数据风格样式,设置字体为黑体,字号15 XSSFCellStyle billStyle = workbook.createCellStyle(); XSSFFont billFont = workbook.createFont(); billFont.setFontName("黑体"); billFont.setFontHeight(15); billStyle.setFont(billFont); //写入单据列表数据 for (int i = 0; i < excel.size(); i++) { // i+1是因为前面第1行加了一个标题,单据列表数据是从Excel的第2行开始的,所以要+1 XSSFRow nrow = sheet.createRow(i+1); for (int u=0;u<excel.get(i).size();u++){ XSSFCell ncell = nrow.createCell(u); ncell.setCellStyle(billStyle); ncell.setCellValue(excel.get(i).get(u)); } } return workbook; } /** * * @param entityName * @param workbook * @return path 路径 */ private String upload (String entityName, XSSFWorkbook workbook) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss"); String fileName = entityName + sdf.format(new Date()) + ".xlsx"; String pathName = "/offices/" + fileName; try { OutputStream outputStream = new ByteArrayOutputStream(); workbook.write(outputStream); InputStream inputStream = parse(outputStream); FileService fs = FileServiceFactory.getAttachmentFileService(); String path = fs.upload(new FileItem(fileName, pathName, inputStream)); return path; } catch (Exception e) { System.out.println(e.getMessage()); } return ""; } /** * outputStream转inputStream * @param out outputStream * @return inputStream * @throws Exception */ public ByteArrayInputStream parse(final OutputStream out) throws Exception { ByteArrayOutputStream baos = (ByteArrayOutputStream) out; final ByteArrayInputStream swapStream = new ByteArrayInputStream(baos.toByteArray()); return swapStream; }
效果预览
导出后的excel
赞 7
7人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!