首先看效果图 其实总体上就是几个对象的操作而已,下面就是根据api写的工具类 以上就是全部内容,poi的api还有很多没学习到,Stay hungry,Stay foolish!
问题:之前用的是hutool导出excel,可是hutool只能导出稍微简单一点得,复杂的只好自己手动来画了。所以去看了下poi的api学习了下,做了个简单的demo,其中api在这里查看poi中文文档本次用到的poi常用的方法:
创建excel工作簿对象 HSSFWorkbook workbook=new HSSFWorkbook(); 创建工作表对象 HSSFSheet sheet=workbook.createSheet("这里可写名字 可不写"); 创建单元格样式 HSSFCellStyle style=workbook.createCellStyle(); 单元格设置颜色 style.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); style.setFillPattern(CellStyle.SOLID_FOREGROUND); 设置字体才能生效 style.setFont(font); 设置水平居中 // 左右居中2 居右3 默认居左 style.setAlignment((short) align); 设置上下居中 // 上下居中1 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); 设置边框 style.setBorderRight((short) 2); style.setLocked(true); 创建字体 HSSFFont font=workbook.createFont(); 指定字体 font.setFontName("宋体"; 设置字体大小 font.setFontHeightInPoints((short) fontSize); 设置字体加粗 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 创建一行 HSSFRow row=sheet.createRow(rowNumber); 创建单元格 HSSFCell cell=row.createCell(cellNumber); 设置单元格的样式 cell.setCellStyle(style); 合并列 sheet.addMergedRegion(new CellRangeAddress("合并开始行","合并结束行","合并开始列","合并结束列"))
package com.yx.excel_export_self; import lombok.Data; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.util.CellRangeAddress; import java.io.*; /** * @author :tangfan * @date :Created in 2020/6/11 10:36 * @description: * @modified By: */ @Data public class MyExcel { private static HSSFWorkbook workbook; private static HSSFSheet sheet; public static void main(String[] args) throws IOException { // 根据你传入的字段合并表头 String[] headNames = new String[]{"微信昵称", "姓名", "性别", "年龄", "客户身份", "营养师", "健康管理师" , "销售人员", "服务名称", "购买时间", "生效日期", "结束日期", "注册时间", "渠道来源", "勋章", "预约时间", "哪里听说"}; //单元格的宽度 int colWidths[] = {100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}; // 创建Excel工作簿对象 workbook = new HSSFWorkbook(); // 创Excel工作表对象 可以传参自定义名称 sheet = workbook.createSheet("客户资料导出"); // 创建表头 int headCell = createHeadCell(headNames, colWidths); ByteArrayOutputStream baos = new ByteArrayOutputStream(); workbook.write(baos); byte[] ba = baos.toByteArray(); ByteArrayInputStream bais = new ByteArrayInputStream(ba); File f = new File("d:\excel.xls"); if (f.exists()) f.delete(); f.createNewFile(); FileOutputStream out = new FileOutputStream(f); HSSFWorkbook book = new HSSFWorkbook(bais); book.write(out); out.flush(); out.close(); } /** * 创建样式 * * @param fontSize 字体大小 * @param align 水平位置 左右居中2 居右3 默认居左 垂直均为居中 * @param bold 是否加粗 * @return */ private static HSSFCellStyle getStyle(int fontSize, int align, boolean bold, boolean border) { HSSFFont font = workbook.createFont(); // 字体 font.setFontName("宋体"); // 字体大小 font.setFontHeightInPoints((short) fontSize); if (bold) { font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); } HSSFCellStyle style = workbook.createCellStyle(); // 设置字体 style.setFont(font); // 左右居中2 居右3 默认居左 style.setAlignment((short) align); // 上下居中1 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); if (border) { style.setBorderRight((short) 2); style.setBorderLeft((short) 2); style.setBorderBottom((short) 2); style.setBorderTop((short) 2); style.setLocked(true); } return style; } /** * 创建行元素 * * @param style 样式 * @param height 行高 * @param value 行显示的内容 * @param row1 起始行 * @param row2 结束行 * @param col1 起始列 * @param col2 结束列 */ private static void createRow(HSSFCellStyle style, int height, String value, int row1, int row2, int col1, int col2) { sheet.addMergedRegion(new CellRangeAddress(row1, row2, col1, col2)); //设置从第row1行合并到第row2行,第col1列合并到col2列 HSSFRow rows = sheet.createRow(row1); //设置第几行 rows.setHeight((short) height); //设置行高 HSSFCell cell = rows.createCell(col1); //设置内容开始的列 cell.setCellStyle(style); //设置样式 cell.setCellValue(value); //设置该行的值 } /** * 创建表头 * * @param headNames * @param colWidths */ private static int createHeadCell(String[] headNames, int colWidths[]) { // 表头标题开始 // 样式 HSSFCellStyle titleStyle = getStyle(15, 2, false, false); // 设置颜色 titleStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); titleStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); // 创建第一行 createRow(titleStyle, 500, "基础信息", 0, 0, 0, headNames.length - 1); // 表头标题结束 // 第二行表头开始 boolean b = (headNames != null && headNames.length > 0); if (b) { HSSFRow row2 = sheet.createRow(1); row2.setHeight((short) 0x289); HSSFCell fcell = null; // 建立新的cell样式 HSSFCellStyle cellStyle = getStyle(10, 2, false, false); for (int i = 0; i < headNames.length; i++) { fcell = row2.createCell(i); fcell.setCellStyle(cellStyle); fcell.setCellValue(headNames[i]); if (colWidths != null && i < colWidths.length) { sheet.setColumnWidth(i, 32 * colWidths[i]); } } } // // 空一行 HSSFCellStyle blankStyle = getStyle(20, 2, false, false); createRow(blankStyle, 400, "", 3, 3, 0, headNames.length - 1); // 问卷信息 HSSFRow queryTitleRow = sheet.createRow(4); HSSFCell cell = queryTitleRow.createCell(0); cell.setCellStyle(getStyle(10, 2, false, false)); cell.setCellValue("问卷信息"); // 开始问卷信息详情 HSSFRow queryContentRow = sheet.createRow(5); HSSFCellStyle queryContentStyle = getStyle(10, 2, false, false); HSSFCellStyle blankCellStyle = getStyle(10, 2, false, false); queryContentRow.setRowStyle(queryContentStyle); for (int i = 0; i < 22; i++) { HSSFCell contentCell = queryContentRow.createCell(i); } HSSFCellStyle style = getStyle(10, 2, false, false); // 设置颜色 style.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); style.setFillPattern(CellStyle.SOLID_FOREGROUND); // 合并问卷详情的标题 // 健康目标 sheet.addMergedRegion(new CellRangeAddress(5, 5, 0, 2)); HSSFCell cell1 = queryContentRow.getCell(0); cell1.setCellValue("健康目标"); cell1.setCellStyle(style); // 生活习惯 sheet.addMergedRegion(new CellRangeAddress(5, 5, 4, 6)); HSSFCell cell2 = queryContentRow.getCell(4); cell2.setCellValue("生活习惯"); cell2.setCellStyle(style); // 身体状况,亲属疾病 sheet.addMergedRegion(new CellRangeAddress(5, 5, 8, 10)); HSSFCell cell3 = queryContentRow.getCell(8); cell3.setCellValue("身体状况-亲属疾病"); cell3.setCellStyle(style); // 体检指标 sheet.addMergedRegion(new CellRangeAddress(5, 5, 12, 15)); HSSFCell cell4 = queryContentRow.getCell(12); cell4.setCellValue("体检指标"); cell4.setCellStyle(style); // 用药信息 sheet.addMergedRegion(new CellRangeAddress(5, 5, 17, 22)); HSSFCell cell5 = queryContentRow.getCell(17); cell5.setCellValue("用药信息"); cell5.setCellStyle(style); // 每个目标分类下的小标题 HSSFRow queryContentSmallTitle = sheet.createRow(6); for (int i = 0; i < 23; i++) { HSSFCell contentCell = queryContentSmallTitle.createCell(i); } // 健康目标 queryContentSmallTitle.getCell(0).setCellValue("序号"); queryContentSmallTitle.getCell(1).setCellValue("问题"); queryContentSmallTitle.getCell(2).setCellValue("内容"); // 生活习惯 queryContentSmallTitle.getCell(4).setCellValue("序号"); queryContentSmallTitle.getCell(5).setCellValue("问题"); queryContentSmallTitle.getCell(6).setCellValue("内容"); // 身体状况-亲属疾病 queryContentSmallTitle.getCell(8).setCellValue("序号"); queryContentSmallTitle.getCell(9).setCellValue("问题"); queryContentSmallTitle.getCell(10).setCellValue("内容"); // 体检指标 queryContentSmallTitle.getCell(12).setCellValue("序号"); queryContentSmallTitle.getCell(13).setCellValue("类型"); queryContentSmallTitle.getCell(14).setCellValue("值"); queryContentSmallTitle.getCell(15).setCellValue("参考范围"); // 用药信息 queryContentSmallTitle.getCell(17).setCellValue("序号"); queryContentSmallTitle.getCell(18).setCellValue("药物名称"); queryContentSmallTitle.getCell(19).setCellValue("使用剂量"); queryContentSmallTitle.getCell(20).setCellValue("用药频次"); queryContentSmallTitle.getCell(21).setCellValue("用药时长"); queryContentSmallTitle.getCell(22).setCellValue("用途"); for (int i = 8; i < 50; i++) { for (int j = 0; j < 23; j++) { sheet.createRow(i).createCell(j); } } //从哪一行开始渲染表体 return 0; } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算