由于工作需要,excel每次个工作表格式一样,每次手工填写太麻烦,于是想到了服务器自己来做这个工作。
protected HSSFWorkbook wb = null; protected HSSFSheet sheet; protected HSSFRow row = null; protected HSSFCell cell = null; public void export(String url,BailChargeDTO list,String sDate,String eDate, OutputStream output) throws Exception { POIFSFileSystem fs = null; try { fs = new POIFSFileSystem(new FileInputStream(url)); wb = new HSSFWorkbook(fs); int sdate = Integer.parseInt(sDate); int edate = Integer.parseInt(eDate); for(int date = sdate ; date <= edate ; ++date){ HSSFSheet fromsheet = wb.getSheet("template"); if (fromsheet != null && wb.getSheet(String.valueOf(date)) == null) { HSSFSheet newsheet = wb.createSheet(String.valueOf(date)); new PoiExcelSheetCopy().copyRows(wb, fromsheet, newsheet, fromsheet.getFirstRowNum(), fromsheet.getLastRowNum()); } sheet = wb.getSheet(String.valueOf(date));//获取工作表名字 row = sheet.createRow(1); Cell ztCell = row.createCell(0); ztCell.setCellValue(" 日期:" + date); // 创建单元格样式对象 HSSFCellStyle cellstyle = wb.createCellStyle(); HSSFCellStyle textstyle = wb.createCellStyle(); HSSFCellStyle sumstyle = wb.createCellStyle(); // 创建字体对象 Font dateFont = wb.createFont(); dateFont.setFontHeightInPoints((short)18); // 将字体大小设置为18px dateFont.setFontName("宋体"); // 将“华文行楷”字体应用到当前单元格上 dateFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); cellstyle.setFont(dateFont); // 将字体应用到样式上面 cellstyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT); ztCell.setCellStyle(cellstyle); // Font textFont = wb.createFont(); textFont.setFontHeightInPoints((short)18); // 将字体大小设置为18px textFont.setFontName("宋体"); // 将“华文行楷”字体应用到当前单元格上 textstyle.setFont(textFont); // 将字体应用到样式上面 textstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); Font suFont = wb.createFont(); suFont.setFontHeightInPoints((short)18); // 将字体大小设置为18px suFont.setFontName("宋体"); // 将“华文行楷”字体应用到当前单元格上 suFont.setColor(HSSFColor.RED.index); sumstyle.setFont(suFont); // 将字体应用到样式上面 sumstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // int rownum = 4; List<AgentAccountDetailDTO> dtoList = new BailChargeQueryExport().sortMap(list.getAgentAccount(),date).get(String.valueOf(date)); int len = dtoList.size(); for (int j = 0; j < len; j++) { AgentAccountDetailDTO dto = dtoList.get(j); row = sheet.createRow(rownum); row.setHeightInPoints(20); Cell c = row.createCell(0); Cell d = row.createCell(1); Cell e = row.createCell(2); Cell f = row.createCell(3); Cell h = row.createCell(4); Cell i = row.createCell(5); Cell k = row.createCell(6); Cell g = row.createCell(7); c.setCellValue(new HSSFRichTextString(String.valueOf(dto.getAgentName()))); d.setCellValue(dto.getAgentId()); e.setCellValue(dto.getAgentLink()); f.setCellValue(Double.parseDouble(dto.getRfee().toString())); // row.createCell(2).setCellValue(new HSSFRichTextString(dto.getRuser())); // row.createCell(4).setCellValue(dto.getRdate()); g.setCellValue(dto.getTransDesc()); c.setCellStyle(textstyle); d.setCellStyle(textstyle); e.setCellStyle(textstyle); f.setCellStyle(textstyle); g.setCellStyle(textstyle); h.setCellStyle(textstyle); i.setCellStyle(textstyle); k.setCellStyle(textstyle); // rownum++; } row = sheet.createRow(rownum); sheet.setForceFormulaRecalculation(true); row.setHeightInPoints(20); Cell c = row.createCell(0); c.setCellValue("总数"); c.setCellStyle(sumstyle); Cell sum = row.createCell(3); sum.setCellType(HSSFCell.CELL_TYPE_FORMULA);//设置为公式 // 设置公式内容 String formula = "SUM(D5:D"+ rownum +")";//计算一列总数 if(HSSFCell.CELL_TYPE_FORMULA == sum.getCellType()){ sum.setCellFormula(formula); } sum.setCellStyle(sumstyle); } wb.setActiveSheet(1);//激活滴2个工作表,保存打开 wb.write(output); } catch (IOException e) { throw new Exception("服务器报表文件位置异常,请报告管理员!谢谢!"); }
} //对数据筛选 public Map<String ,List<AgentAccountDetailDTO>> sortMap(List<AgentAccountDetailDTO> list, int sdate){ Map<String ,List<AgentAccountDetailDTO>> map = new HashMap<String ,List<AgentAccountDetailDTO>>(); List<AgentAccountDetailDTO> dtoList = new ArrayList<AgentAccountDetailDTO>(); //重新声明一个数组list for(Iterator<AgentAccountDetailDTO> it = list.iterator();it.hasNext();){ AgentAccountDetailDTO dto = (AgentAccountDetailDTO)it.next(); if(Integer.parseInt(dto.getRdate()) == (sdate)){ //如果已经存在这个数组,就放在这里 dtoList.add(dto); } } map.put(String.valueOf(sdate), dtoList); return map; }
WPS 打开不能自动求和,ms excel 打开后可以自动求和。
相关推荐
### POI Excel 模板读取并导出带公式的Excel文档 #### 一、概述 在实际工作中,经常需要批量处理数据,并将其导出到Excel文件中,特别是在需要复杂计算的情况下,例如工资单、统计数据汇总等场景。利用Apache POI...
在这个特定的例子中,我们将讨论如何使用POI库基于一个Excel模板文件循环输出数据行,并将结果导出为新的Excel文件。 首先,我们需要理解POI库的基本概念。POI提供了HSSF(Horizontally SpreadSheet Format)和XSSF...
在"Java操作Excel之Poi模板导入导出"这个主题中,我们将深入探讨如何使用POI库来处理Excel模板,并进行数据的导入和导出。 首先,了解Excel模板的基本概念。模板通常包含预定义的样式、格式和计算,开发人员可以...
在本教程中,我们将重点讨论如何利用Apache POI 3.13版本来导出Word文档,并结合图片操作。 首先,Apache POI提供了一个叫做HWPF(Horrible Word Processor Format)的API来处理老版的Word(.doc)文件,而XWPF...
本篇文章将详细探讨如何利用POI库基于模板来导出Excel文档。 首先,我们需要理解Apache POI的工作原理。POI提供了HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format)两个组件,分别用于处理老...
标题中的“poi包 EXCEL模板读取填数据并导出以及在模板某行插入新的行”涉及到了Apache POI库的使用,这是一个Java API,专门用于处理Microsoft Office格式的文件,如Excel。以下是对这个主题的详细解释: Apache ...
在描述中提到的博客链接(已提供但无法直接访问)可能详细介绍了使用POI进行模板导出Excel的具体步骤和示例代码。虽然我们无法直接查看博客内容,但根据通常的实践,我们可以推测以下关键点: 1. **创建模板**:首先...
3. **处理样式和格式**:如果模板中包含特定的样式或格式,可以使用`CellStyle`和`Font`对象来复制或修改。例如: ```java CellStyle style = cell.getCellStyle(); style.setFont(style.getFont().deriveFont...
总的来说,使用Apache POI库,我们可以灵活地根据Excel模板生成新的数据表,这在数据报告、批量导入导出等场景中非常实用。通过深入理解POI的API和Excel文件结构,我们可以实现更复杂的功能,满足各种业务需求。在...
在这个项目中,我们将会探讨如何使用POI API来生成PPT文件,特别是通过模板的方式。以下是详细的步骤和知识点。 1. **Apache POI介绍**: Apache POI 是一个开源项目,它提供了Java API来处理Microsoft Office格式...
POI 操作 PPT 文档(导入、导出、读取、添加、拼接、替换文本、页面排序) POI(Apache POI)是一款开源的Java库,用于读取和写入各种Microsoft Office文件格式,包括PPT文档。本文档将介绍如何使用POI操作PPT文档...
本实例将深入探讨如何利用Apache POI库基于Excel模板进行数据的导入和导出。 1. **创建Excel模板** 在此实例中,你需要有一个预先设计好的Excel模板。这个模板可能包含固定格式的表格、样式、公式等,作为数据导入...
网络上的根据模板填充Word我都看过一些, 它们的功能在数据换行的时候用的是run对象的.addCarriageReturn()方法,或者是直接用\n实现换行。这些都不符合我的需求, 因为我要的是分段,而不是换行。换行的word导致另一...
Java根据模板导出Excel报表并复制模板生成多个Sheet页 本文主要介绍了Java根据模板导出Excel报表并复制模板生成多个Sheet页的方法,具有很好的参考价值。本工具类使用的场景为根据提供的模板来导出Excel报表并且可...
对于导出,你可以创建一个新的Workbook对象,复制模板工作表,填充数据,最后保存为新的Excel文件。对于导入,你需要读取上传的Excel文件,解析每一行的数据,验证其格式和内容,然后将有效数据存入数据库。 4. **...
### POI 导出 Excel 的实现原理与代码详解 #### 一、概述 Apache POI 是一个用于读写 Microsoft Office 格式文件的 Java API,包括 Word、Excel 和 PowerPoint 文件等。本文主要介绍如何利用 POI 实现 Excel 文件...
4. **模板操作**:在程序中,我们可以先加载模板文件,然后在已存在的工作表中填充数据,或者创建新的工作表并复制模板样式。这涉及到Sheet、Row和Cell对象的操作,以及HSSFCell或XSSFCell接口的使用。 5. **数据...
在具体实现时,可以创建一个模板Excel文件,预设好复杂的样式,然后通过POI读取模板并复制样式,再根据需要填充数据。这样既可以保持样式的一致性,又能高效地处理数据。 总之,Apache POI为Java开发者提供了强大的...
总结起来,"SpringMvc+POI的Excel文件导入导出"涉及到的关键技术包括Spring MVC的文件上传处理、Apache POI的Excel读写操作、以及模板填充和导出。通过熟练掌握这些技术,开发者能够高效地处理企业级应用中的Excel...
// 复制模板到新工作簿 Sheet templateSheet = templateWorkbook.getSheetAt(0); Sheet dataSheet = dataWorkbook.cloneSheet(0); // 替换占位符 for (Row row : dataSheet) { for (Cell cell : row) { if ...