Java中导入/导出excel|Java中导入/导出excel,导出pdf报表信息

【Java中导入/导出excel|Java中导入/导出excel,导出pdf报表信息】1.项目中经常需要用到报表生成,信息导入数据库的功能.主要有以下几种.
2.其中比较简单的是 外部数据无需处理直接 导入数据库中,这种比较简单.直接利用Navicat数据库工具 导入外部.示例如下
1.准备customer.xlsx文件信息
Java中导入/导出excel|Java中导入/导出excel,导出pdf报表信息
文章图片

2.使用导入向导,选择导入文件的xlsx文件类型Java中导入/导出excel|Java中导入/导出excel,导出pdf报表信息
文章图片

3.选择导入数据源及相关表位置.
Java中导入/导出excel|Java中导入/导出excel,导出pdf报表信息
文章图片

4.选择导入xlsx数据源位置,从第几行开始导入,字段名行的相对行位置.
Java中导入/导出excel|Java中导入/导出excel,导出pdf报表信息
文章图片

5.选择导入数据 对应表字段相关信息
Java中导入/导出excel|Java中导入/导出excel,导出pdf报表信息
文章图片

6.选择导入模式,此处我使用的是 记录添加模式
Java中导入/导出excel|Java中导入/导出excel,导出pdf报表信息
文章图片

7.开始添加 ,影像了几条记录
Java中导入/导出excel|Java中导入/导出excel,导出pdf报表信息
文章图片

8.记录添加成功
Java中导入/导出excel|Java中导入/导出excel,导出pdf报表信息
文章图片

3.根据需要的信息 生成导出excel表格,具体代码示例如下

package com.bxd.app.util; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; 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.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.HSSFColor; import org.apache.poi.ss.util.CellRangeAddress; import com.bxd.app.view.biz.ExportExcelView; public class ExportExcelUtil { /** * 创建表格标题 * * @param wb *Excel文档对象 * @param sheet *工作表对象 * @param headString *标题名称 * @param col *标题占用列数 */ @SuppressWarnings("deprecation") public static void createHeadTittle(HSSFWorkbook wb, HSSFSheet sheet, String headString, int col) { HSSFRow row = sheet.createRow(0); // 创建Excel工作表的行 HSSFCell cell = row.createCell(0); // 创建Excel工作表指定行的单元格 row.setHeight((short) 1000); // 设置高度cell.setCellType(HSSFCell.ENCODING_UTF_16); // 定义单元格为字符串类型 cell.setCellValue(new HSSFRichTextString(headString)); sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, col)); // 指定标题合并区域// 定义单元格格式,添加单元格表样式,并添加到工作簿 HSSFCellStyle cellStyle = wb.createCellStyle(); cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐 cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 指定单元格垂直居中个对齐 cellStyle.setWrapText(true); // 指定单元格自动换行// 设置单元格字体 HSSFFont font = wb.createFont(); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); font.setFontName("微软雅黑"); font.setFontHeightInPoints((short) 16); // 字体大小cellStyle.setFont(font); cell.setCellStyle(cellStyle); } /** * 创建表头 * * @param wb *Excel文档对象 * @param sheet *工作表对象 * @param thead *表头内容 * @param sheetWidth *每一列宽度 */ @SuppressWarnings("deprecation") public static void createThead(HSSFWorkbook wb, HSSFSheet sheet, String[] thead, int[] sheetWidth) { HSSFRow row1 = sheet.createRow(1); row1.setHeight((short) 600); // 定义单元格格式,添加单元格表样式,并添加到工作簿 HSSFCellStyle cellStyle = wb.createCellStyle(); cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); cellStyle.setWrapText(true); cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); // 设置背景色 cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置右边框类型 cellStyle.setRightBorderColor(HSSFColor.BLACK.index); // 设置右边框颜色// 设置单元格字体 HSSFFont font = wb.createFont(); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); font.setFontName("宋体"); font.setFontHeightInPoints((short) 10); cellStyle.setFont(font); // 设置表头内容 for (int i = 0; i < thead.length; i++) { HSSFCell cell1 = row1.createCell(i); cell1.setCellType(HSSFCell.ENCODING_UTF_16); cell1.setCellValue(new HSSFRichTextString(thead[i])); cell1.setCellStyle(cellStyle); }// 设置每一列宽度 for (int i = 0; i < sheetWidth.length; i++) { sheet.setColumnWidth(i, sheetWidth[i]); } } /** * 填入数据 * * @param wb *// Excel文档对象 * @param sheet *// 工作表对象 * @param result *// 表数据 */ @SuppressWarnings("deprecation") public static void createTable(HSSFWorkbook wb, HSSFSheet sheet, List result) { // 定义单元格格式,添加单元格表样式,并添加到工作薄 HSSFCellStyle cellStyle = wb.createCellStyle(); cellStyle.setWrapText(true); // 单元格字体 HSSFFont font = wb.createFont(); font.setFontName("宋体"); font.setFontHeightInPoints((short) 10); cellStyle.setFont(font); cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中// 循环插入数据 for (int i = 0; i < result.size(); i++) { HSSFRow row = sheet.createRow(i + 2); row.setHeight((short) 400); // 设置高度 HSSFCell cell = null; int j = 0; for (String key : (result.get(i).keySet())) { cell = row.createCell(j); cell.setCellStyle(cellStyle); cell.setCellValue(new HSSFRichTextString(result.get(i).get(key))); j++; } } } public static void main(String[] args) { //测试hashmaptreemaplinkedhashmap之间的顺序 /*Mapmap=new HashMap<>(); System.out.println("hashmap排序"); add_keyvalue(map); TreeMapmap2=new TreeMap<>(); System.out.println("treemap排序"); add_keyvalue(map2); LinkedHashMapmap3=new LinkedHashMap<>(); System.out.println("linkedhash排序"); add_keyvalue(map3); */// 1.封装数据 List list = new LinkedList<>(); ExportExcelView b1 = new ExportExcelView(); b1.setDeclsno("201810251706470169854601"); b1.setDecdt("2018-09-22"); b1.setEleacno("1209394999"); b1.setCustName("张三"); b1.setEntName("正信广电"); b1.setSaleName("郭启铭"); b1.setSaleTel("17342064227"); b1.setRealsumretbal("1000"); b1.setDecutionFee("100"); ExportExcelView b2 = new ExportExcelView(); b2.setDeclsno("201810251706470176052618"); b2.setDecdt("2018-09-22"); b2.setEleacno("1209394999"); b2.setCustName("赵四"); b2.setEntName("正信广电"); b2.setSaleName("郭启铭"); b2.setSaleTel("17342064227"); b2.setRealsumretbal("2000"); b2.setDecutionFee("200"); list.add(b1); list.add(b2); // 实体类转换为map List result = new ArrayList<>(); LinkedHashMap map = new LinkedHashMap<>(); for (ExportExcelView e : list) { map.put("declsno", e.getDeclsno()); map.put("decdt", e.getDecdt()); map.put("eleacno", e.getEleacno()); map.put("custName",e.getCustName()); map.put("entName",e.getEntName()); map.put("saleName",e.getSaleName()); map.put("saleTel",e.getSaleTel()); map.put("realsumretbal",e.getRealsumretbal()); map.put("decutionFee",e.getDecutionFee()); result.add(map); }// 2.定义变量值 创建Excel文件 String fileName = "正信广电_201809代扣费用表.xls"; // 定义文件名 String headString = "正信广电_201809代扣费用表"; // 定义表格标题 String sheetName = "正信广电_201809代扣费用表"; // 定义工作表表名 String filePath = "D:\\"; // 文件本地保存路径 String[] thead = { "扣款流水", "扣款日期", "发电户号", "用户姓名", "开发商", "业务员姓名","业务员手机号","扣款金额(元)", "代扣费用(元)" }; int[] sheetWidth = { 7500, 4000, 3000, 3000, 4000, 3000, 5000, 5000,5000}; // 定义每一列宽度HSSFWorkbook wb = new HSSFWorkbook(); // 创建Excel文档对象 HSSFSheet sheet = wb.createSheet(sheetName); // 创建工作表// 3.生成表格 // ①创建表格标题 createHeadTittle(wb, sheet, headString, 8); // result.get(0).size() - 1为表格占用列数,从0开始 // ②创建表头 createThead(wb, sheet, thead, sheetWidth); // ③填入数据 createTable(wb, sheet, result); FileOutputStream fos; try { fos = new FileOutputStream(new File(filePath + fileName)); wb.write(fos); fos.close(); wb.close(); System.out.println("导出excel成功"); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } public static void add_keyvalue(Map map){ map.put("351", "11"); map.put("512", "222"); map.put("853", "333"); map.put("125", "333"); map.put("341", "333"); Iteratoriterator=map.keySet().iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } }}

Java中导入/导出excel|Java中导入/导出excel,导出pdf报表信息
文章图片

2.导出pdf示例,将多张图片合成pdf文件 生成到指定位置
package com.bxd.app.util; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import com.bxd.core.util.FileUtil; import com.lowagie.text.BadElementException; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Image; import com.lowagie.text.Rectangle; import com.lowagie.text.pdf.PdfWriter; class PrintToPdfUtil { /** * * @param imageFolderPath *图片文件夹地址 * @param pdfPath *PDF文件保存地址 * */ public static void toPdf(String imageFolderPath, String pdfPath) { try { // 图片文件夹地址 // String imageFolderPath = "D:/Demo/ceshi/"; // 图片地址 String imagePath = null; // PDF文件保存地址 // String pdfPath = "D:/Demo/ceshi/hebing.pdf"; // 输入流 FileOutputStream fos = new FileOutputStream(pdfPath); // 创建文档 Document doc = new Document(null, 0, 0, 0, 0); // doc.open(); // 写入PDF文档 PdfWriter.getInstance(doc, fos); // 读取图片流 BufferedImage img = null; // 实例化图片 Image image = null; // 获取图片文件夹对象 File file = new File(imageFolderPath); File[] files = file.listFiles(); // 循环获取图片文件夹内的图片 for (File file1 : files) { if (file1.getName().endsWith(".png") || file1.getName().endsWith(".jpg") || file1.getName().endsWith(".gif") || file1.getName().endsWith(".jpeg") || file1.getName().endsWith(".tif")) { // System.out.println(file1.getName()); imagePath = imageFolderPath + file1.getName(); // 读取图片流 img = ImageIO.read(new File(imagePath)); // 根据图片大小设置文档大小 doc.setPageSize(new Rectangle(img.getWidth(), img.getHeight())); // 实例化图片 image = Image.getInstance(imagePath); // 添加图片到文档 doc.open(); doc.add(image); } } // 关闭文档 doc.close(); } catch (IOException e) { e.printStackTrace(); } catch (BadElementException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } } public static void main(String[] args) { long time1 = System.currentTimeMillis(); toPdf("C:/2018-11-14/", "C:/hebing.pdf"); long time2 = System.currentTimeMillis(); int time = (int) ((time2 - time1) / 1000); System.out.println("执行了:" + time + "秒!"); } }

Java中导入/导出excel|Java中导入/导出excel,导出pdf报表信息
文章图片

3.导入excel文件信息
package com.bxd.app.util; import com.bxd.app.dao.biz.BdCustomerDao; import com.bxd.app.entity.BdCustomer; import com.bxd.core.util.BeanUtil; import com.bxd.core.util.IdcardValidator; import com.bxd.core.util.MD5; import com.bxd.core.util.StringUtil; import com.bxd.core.util.TelValidatorUtil; import com.bxd.core.util.TextFormater; import com.bxd.core.util.UUIDGenerator; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; @Component public class ImportCustomerUtil { private static Logger logger =LoggerFactory.getLogger(ImportCustomerUtil.class); @Autowired public BdCustomerDao bdCustomerDao; /** * 生成需要的数据 * * @param passwd *密码 * @param filePath *文件路径 * @param columns *列数据 * @param type *01 只需要注册的 02 代表 注册和实名都需要的弄的数据 * @return */ @SuppressWarnings("unused") public static List import_excel(String passwd, String filePath, String columns[], String type) { Workbook wb = null; Sheet sheet = null; Row row = null; List list = null; String cellData = https://www.it610.com/article/null; wb = readExcel(filePath); if (wb != null) { // 用来存放表中数据 list = new ArrayList(); // 获取第一个sheet sheet = wb.getSheetAt(0); // 获取最大行数 int rownum = sheet.getPhysicalNumberOfRows(); // 获取第一行 row = sheet.getRow(0); // 获取最大列数 int colnum = row.getPhysicalNumberOfCells(); for (int i = 1; i < rownum; i++) { Map map = new LinkedHashMap(); row = sheet.getRow(i); if (row != null) { for (int j = 0; j < colnum; j++) { cellData = https://www.it610.com/article/(String) getCellFormatValue(row.getCell(j)); map.put(columns[j], cellData); } } else { break; } list.add(map); } } // 遍历解析出来的list logger.info("*******excel读取出来的数量:" + list.size() + "*****"); List excel_result = new LinkedList(); for (Map map : list) { for (Entry entry : map.entrySet()) { //logger.info(entry.getKey() + ":" + entry.getValue() + ","); } BdCustomer bdCustomer = BeanUtil.toBean(map, BdCustomer.class); excel_result.add(bdCustomer); // 存储到list集合中 } List result = new LinkedList(); int no_register=0; if (type.equals("01")) {//只需要注册的用户数据 for (int i = 0; i < excel_result.size(); i++) { // 手机号码格式不正确不能注册的用户信息及数量 if (!TelValidatorUtil.mobileValidator(excel_result.get(i).getTelphone())) { logger.info("姓名:"+excel_result.get(i).getCustName()+","+ excel_result.get(i).getTelphone()+"手机号格式不正确"); no_register++; continue; } //手机号码格式正确同时 客户姓名或者 身份证号不正确 if (TelValidatorUtil.mobileValidator(excel_result.get(i).getTelphone()) && (StringUtil.isEmpty(excel_result.get(i).getCustName()) ||excel_result.get(i).getCustName().indexOf("*")!=-1 ||!"".equals( IdcardValidator.Validate(excel_result.get(i).getIdNo())))) { try { // 对用户信息进行加密 BdCustomer bdCustomer = new BdCustomer(); bdCustomer.setCustNo("U" + UUIDGenerator.nextSerial()); // 如果手机号不为空,则设置用户编号 bdCustomer.setCustAcct(DesensitizationUtil.encrypt_private(excel_result.get(i).getTelphone())); bdCustomer.setTelphone(DesensitizationUtil.encrypt_private(excel_result.get(i).getTelphone())); bdCustomer.setPasswd(MD5.crypt(passwd)); bdCustomer.setRegTime(TextFormater.format(new Date(), "yyyyMMdd")); bdCustomer.setIsBind("0"); bdCustomer.setIsLocked("0"); bdCustomer.setSources("1"); bdCustomer.setCustName(""); bdCustomer.setIdType("01"); result.add(bdCustomer); } catch (Exception ex) { ex.printStackTrace(); } } } logger.info("无法注册的用户数量:"+no_register); } else {//需要注册和实名的用户数据为 for (int i = 0; i < excel_result.size(); i++) { // 手机号正确,姓名及 身份证号格式正确 if (TelValidatorUtil.mobileValidator(excel_result.get(i).getTelphone()) && StringUtil.isNotEmpty(excel_result.get(i).getCustName()) &&excel_result.get(i).getCustName().indexOf("*")==-1 &&"".equals(IdcardValidator.Validate(excel_result.get(i).getIdNo())) ) { try { // 对用户信息进行加密 BdCustomer bdCustomer = new BdCustomer(); //实名认证所需填写信息 bdCustomer.setCustName(DesensitizationUtil.encrypt_private(excel_result.get(i).getCustName())); bdCustomer.setIsVerified("01"); bdCustomer.setVerifiedTime(TextFormater.format(Calendar.getInstance().getTime(), "yyyyMMdd")); bdCustomer.setCustAge(IdNOToAge(excel_result.get(i).getIdNo())); //根据身份证号计算年龄 bdCustomer.setIdNo(DesensitizationUtil.encrypt_private(excel_result.get(i).getIdNo())); bdCustomer.setSources("1"); bdCustomer.setCustNo("U" + UUIDGenerator.nextSerial()); // 如果手机号不为空,则设置用户编号 bdCustomer.setCustAcct(DesensitizationUtil.encrypt_private(excel_result.get(i).getTelphone())); bdCustomer.setTelphone(DesensitizationUtil.encrypt_private(excel_result.get(i).getTelphone())); bdCustomer.setPasswd(MD5.crypt(passwd)); bdCustomer.setRegTime(TextFormater.format(new Date(), "yyyyMMdd")); bdCustomer.setIsBind("0"); bdCustomer.setIsLocked("0"); bdCustomer.setIdType("01"); result.add(bdCustomer); } catch (Exception ex) { ex.printStackTrace(); } } }} return result; } public static void main(String[] args) { String passwd = "666666d"; // 导入用户密码 String filepath = "C:\\test.xlsx"; // 文件路径地址 String columns[] = { "custName", "roofArea", "idNo", "homeAddress", "telphone" }; List result = import_excel(passwd, filepath, columns, "01"); System.out.println(TelValidatorUtil.mobileValidator("")); } /** * 根据身份证号计算年龄 * @param IdNO * @return */ private static int IdNOToAge(String IdNO){ Integerbirthyear=Integer.parseInt(IdNO.substring(6, 10)); //出生年月 Integeryear=Integer.parseInt(TextFormater.format(Calendar.getInstance().getTime(),"yyyy")); // return year-birthyear; } // 读取excel @SuppressWarnings("resource") public static Workbook readExcel(String filePath) { Workbook wb = null; if (filePath == null) { return null; } String extString = filePath.substring(filePath.lastIndexOf(".")); InputStream is = null; try { is = new FileInputStream(filePath); if (".xls".equals(extString)) { return wb = new HSSFWorkbook(is); } else if (".xlsx".equals(extString)) { return wb = new XSSFWorkbook(is); } else { return wb = null; }} catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return wb; } @SuppressWarnings("deprecation") public static Object getCellFormatValue(Cell cell) { Object cellValue = https://www.it610.com/article/null; if (cell != null) { // 判断cell类型 switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: { cellValue = String.valueOf(cell.getNumericCellValue()); break; } case Cell.CELL_TYPE_FORMULA: { // 判断cell是否为日期格式 if (DateUtil.isCellDateFormatted(cell)) { // 转换为日期格式YYYY-mm-dd cellValue = cell.getDateCellValue(); } else { // 数字 cellValue = String.valueOf(cell.getNumericCellValue()); } break; } case Cell.CELL_TYPE_STRING: { cellValue = cell.getRichStringCellValue().getString(); break; } default: cellValue =""; } } else { cellValuehttps://www.it610.com/article/= ""; } return cellValue; } }

    推荐阅读