精华内容
下载资源
问答
  • 设置表格字体颜色、数据格式、对齐方式、添加批注、合并拆分单元格、内容自适应、合并单元格、换行
  • php根据excel模板导出excel合并单元格,根据模板导出会少写很样式的代码,非常方便
  • EPPlus功能齐全,太过臃肿,特别是对单元格合并比较复杂,我只需要简单的一个导出Excel的功能,所以进行了封装。 1.下载解压可直接运行项目 2.运行示例,访问api:GET ...
  • 主要给大家介绍了关于java实现合并单元格的同时并导出excel的相关资料,文中先进行了简单的介绍,之后给出了详细的示例代码,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
  • easyuiPoi 通过模板导出Excel、支持纵向合并单元格(合并重复内容)。压缩包包含公共工具类、示例模板、调用截图。
  • excel poi工具类 导入 导出 合并单元格 计算公式
  • 导出excel合并单元格

    2020-12-02 17:42:32
    * 导出excel工具类(支持合并单元格) * * @author yulisao * @createDate 2020年11月16日 */ public class mergeCellUtil { private static final short FONT_SIZE_TITLE = 14; //标题字体大小 private ...

    以前做了很多导出excel 的功能,最近做了一个业务报表导出,要求合并单元格。今天花了一点时间整理成工具类,并测试后分享一下。

    测试主类:
    主要通过mergeCellUtil.mergeCell(fileName, sheetName, rowName, content, mergeHear, mergeFoot, img);调用。传参含义如下:

    fileName:excel完整输出路径
    sheetName: excel文件名和sheet表格名
    rowName: 表头(标题行)
    content: 数据行(可选,数据正文)
    mergeHear: 表头上面的行(可选,统计日期之类的信息)
    mergeFoot: 数据行下面的行(可选,备注说明之类的信息)
    img: 插入图片(可选,统计图表,印章之类)

    下面测试示例:

    1.完整的测试主类

    package ExcelTest;
    
    import java.util.List;
    import java.util.Map;
    
    /**
     * 横跨单元格主测试
     * 
     * @author yulisao
     * @createDate 2020年11月16日
     */
    public class mergeCellTest{
    
    	public static void main(String[] args) {
    		List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
    
    		String sheetName = "学生成绩信息统计表";// sheet名
    		String fileName = "C:\\Users\\Administrator\\Desktop\\excel\\"+sheetName+".xls";// excel输出路径
    		String[] rowName = { "学校", "姓名", "学号", "手机", "课程", "分数", "是否及格" };// excel标题
    
    		String[][] content = new String[5][rowName.length];
    		for (int i = 0; i < 5; i++) {
    			int score = (int) (Math.random() * 101);
    			content[i][0] = "某某学校";
    			content[i][1] = "姓名-" + i;
    			content[i][2] = "学号-" + i;
    			content[i][3] = "手机-" + i;
    			content[i][4] = "课程-" + i;
    			content[i][5] = score + "";
    			content[i][6] = score > 60 ? "及格" : "不及格";
    		}
    
    		String[][] mergeHear = new String[3][2];
    		mergeHear[0][0] = "0,0,0,7";
    		mergeHear[0][1] = "合并测试统计表";
    		mergeHear[1][0] = "1,1,0,3";
    		mergeHear[1][1] = "统计日期:2020-11-16";
    		mergeHear[2][0] = "1,1,5,7";
    		mergeHear[2][1] = "统计人:yulisao";
    
    		String[][] mergeFoot = new String[9][2];
    		mergeFoot[0][0] = "8,8,0,0";
    		mergeFoot[0][1] = "班级";
    		mergeFoot[1][0] = "8,8,1,1";
    		mergeFoot[1][1] = "1201班";
    		mergeFoot[2][0] = "8,8,3,3";
    		mergeFoot[2][1] = "负责老师";
    		mergeFoot[3][0] = "8,8,4,4";
    		mergeFoot[3][1] = "张三";
    		mergeFoot[4][0] = "8,8,6,6";
    		mergeFoot[4][1] = "院长";
    		mergeFoot[5][0] = "8,8,7,7";
    		mergeFoot[5][1] = "李四";
    		mergeFoot[6][0] = "9,9,0,7";
    		mergeFoot[6][1] = "注意:";
    		mergeFoot[7][0] = "10,10,0,7";
    		mergeFoot[7][1] = "1.本统计表是随机生产的分数";
    		mergeFoot[8][0] = "11,11,0,7";
    		mergeFoot[8][1] = "2.样式可以自行设计";
    		
    		String [] img = {"C:\\Users\\Administrator\\Desktop\\excel\\img.png", "5,5,14,8"};
    
    		mergeCellUtil.mergeCell(fileName, sheetName, rowName, content, mergeHear, mergeFoot, img);
    	}
    
    }
    
    

    效果图:
    在这里插入图片描述
    注意点:

    • 此处数据正文我是随机生成了一些数据,真正使用的时候先查数据,然后把查到的数据集放到二维数组content 里面去。
    • 表格的第一列会自动添加序号列,所以rowName里面无需序号
    • rowName的元素个数要和数据正文content 里面的元素格式一致,避免数组越界错误
    • mergeHear若使用,第一个元素的坐标位置的起始行位置从0开始往后递增。
    • mergeFoot若使用,则需要自己计算好第一个元素坐标位置的起始行位置,计算方法是row=mergeHear行数+1(表头只有一行)+content行数,至少从row行开始往后递增。若mergeFoot的起始行坐标小于row则会覆盖上面的数据正文行。
    • mergeHear和mergeHear的起始列坐标,根据总列数自行分配。但结束列不要大于rowName元素个数。
    • img如果是要覆盖在表格正文上的,就要处理成透明背景图,不然遮盖图片下面的单元格
    • img的第二个元素是图片的坐标,可以是两个数也可以是四个数。建议使用四个数的坐标,即指定了图片的四个角所在单元格行列。因为它可以控制好图片的大小,但要调试一下图片的坐标以免图片太窄或者太扁使之四方四正的一个图。而两个数字的坐标,表示只指定图片的开始行和列,根据图片大小自动确定结束行和列,不同的图片在excel里面占据面积不可控
    • 表格的样式依个人喜欢可以设计很多,工具类里面有些设置样式的方法并没有使用,有需要的可以去调试下看效果。更多的样式设计也可以去网上搜索,这里只写了区区几个抛砖引玉
    • 如果因为样式或其中枚举有红色波浪线找不到依赖,可以用最后一个方法。CellStyle和HSSFCellStyle都可以用于cell.setCellStyle()。HSSFCell有的CellStyle也有,写法略微不同。CellStyle的更多样式也很多这里就不过多列举了。

    2.只有表头和数据正文,调用方法mergeCellUtil.mergeCell(fileName, sheetName, rowName, content, null, null, null);
    在这里插入图片描述
    3.无正文数据,调用方法mergeCellUtil.mergeCell(fileName, sheetName, rowName, null, mergeHear, mergeFoot, null);mergeFoot的坐标是从3(mergeHear2行+表头行1行+数据行0行=3)开始的,自行根据公式计算。
    在这里插入图片描述

    工具类 mergeCellUtil.java

    package ExcelTest;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import org.apache.commons.io.FileUtils;
    import org.apache.commons.lang.StringUtils;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.util.CellRangeAddress;
    import org.apache.poi.ss.usermodel.CellStyle;
    import org.apache.poi.ss.usermodel.ClientAnchor;
    import org.apache.poi.ss.usermodel.CreationHelper;
    import org.apache.poi.ss.usermodel.Drawing;
    import org.apache.poi.ss.usermodel.Picture;
    import org.apache.poi.ss.usermodel.Workbook;
    
    /**
     * 导出excel工具类(支持合并单元格)
     * 
     * @author yulisao
     * @createDate 2020年11月16日
     */
    public class mergeCellUtil {
    	
    	private static final short FONT_SIZE_TITLE = 14; //标题字体大小
    	private static final short FONT_SIZE_HEAD = 10; // 表头字体大小
    	private static final short FONT_SIZE_EXCEL = 10; // 正文字体大小
    	private static final short FONT_SIZE_FOOT = 8; // 结尾字体大小
    	
    	private static short BORDER_COLOR = 11; // 单元格边框颜色,必须大于10
    	
    	private static final short EXCEL_COLUMN_WIDTH_FACTOR = 256;
        private static final int UNIT_OFFSET_LENGTH = 7;
        private static final int[] UNIT_OFFSET_MAP = new int[] { 0, 36, 73, 109, 146, 182, 219 };
     
    
        /**
         * 导出excel(支持合并单元格)
         * 
         * @param filePath 输出路径
         * @param sheetName 文件名称
         * @param rowName 表头标题行字符串数组
         * @param dataArry 数据正文二维数据
         * @param mergeHear 表头标题行 上面行 字符串二维数组(比如大标题,统计日期等信息), 元素1=单元格坐标(格式:起始行,结束行,起始列,结束列),元素2=单元格内容
         * @param mergeFoot 数据正文 下面行 字符串二维数组(比如合计,备注说明等信息),元素1=单元格坐标(格式:起始行,结束行,起始列,结束列),元素2=单元格内容
         * @param img 图片字符串数组(公章,统计图表等) 元素1=图片路径,元素2=图片坐标(格式:起始行,起始列,结束行,结束列)
         */
        public static void mergeCell(String filePath, String sheetName,
    			String[] rowName, String[][] dataArry, String[][] mergeHear,
    			String[][] mergeFoot, String [] img) {
    		// 参数检查
    		if (StringUtils.isBlank(filePath) || rowName.length == 0 ) {
    			return;
    		}
    
    		HSSFWorkbook wb = new HSSFWorkbook(); // 新建HSSFWorkbook
    
    		HSSFSheet sheet = wb.createSheet(sheetName); // 新建sheet
    
    		HSSFRow row = null; // 声明行对象
    		HSSFCell cell = null; // 声明列对象
    		int totalRowSize = 0; // 总行数
    
    		/** 标题以及附属行 */
    		if (!arrayIsNullOrEmpty(mergeHear)) {
    
    			int nextRow = 0; // 下一行行数
    			for (int i = 0; i < mergeHear.length; i++) {
    				String mergeInfo = mergeHear[i][0]; // 需要合并的第n行
    				String cellText = mergeHear[i][1]; // 需要填充的内容
    
    				try {
    					String[] range = mergeInfo.split(",");
    					int begRow = Integer.parseInt(range[0]);
    					int endRow = Integer.parseInt(range[1]);
    					int begCol = Integer.parseInt(range[2]);
    					int endCol = Integer.parseInt(range[3]);
    
    					if (nextRow == endRow) { // 下一行与当前行相同,则创建行,同行不创建
    						row = sheet.createRow(i); // 创建第n行
    						nextRow += 1;
    					}
    
    					// 合并单元格
    					CellRangeAddress cellRangeAddress = new CellRangeAddress(
    							begRow, endRow, begCol, endCol);// 起始行,结束行,起始列,结束列
    					sheet.addMergedRegion(cellRangeAddress);
    					// 第一行的单元格
    					cell = row.createCell(begCol);
    					cell.setCellValue(cellText);
    					
    					if (nextRow == 1) { // 第一行 样式
    						cell.setCellStyle(setDefaultHeadCenterStyle(wb)); // 设置标题样式 
    					} else { // 其他行样式
    						cell.setCellStyle(setDefaultHeadLeftStyle(wb)); // 设置表头样式 
    					}
    				} catch (Exception e) {
    					System.out.println(e.getMessage());
    					e.printStackTrace();
    				}
    
    			}
    
    			totalRowSize = nextRow;
    		}
    
    		/** 表头 */
    		row = sheet.createRow(totalRowSize);
    		// 自动添加首列-序号
    		cell = row.createCell(0);
    		cell.setCellValue("序号");
    		cell.setCellStyle(setDefaultTitleCenterStyle(wb)); // 设置标题行样式 
    		
    		// 创建表头标题
    		for (int i = 0; i < rowName.length; i++) {
    			cell = row.createCell(i + 1);
    			cell.setCellValue(rowName[i]);
    			cell.setCellStyle(setDefaultTitleCenterStyle(wb)); // 设置标题行样式 
    		}
    
    		totalRowSize += 1;
    
    		/** 数据正文 */
    		if (!arrayIsNullOrEmpty(dataArry)) {
    			// 创建数据正文内容
    			for (int i = 0; i < dataArry.length; i++) {
    				row = sheet.createRow(i + totalRowSize); // 开始创建数据行
    				cell = row.createCell(0);
    				cell.setCellValue(i + 1);
    				cell.setCellStyle(setDefaultContextStyle(wb)); // 第一列正文左对齐
    				for (int j = 0; j < dataArry[i].length; j++) { // 数据列
    					// 将内容按顺序赋给对应的列对象
    					cell = row.createCell(j + 1);
    					cell.setCellValue(dataArry[i][j]);
    					cell.setCellStyle(setDefaultContextStyle(wb)); // 第一列正文左样式
    				}
    			}
    			totalRowSize += dataArry.length;
    		}
    
    		/** 表结尾汇总或者说明 */
    		if (!arrayIsNullOrEmpty(mergeFoot)) {
    
    			int nextRow = totalRowSize;
    			for (int i = 0; i < mergeFoot.length; i++) {
    				String mergeInfo = mergeFoot[i][0]; // 需要合并的第n行
    				String cellText = mergeFoot[i][1]; // 需要填充的内容
    
    				try {
    					String[] range = mergeInfo.split(",");
    					int begRow = Integer.parseInt(range[0]);
    					int endRow = Integer.parseInt(range[1]);
    					int begCol = Integer.parseInt(range[2]);
    					int endCol = Integer.parseInt(range[3]);
    
    					if (nextRow == endRow) { // 下一行与当前行相同,则创建行,同行不创建
    						row = sheet.createRow(nextRow); // 创建第n行
    						nextRow += 1;
    					}
    
    					// 合并单元格
    					CellRangeAddress cellRangeAddress = new CellRangeAddress(
    							begRow, endRow, begCol, endCol);// 起始行,结束行,起始列,结束列
    					sheet.addMergedRegion(cellRangeAddress);
    					// 第n行的单元格
    					cell = row.createCell(begCol);
    					cell.setCellValue(cellText);
    					cell.setCellStyle(setDefaultFootStyle(wb)); // 设置底部样式
    				} catch (Exception e) {
    					System.out.println(e.getMessage());
    				}
    
    			}
    			
    			totalRowSize = nextRow;
    		}
    		
    		/** 添加图片 */
            if (img != null && img.length != 0) {
    			try {
    				byte[] bt = FileUtils.readFileToByteArray(new File(img[0]));
    				String [] location = img[1].split(",");
    				
    	            int pictureIdx = wb.addPicture(bt, Workbook.PICTURE_TYPE_PNG);
    	            CreationHelper helper = wb.getCreationHelper();
    	            Drawing drawing = sheet.createDrawingPatriarch();
    	            ClientAnchor anchor = helper.createClientAnchor();
    	            anchor.setDx1(pixel2WidthUnits(60));
    	            anchor.setDy1(pixel2WidthUnits(60));
    	            
    	            anchor.setRow1(Integer.parseInt(location[0])); //图片开始行数
    	            anchor.setCol1(Integer.parseInt(location[1])); //图片开始列数
    	            if (location.length > 2) { // 指定图片位置和大小
    	            	anchor.setRow2(Integer.parseInt(location[2]));//图片结束行数
    		            anchor.setCol2(Integer.parseInt(location[3])); //图片结束列数
    		            drawing.createPicture(anchor, pictureIdx);
    				} else { // // 指定图片位置,大小自动拓展
    		            Picture picture = drawing.createPicture(anchor, pictureIdx); // 浮动设计
    		            picture.resize();// 自动拓展
    				}
    	            
    			} catch (IOException e) {
    				e.printStackTrace();
    				System.err.println("添加图片异常");
    			}
    		}
            
    		
    		/** 整体样式设置  */
            for(int i = 0; i < totalRowSize; i++) { // 设置行高
                row = sheet.getRow(i);
                row.setHeightInPoints(20);
                
                for(int j = 0; j < rowName.length + 1; j++) { // 设置边框
                    cell = row.getCell(j);
                }
            }
            for(int j = 0; j < rowName.length + 1; j++) { // 设置列宽
                sheet.setColumnWidth(j, pixel2WidthUnits(120));
            }
            for(int i = 0; i < totalRowSize; i++) { // 设置行高
            	row = sheet.getRow(i);
            	for(int j = 0; j < rowName.length + 1; j++) { // 设置行高
                    row = sheet.getRow(i);
                    row.setHeightInPoints(20);
                }
            }
            
    		// 输出文件流
    		try {
    			wb.write(new FileOutputStream(filePath));
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		
    		System.out.println("文件成功导出至:" + filePath);
    	}
        
    	/**
    	 * 判断二维数组是否空
    	 * 
    	 * @param arr
    	 * @return
    	 */
    	private static boolean arrayIsNullOrEmpty(String[][] arr) {
    		if (arr == null || arr.length == 0)
    			return true;
    		int len = arr.length;
    		for (int i = 0; i < len; i++) {
    			if (arr[i] != null && arr[0].length != 0)
    				return false;
    		}
    		return true;
    	}
    	
        /**
         * 默认表表头样式
         * 
         * @param wb
         * @return
         */
        private static HSSFCellStyle setDefaultHeadCenterStyle(HSSFWorkbook wb) {
    		HSSFCellStyle hssfCellStyle = wb.createCellStyle();  
    		hssfCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 设置单元格对齐方式 居中
    		
    		hssfCellStyle.setFillForegroundColor(BORDER_COLOR); //BORDER_COLOR背景颜色下标值
    		hssfCellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
    		
    		HSSFFont font = wb.createFont();
    		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 加粗
    		font.setFontHeightInPoints(FONT_SIZE_TITLE); // 字体大小
    		hssfCellStyle.setFont(font);
    		
    		return hssfCellStyle;
    	}
        
        /**
         * 默认表头样式
         * 
         * @param wb
         * @return
         */
        private static HSSFCellStyle setDefaultHeadLeftStyle(HSSFWorkbook wb) {
    		HSSFCellStyle hssfCellStyle = wb.createCellStyle(); 
    		hssfCellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); // 设置单元格对齐方式 左
    		
    		HSSFFont font = wb.createFont();
    		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 加粗
    		font.setFontHeightInPoints(FONT_SIZE_HEAD); // 字体大小
    		hssfCellStyle.setFont(font);
    
    		return hssfCellStyle;
    	}
        
        /**
    	 * @param wb
    	 * @return
    	 */
    	private static HSSFCellStyle setDefaultTitleCenterStyle(HSSFWorkbook wb) {
    		HSSFCellStyle hssfCellStyle = wb.createCellStyle(); 
    		hssfCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 设置单元格对齐方式 居中
    		
    		HSSFFont font = wb.createFont();
    		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 加粗
    		font.setFontHeightInPoints(FONT_SIZE_HEAD); // 字体大小
    		
    		hssfCellStyle.setFont(font);
    
    		return hssfCellStyle;
    	}
    	
        /**
         * 设置默认正文数据样式
         * 
         * @param wb
         * @return
         */
        private static HSSFCellStyle setDefaultContextStyle(HSSFWorkbook wb) {
    		HSSFCellStyle hssfCellStyle = wb.createCellStyle(); 
    		hssfCellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); // 设置单元格对齐方式 左
    		
    		HSSFFont font = wb.createFont();
    		font.setFontHeightInPoints(FONT_SIZE_EXCEL); // 字体大小
    		hssfCellStyle.setFont(font);
    
    		return hssfCellStyle;
    	}
        
        /**
         * 设置默认底部样式
         * 
         * @param wb
         * @return
         */
        private static HSSFCellStyle setDefaultFootStyle(HSSFWorkbook wb) {
    		HSSFCellStyle hssfCellStyle = wb.createCellStyle(); 
    		hssfCellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); // 设置单元格对齐方式 左
    		
    		HSSFFont font = wb.createFont();
    		font.setFontHeightInPoints(FONT_SIZE_FOOT); // 字体大小
    		hssfCellStyle.setFont(font);
    
    		return hssfCellStyle;
    	}
        
        /**
         * 设置列宽
         * 
         * @param pxs
         * @return
         */
        private static short pixel2WidthUnits(int pxs) {
            short widthUnits = (short) (EXCEL_COLUMN_WIDTH_FACTOR * (pxs / UNIT_OFFSET_LENGTH));
            widthUnits += UNIT_OFFSET_MAP[(pxs % UNIT_OFFSET_LENGTH)];
            return widthUnits;
        }
    
    	/**
    	 * 设置单元格对齐方式
    	 * 
    	 * @param wb
    	 * @param style
    	 * @return
    	 */
    	private static HSSFCellStyle setAlignStyle(HSSFWorkbook wb, short style) {
    		HSSFCellStyle hssfCellStyle = wb.createCellStyle(); // 设置单元格对齐方式
    		hssfCellStyle.setAlignment(style); // 创建一个居中格式
    
    		return hssfCellStyle;
    	}
    
    	/**
    	 * 设置字体
    	 * 
    	 * @param wb
    	 * @param style
    	 * @return
    	 */
    	private static HSSFCellStyle setFontStyle(HSSFWorkbook wb, short fontSize) {
    		HSSFCellStyle hssfCellStyle = wb.createCellStyle();
    		HSSFFont font = wb.createFont();
    		font.setItalic(true); // 是否斜体
    		font.setUnderline(HSSFFont.U_SINGLE); // 下滑线
    		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 加粗
    		font.setFontHeightInPoints(fontSize); // 字体大小
    		// other style....
    		hssfCellStyle.setFont(font);
    		return hssfCellStyle;
    	}
    	
    	private static HSSFCellStyle setBorderStyle(HSSFWorkbook wb) {
    		HSSFCellStyle hssfCellStyle = wb.createCellStyle(); // 设置单元格边框 与颜色
    		hssfCellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    		hssfCellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    		hssfCellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
    		hssfCellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
    		
    		hssfCellStyle.setBottomBorderColor(BORDER_COLOR++);
    		hssfCellStyle.setLeftBorderColor(BORDER_COLOR++);
    		hssfCellStyle.setRightBorderColor(BORDER_COLOR++);
    		hssfCellStyle.setTopBorderColor(BORDER_COLOR++);
    
    		return hssfCellStyle;
    	}
    
    }
    
    	/**
    	 * 一般适用的样式
    	 * 
    	 * @param wb 文档
    	 * @param aligin 1   左   2   中   3   右
    	 * @param size 字体大小
    	 * @param bold 是否加粗
    	 * @return
    	 */
    	private static CellStyle setCellStyle(HSSFWorkbook wb, int aligin, short size, boolean bold) {
    		CellStyle hssfCellStyle = wb.createCellStyle(); 
    		hssfCellStyle.setWrapText(true);
    
    		switch (aligin) {
    		case 1:
    			hssfCellStyle.setAlignment(CellStyle.ALIGN_LEFT); 
    			break;
    		case 2:
    			hssfCellStyle.setAlignment(CellStyle.ALIGN_CENTER); 
    			break;
    		case 3:
    			hssfCellStyle.setAlignment(CellStyle.ALIGN_RIGHT); 
    			break;
    		default:
    			hssfCellStyle.setAlignment(CellStyle.ALIGN_LEFT); 
    			break;
    		}
    		
    		HSSFFont font = wb.createFont();
    		if (bold) {
    			font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 加多粗,自己点击进去参考枚举
    		}
    		font.setFontHeightInPoints(size); 
    		hssfCellStyle.setFont(font);
    
    		return hssfCellStyle;
    	}
    
    
    展开全文
  • java导出Excel合并单元格

    万次阅读 2019-02-12 10:09:43
    网上java导出excel表格并合并单元格的资料不完全,我整理了一份,并亲测能用,附截图。 ①java导出excel用到POI所有jar包,大家可以直接到下面地址下载点击打开链接 ②模拟数据类 package org;   public class ...

    网上java导出excel表格并合并单元格的资料不完全,我整理了一份,并亲测能用,附截图。

    ①java导出excel用到POI所有jar包,大家可以直接到下面地址下载点击打开链接

    ②模拟数据类

    package org;
     
    public class WorkSheetDetail {
        //工作内容
        private String workCtx;
        // 用工人总数    工日数 = gwnNum+tmnNum
        private Float totalHumanDays;
        //普工用工数 1-4小时为半天,4-8小时为一天;120每天
        private Integer gwnNum;
        //技工用工数 1-4小时为半天,4-8小时为一天;160每天
        private Integer tmnNum;
        // 单价(元)
        private Float unitPrice;
        // 金额(元) = gwnNum*120+tmnNum+160
        private Float unitAmount;
        // 备注
        private String notes; 
        
        public WorkSheetDetail(String workCtx, Float totalHumanDays, Integer gwnNum, Integer tmnNum, Float unitPrice,
                Float unitAmount, String notes) {
            super();
            this.workCtx = workCtx;
            this.totalHumanDays = totalHumanDays;
            this.gwnNum = gwnNum;
            this.tmnNum = tmnNum;
            this.unitPrice = unitPrice;
            this.unitAmount = unitAmount;
            this.notes = notes;
        }
        public String getWorkCtx() {
            return workCtx;
        }
        public void setWorkCtx(String workCtx) {
            this.workCtx = workCtx;
        }
        public Float getTotalHumanDays() {
            return totalHumanDays;
        }
        public void setTotalHumanDays(Float totalHumanDays) {
            this.totalHumanDays = totalHumanDays;
        }
        public Integer getGwnNum() {
            return gwnNum;
        }
        public void setGwnNum(Integer gwnNum) {
            this.gwnNum = gwnNum;
        }
        public Integer getTmnNum() {
            return tmnNum;
        }
        public void setTmnNum(Integer tmnNum) {
            this.tmnNum = tmnNum;
        }
        public Float getUnitPrice() {
            return unitPrice;
        }
        public void setUnitPrice(Float unitPrice) {
            this.unitPrice = unitPrice;
        }
        public Float getUnitAmount() {
            return unitAmount;
        }
        public void setUnitAmount(Float unitAmount) {
            this.unitAmount = unitAmount;
        }
        public String getNotes() {
            return notes;
        }
        public void setNotes(String notes) {
            this.notes = notes;
        }
        
    }

    ③java导出excel方法
    package org;
    import java.io.FileOutputStream;
    import java.util.List;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    import org.apache.poi.hssf.usermodel.HSSFHeader;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.util.CellRangeAddress;
    public class ExportExcel {
        public void getValue(List<WorkSheetDetail> userList,FileOutputStream fout){
              try{
                    //1.创建工作簿
                    HSSFWorkbook workbook = new HSSFWorkbook();
                    //1.1创建合并单元格对象
                    CellRangeAddress callRangeAddress = new CellRangeAddress(0,0,0,7);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress1 = new CellRangeAddress(1,1,0,7);//起始行,结束行,起始列,结束列
                    //班组与时间start
                    CellRangeAddress callRangeAddress20 = new CellRangeAddress(2,2,0,2);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress21 = new CellRangeAddress(2,2,3,4);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress22 = new CellRangeAddress(2,2,5,7);//起始行,结束行,起始列,结束列
                    //班组与时间end
                    
                    //标题
                    CellRangeAddress callRangeAddress31 = new CellRangeAddress(3,4,0,0);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress32 = new CellRangeAddress(3,4,1,1);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress33 = new CellRangeAddress(3,4,2,2);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress34 = new CellRangeAddress(3,3,3,4);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress35 = new CellRangeAddress(3,4,5,5);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress36 = new CellRangeAddress(3,4,6,6);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddress37 = new CellRangeAddress(3,4,7,7);//起始行,结束行,起始列,结束列
                    
                    //金额
                    CellRangeAddress callRangeAddressnumber1 = new CellRangeAddress(userList.size()+5,userList.size()+5,0,2);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddressnumber2 = new CellRangeAddress(userList.size()+5,userList.size()+5,3,7);//起始行,结束行,起始列,结束列
     
                    //负责人
                    CellRangeAddress callRangeAddressPersion1 = new CellRangeAddress(userList.size()+6,userList.size()+6,0,2);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddressPersion2 = new CellRangeAddress(userList.size()+6,userList.size()+6,3,4);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddressPersion3 = new CellRangeAddress(userList.size()+6,userList.size()+6,5,7);//起始行,结束行,起始列,结束列
     
                    //说明
                    CellRangeAddress callRangeAddressinfo = new CellRangeAddress(userList.size()+7,userList.size()+7,0,7);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddressinfo1 = new CellRangeAddress(userList.size()+8,userList.size()+8,0,7);//起始行,结束行,起始列,结束列
                    CellRangeAddress callRangeAddressinfo2 = new CellRangeAddress(userList.size()+9,userList.size()+9,0,7);//起始行,结束行,起始列,结束列
     
                    //部项目经理部
                    HSSFCellStyle headStyle = createCellStyle(workbook,(short)10,false,true);
                    //派工单
                    HSSFCellStyle erStyle = createCellStyle(workbook,(short)13,true,true);
                    //班组和时间
                    HSSFCellStyle sanStyle = createCellStyle(workbook,(short)10,false,false);
                    //标题样式
                    HSSFCellStyle colStyle = createCellStyle(workbook,(short)10,true,true);
                    //内容样式
                    HSSFCellStyle cellStyle = createCellStyle(workbook,(short)10,false,true);
                    //2.创建工作表
                    HSSFSheet sheet = workbook.createSheet("派单");
                    //2.1加载合并单元格对象
                    sheet.addMergedRegion(callRangeAddress);
                    sheet.addMergedRegion(callRangeAddress1);
                    sheet.addMergedRegion(callRangeAddress20);
                    sheet.addMergedRegion(callRangeAddress21);
                    sheet.addMergedRegion(callRangeAddress22);
                    sheet.addMergedRegion(callRangeAddress31);
                    sheet.addMergedRegion(callRangeAddress32);
                    sheet.addMergedRegion(callRangeAddress33);
                    sheet.addMergedRegion(callRangeAddress34);
                    sheet.addMergedRegion(callRangeAddress35);
                    sheet.addMergedRegion(callRangeAddress36);
                    sheet.addMergedRegion(callRangeAddress37);
                    sheet.addMergedRegion(callRangeAddressnumber1);
                    sheet.addMergedRegion(callRangeAddressnumber2);
                    sheet.addMergedRegion(callRangeAddressPersion1);
                    sheet.addMergedRegion(callRangeAddressPersion2);
                    sheet.addMergedRegion(callRangeAddressPersion3);
                    sheet.addMergedRegion(callRangeAddressinfo);
                    sheet.addMergedRegion(callRangeAddressinfo1);
                    sheet.addMergedRegion(callRangeAddressinfo2);
                    //设置默认列宽
                    sheet.setDefaultColumnWidth(15);
                    //3.创建行
                    //3.1创建头标题行;并且设置头标题
                    HSSFRow row = sheet.createRow(0);
                    HSSFCell cell = row.createCell(0);
                    //加载单元格样式
                    cell.setCellStyle(headStyle);
                    cell.setCellValue("xxxx项目部");
                    
                    HSSFRow rower = sheet.createRow(1);
                    HSSFCell celler = rower.createCell(0);
                    //加载单元格样式
                    celler.setCellStyle(erStyle);
                    celler.setCellValue("派 工 单");
                    
                    HSSFRow rowsan = sheet.createRow(2);
                    HSSFCell cellsan = rowsan.createCell(0);
                    HSSFCell cellsan1 = rowsan.createCell(3);
                    HSSFCell cellsan2 = rowsan.createCell(5);
                    //加载单元格样式
                    cellsan.setCellStyle(sanStyle);
                    cellsan.setCellValue("协作单位:x施工一堆");
                    cellsan1.setCellStyle(sanStyle);
                    cellsan1.setCellValue("");
                    cellsan2.setCellStyle(sanStyle);
                    cellsan2.setCellValue("时间:2017年 10月 20日");
                    
                    //3.2创建列标题;并且设置列标题
                    HSSFRow row2 = sheet.createRow(3);
                    String[] titles = {"序号","工作内容","用工总人数","工日数","","单价(元)","金额(元)","备注"};//""为占位字符串
                    for(int i=0;i<titles.length;i++)
                    {
                        HSSFCell cell2 = row2.createCell(i);
                        //加载单元格样式
                        cell2.setCellStyle(colStyle);
                        cell2.setCellValue(titles[i]);
                    }
                    
                    HSSFRow rowfour = sheet.createRow(4);
                    String[] titlefour = {"普工用工数","技工用工数"};
                    for(int i=0;i<titlefour.length;i++)
                    {
                        HSSFCell cell2 = rowfour.createCell(i+3);
                        //加载单元格样式
                        cell2.setCellStyle(colStyle);
                        cell2.setCellValue(titlefour[i]);
                    }
                    
                    
                    //4.操作单元格;将用户列表写入excel
                    if(userList != null)
                    {
                        int i=1;
                        for(int j=0;j<userList.size();j++)
                        {
                            //创建数据行,前面有两行,头标题行和列标题行
                            HSSFRow row3 = sheet.createRow(j+5);
                            HSSFCell cell0 = row3.createCell(0);
                            cell0.setCellStyle(cellStyle);
                            cell0.setCellValue(i++);
                            
                            HSSFCell cell1 = row3.createCell(1);
                            cell1.setCellStyle(cellStyle);
                            cell1.setCellValue(userList.get(j).getWorkCtx());
                            
                            HSSFCell cell2 = row3.createCell(2);
                            cell2.setCellStyle(cellStyle);
                            cell2.setCellValue(userList.get(j).getTotalHumanDays());
                            
                            HSSFCell cell3 = row3.createCell(3);
                            cell3.setCellStyle(cellStyle);
                            cell3.setCellValue(userList.get(j).getGwnNum());
                            
                            HSSFCell cell4 = row3.createCell(4);
                            cell4.setCellStyle(cellStyle);
                            cell4.setCellValue(userList.get(j).getTmnNum());
                            
                            HSSFCell cell5 = row3.createCell(5);
                            cell5.setCellStyle(cellStyle);
                            cell5.setCellValue(userList.get(j).getTotalHumanDays());
                            
                            HSSFCell cell6 = row3.createCell(6);
                            cell6.setCellStyle(cellStyle);
                            cell6.setCellValue(userList.get(j).getUnitAmount());
                            
                            HSSFCell cell7= row3.createCell(7);
                            cell7.setCellStyle(cellStyle);
                            cell7.setCellValue(userList.get(j).getUnitPrice());
                        }
                    }
                    
                    HSSFRow rownumber = sheet.createRow(userList.size()+5);
                    HSSFCell cellnumber = rownumber.createCell(0);
                    HSSFCell cellnumber1 = rownumber.createCell(3);
                    //加载单元格样式
                    cellnumber.setCellStyle(sanStyle);
                    cellnumber.setCellValue("金额合计(大写)");
                    cellnumber1.setCellStyle(sanStyle);
                    cellnumber1.setCellValue("¥ 78 元; 大写:柒拾捌元整");
     
                    HSSFRow rowpersion = sheet.createRow(userList.size()+6);
                    HSSFCell cellpersion = rowpersion.createCell(0);
                    HSSFCell cellpersion1 = rowpersion.createCell(3);
                    HSSFCell cellpersion2 = rowpersion.createCell(5);
     
                    //加载单元格样式
                    cellpersion.setCellStyle(sanStyle);
                    cellpersion.setCellValue("协作单位负责人:");
                    cellpersion1.setCellStyle(sanStyle);
                    cellpersion1.setCellValue("经办人:");
                    cellpersion2.setCellStyle(sanStyle);
                    cellpersion2.setCellValue("部门负责人:");
                    
                    HSSFRow rowinfo = sheet.createRow(userList.size()+7);
                    HSSFCell cellinfo = rowinfo.createCell(0);
                    cellinfo.setCellStyle(sanStyle);
                    cellinfo.setCellValue("说明:1、本标工单一式两联,第一联为派工人(工长)存根,第二联用作结算。");
                    
                    HSSFRow rowinfo1 = sheet.createRow(userList.size()+8);
                    HSSFCell cellinfo1 = rowinfo1.createCell(0);
                    cellinfo1.setCellStyle(sanStyle);
                    cellinfo1.setCellValue("2、本标工单必须在用工当日签认,否则不予认可;三日内交合同处汇总。");
                    
                    HSSFRow rowinfo2 = sheet.createRow(userList.size()+9);
                    HSSFCell cellinfo2 = rowinfo2.createCell(0);
                    cellinfo2.setCellStyle(sanStyle);
                    cellinfo2.setCellValue("3、工日数填写精确到半个工日。");
                    //5.输出
                    workbook.write(fout);
    //                workbook.close();
                    //out.close();
                }catch(Exception e)
                {
                    e.printStackTrace();
                }
        }
        
        /**
         * 
         * @param workbook
         * @param fontsize
         * @return 单元格样式
         */
        private static HSSFCellStyle createCellStyle(HSSFWorkbook workbook, short fontsize,boolean flag,boolean flag1) {
            // TODO Auto-generated method stub
            HSSFCellStyle style = workbook.createCellStyle();
            //是否水平居中
            if(flag1){
                style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
            }
           
            style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
            //创建字体
            HSSFFont font = workbook.createFont();
            //是否加粗字体
            if(flag){
                font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            }
            font.setFontHeightInPoints(fontsize);
            //加载字体
            style.setFont(font);
            return style;
        }
    }


    ④main方法
    package org;
     
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.List;
     
    public class MainOut {
        public static void main(String args[]){
            //模拟部分数据
            List<WorkSheetDetail> detail = new ArrayList<WorkSheetDetail>();
     
            WorkSheetDetail d1 =new WorkSheetDetail("23",23f,43,34,243f,54f,"34");
            WorkSheetDetail d2 =new WorkSheetDetail("23",23f,43,34,243f,54f,"34");
            WorkSheetDetail d3 =new WorkSheetDetail("23",23f,43,34,243f,54f,"34");
            WorkSheetDetail d4 =new WorkSheetDetail("23",23f,43,34,243f,54f,"34");
            WorkSheetDetail d5 =new WorkSheetDetail("23",23f,43,34,243f,54f,"34");
            detail.add(d1);
            detail.add(d2);
            detail.add(d3);
            detail.add(d4);
            detail.add(d5);
            try  
            {  
                FileOutputStream fout = new FileOutputStream("E:/students.xls");
                new ExportExcel().getValue(detail, fout);
                fout.close();  
            }  
            catch (Exception e)  
            {  
                e.printStackTrace();  
            }  
     
        }
    }

    ⑤截图

     

    --------------------- 
    作者:datangxiajun 
    来源:CSDN 
    原文:https://blog.csdn.net/datangxiajun/article/details/78308979 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 参考代码cellStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT); cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); cellStyle.setBorderBottom(HSSFCellStyle....
  • 合并单元格代码: CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 1, 0, 0); sheet.addMergedRegion(cellRangeAddress); //加入边框 setBorderStyle(BorderStyle.THIN, cellRangeAddress, sheet);...

    合并单元格代码:

    //合并单元格
    CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 1, 0, 0);
    sheet.addMergedRegion(cellRangeAddress);
    
    //加入边框
    setBorderStyle(BorderStyle.THIN, cellRangeAddress, sheet);

    CellRangeAddress参数说明

    前二个参数:第几行到第几行合并

    后二个参数:第几列到第几列合并

    合并后加入边框代码:

    /**
     * 合并单元格设置边框
     * @param
     * @param cellRangeTitle
     * @param sheet
     */
    private void setBorderStyle(BorderStyle borderStyle, CellRangeAddress cellRangeTitle, Sheet sheet){
        RegionUtil.setBorderBottom(borderStyle, cellRangeTitle, sheet);//下边框
        RegionUtil.setBorderLeft(borderStyle, cellRangeTitle, sheet);//左边框
        RegionUtil.setBorderRight(borderStyle, cellRangeTitle, sheet);//右边框
        RegionUtil.setBorderTop(borderStyle, cellRangeTitle, sheet);//上边框
    }

     

    展开全文
  • 一个Maven项目,下载直接使用,直接找到 JxlsTest运行demo即可,功能强大,基本能满足所有报表的导出需求,支持个Sheet导出,支持复杂的导出组合,可以自己写模板试玩下。
  • Java导出Excel合并单元格

    千次阅读 2019-02-07 13:56:11
    Java导出Excel合并单元格
                   

    1、问题背景

         利用POI导出Excel表格,在导出的过程中涉及到双表头,即需要合并单元格


    2、实现源码

    /** *  * @Project:Report * @Title:MergeCell.java * @Package:com.you.excel * @Description: * @Author:YouHaiDong * @Date:2015年11月4日 下午2:36:46 * @Version: */package com.you.excel;import java.io.FileOutputStream;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRichTextString;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.hssf.util.Region;/** * <p>合并单元格</p> * @ClassName:MergeCell * @Description: * @Author:YouHaiDong * @Date:2015年11月4日 下午2:36:46 *  */public class MergeCell /**  * 合并单元格  * @Title:MergeCell  * @Description:  * @param args  * @Date:2015年11月4日 下午2:36:46  * @return: void   * @throws Exception  */ @SuppressWarnings({ "resource", "deprecation" }) public static void main(String[] args) throws Exception  {  //创建workbook   HSSFWorkbook workbook = new HSSFWorkbook();   //创建sheet页     HSSFSheet sheet = workbook.createSheet("学生表");   //创建单元格  HSSFRow row = sheet.createRow(0);   HSSFCell c0 = row.createCell(0);   c0.setCellValue(new HSSFRichTextString("学号"));   HSSFCell c1 = row.createCell(1);   c1.setCellValue(new HSSFRichTextString("姓名"));   HSSFCell c2 = row.createCell(2);   c2.setCellValue(new HSSFRichTextString("性别"));   HSSFCell c3 = row.createCell(3);   c3.setCellValue(new HSSFRichTextString("年龄"));   HSSFCell c4 = row.createCell(4);   c4.setCellValue(new HSSFRichTextString("2015年分数"));   HSSFCell c5 = row.createCell(7);   c5.setCellValue(new HSSFRichTextString("2014年分数"));   HSSFRow row1 = sheet.createRow(1);   HSSFCell c6 = row1.createCell(4);   c6.setCellValue(new HSSFRichTextString("语文"));   HSSFCell c7 = row1.createCell(5);   c7.setCellValue(new HSSFRichTextString("数学"));   HSSFCell c8 = row1.createCell(6);   c8.setCellValue(new HSSFRichTextString("外语"));  HSSFCell c9 = row1.createCell(7);   c9.setCellValue(new HSSFRichTextString("语文"));   HSSFCell c10 = row1.createCell(8);   c10.setCellValue(new HSSFRichTextString("数学"));   HSSFCell c11 = row1.createCell(9);   c11.setCellValue(new HSSFRichTextString("外语"));    Region region1 = new Region(0, (short)0, 1, (short)0);   Region region2 = new Region(0, (short)1, 1, (short)1);   Region region3 = new Region(0, (short)2, 1, (short)2);   Region region4 = new Region(0, (short)3, 1, (short)3);   Region region5 = new Region(0, (short)4, 0, (short)6);   Region region6 = new Region(0, (short)7, 0, (short)9);   sheet.addMergedRegion(region1);   sheet.addMergedRegion(region2);   sheet.addMergedRegion(region3);   sheet.addMergedRegion(region4);   sheet.addMergedRegion(region5);   sheet.addMergedRegion(region6);     FileOutputStream stream = new FileOutputStream("d:/student.xls");   workbook.write(stream); }}

    3、实现结果


               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • 支持大数据量导出excel。自动合并相同数据单元格,可根据id自动识别是否合并,支持自定义类型数据转换,根据实体类自动识别。
  • 这样第一列的标题效果完成,接下来是一行的个单元格合并,步骤如上,需要注意的是,单元格赋值的时候,下标要写每个合并单元格域的第一列,不然会被覆盖。 接下来是一个DataTable的读取,可以先计算每一列的列宽...
  • Javascript导出excel为xlsx格式,兼容IE6+和主流浏览器,下载下来直接可以使用。 其他javascript导出excel插件可看作者文章:https://blog.csdn.net/qq_21693027/article/details/80459677
  • java导出excel合并单元格及设置

    千次阅读 2019-04-23 15:16:12
    功能是导出表格 package checkout_excel; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; public class MainOut { public static void main(String args[]){ //...
  • winform使用Microsoft.Office.Interop.Excel读取带有合并单元格Excel的demo,Excel版本不限,可以是.xls可以是.xlsx版本。本程序采用webbrowser显示读取的数据,使用bootstrap的css样式美化table表格,使用Json...
  • Hutool 导出excel合并单元格

    千次阅读 2020-12-16 13:00:37
    @Description hutool导出excel * @Date 10:28 2020/12/16 * @param dataList 数据集合 * @param fileName excel文件名 * @param headAliasMap 表头别名 * @param mergeNameColumnIndexMap 合并单元格的字段名和列角...
  • 1、引入maven依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>...2、此处我们以合并多行数据为例,效果如下: .
  • 今天做了一个关于订单得导出得,一个订单一般都是个商品,那么就会出现单元格合并得情况,还有复杂表头得情况,现在拿我做得,给大家一个小demo 先看最终效果 后台实现: 代码: [HttpGet] ...
  • 合并之后图片 工具类ExportExcel package com.daxiao.test.util; /** Created by Bob on 2021/5/12. */ import java.io.FileOutputStream; import java.io.IOException; import java.text.DecimalFormat; import ...
  • 使用POI导出Excel文件 private XSSFWorkbook writeExcel(List<SupplyKcPlan> list) { if(CollectionUtils.isEmpty(list)){ return new XSSFWorkbook(); } XSSFWorkbook wb = new XSSFWorkbook(); ...
  • JAVA excel合并单元格原生poi 合并后的效果 直接上代码 (该方法为如果指定行的单元格里面的值一致则进行合并,直接粘贴使用即可) * * @param sheet * @param colIdx 合并的列 * @param startRow 起始行 * @...
  • Springboot导出excel合并单元格示例

    千次阅读 2019-01-21 13:26:34
    原文链接:Springboot导出excel合并单元格示例 更文章,欢迎访问:Java知音,一个专注于技术分享的网站 以下用一个示例来说明springboot如何导出数据到excel。 首先引入Maven依赖: &lt;dependency&gt; ...
  • 首先1-4行要求合并单元格,其中第5行第5,6列也要求合并;同时后面的列是可变化的。于是本人设计1-5行的1-6列是固定的。 同时在实践过程之中可以设置单元字体和样式。本项目使用POI3.17版本实现 2、代码实现 2.1...
  • 有一个需求是动态合并列,参考文章做了下调整,代码如下。 import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.skyworth.spip.bean.*; import com.skyworth.spip.common.*; ...
  • java poi导出Excel表合并单元格

    万次阅读 2017-10-12 10:11:12
     //设置合并单元格的参数并初始化带边框的表头(这样做可以避免因为合并单元格后有的单元格的边框显示不出来)  row = sheet.createRow(4);//因为下标从0开始,所以这里表示的是excel中的第五行  for (int i = ...
  • poi导入/导出Excel表格,合并单元格的读取和设置

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,423
精华内容 4,969
关键字:

导出excel合并单元格多表