100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Java Excel 合并单元格 Java Excel 实现尾部添加数据 Java Excel 合并单元格

Java Excel 合并单元格 Java Excel 实现尾部添加数据 Java Excel 合并单元格

时间:2020-06-26 10:21:12

相关推荐

Java Excel 合并单元格 Java Excel 实现尾部添加数据 Java Excel 合并单元格

Java Excel 合并单元格 Java Excel 实现尾部添加数据 Java Excel 合并单元格 添加数据

一、前言

最近的工作中,遇到一个需求,在生成的Excel表格后,需要在尾部添加 一个合并的单元格数据。 因生成的表格 行数 不确定,可以将需求理解为:导出Excel后,需要在尾部动态添加一行内容。

分析:

导出 Excel 文件,现有功能,可以直接实现 ,比如参考这个。尾部的单元格,需要合并功能,且需要换行,支持行高,字体配置等。生成数据行数不确定,尾部内容需要在生成数据后添加

二、代码实现

1、Excel 合并单元格 伪代码如下:

sheet.addMergedRegion(new CellRangeAddress(起始行,终止行,起始列,终止列));

2、创建一个 ExcelConfig 类,用于 excel 单元格合并 相关配置

/*** Description: Excel 合并单元格的配置* @author w* @version 1.0* @date /8/23 9:25*/public class ExcelConfig {private List<Ext> extList;public static class Ext{private Integer offsetDown ; // 字体下移的位置private String color ; // 字体颜色: RED 红色 【可选】private String content ; // 添加的内容private Float height ; // 行高 【可选】private String fontName ; // 字体名称 【可选】// ignore getter , setter}public List<Ext> getExtList() {return extList;}public void setExtList(List<Ext> extList) {this.extList = extList;}}

3、完成的测试代码如下 , 核心方法:processExt

package poi.test;import mon.collect.Lists;import mons.lang3.StringUtils;import org.apache.poi.ss.usermodel.*;import org.apache.poi.ss.util.CellRangeAddress;import org.apache.poi.xssf.streaming.SXSSFCell;import org.apache.poi.xssf.streaming.SXSSFRow;import org.apache.poi.xssf.streaming.SXSSFSheet;import org.apache.poi.xssf.streaming.SXSSFWorkbook;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/*** Description: poi excel 尾部添加合并内容* <br> excel 合并单元格 测试 excel merge cell* @author w* @version 1.0* @date /8/23 10:35*/public class ExcelMergeTest {public static void main(String[] args) throws IOException {genExcelTest();}/*** @Description: 生成 合并格式的excel 文件* @return void* @version v1.0* @author wu* @date /8/23 10:36*/private static void genExcelTest() throws IOException {SXSSFWorkbook workbook = new SXSSFWorkbook();SXSSFSheet sheet = workbook.createSheet("第一页");// 开始写入的行数SXSSFRow headerRow = sheet.createRow(0);List<String> headerList = Arrays.asList("姓名", "年龄", "addr");for (int i = 0; i < headerList.size(); i++) {SXSSFCell cell = headerRow.createCell(i);cell.setCellValue(headerList.get(i));}// 行数数据List<User> rowList = loadRowList();// 加载行数据loadRowData(workbook,sheet,rowList);// 处理尾部合并的数据processExt(workbook,sheet,headerList,rowList);// 导出文件String fileName = "D:\\文件导出" +System.currentTimeMillis()+".xlsx" ;FileOutputStream out = new FileOutputStream(new File(fileName));workbook.write(out);workbook.dispose();}/*** @Description: 处理 excel 单元格 合并、扩展内容* @param workbook* @param sheet* @param headerList 表头* @param rowList* @return void* @version v1.0* @author wu* @date /8/25 21:24*/private static void processExt(SXSSFWorkbook workbook, SXSSFSheet sheet, List<String> headerList, List<User> rowList) {// 加载合并的配置ExcelConfig config = loadExtList();List<ExcelConfig.Ext> extList = config.getExtList();// 计算 表头长度 、 内容数据长度int headerSize = headerList.size();int rowSize = rowList.size();for (ExcelConfig.Ext e : extList) {int rowIndex = rowSize + e.getOffsetDown();// 创建 合并的区域sheet.addMergedRegion(new CellRangeAddress(rowIndex,rowIndex,0,headerSize));SXSSFRow row = sheet.createRow(rowIndex);SXSSFCell cell = row.createCell(0); // 合并后的单元格cell.setCellValue(e.getContent());// 属性相关的配置CellStyle cellStyle = workbook.createCellStyle();Font font = workbook.createFont();// 配置字体if(StringUtils.isNotBlank(e.getFontName())){font.setFontName(e.getFontName());}// 配置字体颜色if(StringUtils.isNotBlank(e.getColor())){if("RED".equals(e.getColor())){font.setColor(Font.COLOR_RED);}}// 配置行高if(null != e.getHeight()){row.setHeightInPoints(e.getHeight());}// 额外相关的配置cellStyle.setWrapText(true);cellStyle.setAlignment(HorizontalAlignment.LEFT); // 对齐方式cellStyle.setVerticalAlignment(VerticalAlignment.TOP);// 完成配置cellStyle.setFont(font);cell.setCellStyle(cellStyle);}}/*** @Description: 加载 Excel 合并相关的配置信息* @return poi.test.ExcelConfig* @version v1.0* @author wu* @date /8/25 21:25*/private static ExcelConfig loadExtList() {ExcelConfig excelConfig = new ExcelConfig();ExcelConfig.Ext ext = new ExcelConfig.Ext();ext.setColor("RED");ext.setContent(" 内容红色的字体 -- 全部配置");ext.setOffsetDown(1);ext.setHeight(33F);ext.setFontName("黑体");ExcelConfig.Ext ext2 = new ExcelConfig.Ext();ext2.setContent(" 最简单的 部分配置 ");ext2.setOffsetDown(3);ArrayList<ExcelConfig.Ext> list = Lists.newArrayList();list.add(ext);list.add(ext2);excelConfig.setExtList(list);return excelConfig;}/*** @Description: excel 填充数据* @param workbook* @param sheet* @param rowList* @return void* @version v1.0* @author wu* @date /8/25 21:25*/public static void loadRowData(Workbook workbook, Sheet sheet, List<User> rowList) {int startRow = 1 ;for (int i = 0; i < rowList.size(); i++) {User user = rowList.get(i);Row row = sheet.createRow(i + startRow);Cell cell0 = row.createCell(0);cell0.setCellValue(user.getName());Cell cell1 = row.createCell(1);cell1.setCellValue(user.getAge());Cell cell2 = row.createCell(2);cell2.setCellValue(user.getAddr());}}/*** @Description: 加载 rowList 数据* @return java.util.List<poi.test.User>* @version v1.0* @author wu* @date /8/25 21:26*/public static List<User> loadRowList() {ArrayList<User> rowList = Lists.newArrayList();rowList.add(new User("小明",18,"北京市"));rowList.add(new User("小狗",22,"河北省"));rowList.add(new User("小猫",33,"天津市"));return rowList;}}

4、测试后的效果如下:

5、可以在指定位置完成数据填充,说明满足需求。

三、总结

1、本文示例代码是基于poi 3.16版本,原汁原味,没有其他的任何添加剂 。。。

2、重点关注:loadExtList方法中excel 合并部分内容的配置; 和processExt方法中,对于配置的处理 ;功能应用上,可以将ExcelConfig.Ext类的配置,转换为JSON文件,改成配置,可以根据情况进行调整。

3、配置中,文字要实现换行,可以用\n来实现换行;文字 加粗、靠右、居中 等效果还未找到办法来配置...

4、excel软件中操作时,可以通过ALT+Enter键实现换行。

Java Excel 合并单元格 Java Excel 实现尾部添加数据 Java Excel 合并单元格 添加数据 poi excel 合并单元格

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。