如何用java创建Excel并导出?针对这个问题,今天小编总结这篇有关用java创建Excel并导出的文章,希望帮助更多想解决这个办法同学找到更加简单易行的办法。

1、首先创建一个Excel也就是

//声明工作薄 HSSFWorkbook wb = new HSSFWorkbook();

2、接下来未页签sheet重命名,也就是

//sheet页签部分 HSSFSheet sheet = wb.createSheet("页签的名字");

3、规划一下有多少列,再起一个标题,也就是

//合并标题 sheet.addMergedRegion(new Region(0, (short)0, (short)0,(short)(规划的列数)));

4、创建一个表头,也就是

//创建表头 row = sheet.createRow(1);

5、循环插入表格,也就是加一个for循环

//第一层为循环创建行 for (int i = 0; i < contentLst.size(); i++) { row = sheet.createRow(i+2); row.setHeight((short) 550); //第二层创建每行的单元格,并填内容 for (int j = 0; j < contentLst.get(i).length; j++) { cell = row.createCell(j); cell.setCellValue(String.valueOf(contentLst.get(i)[j])); cell.setCellStyle(shstyle); } }

6、内容填完了,你不觉得有的字多有的字少,也就是列宽、行高有问题。怎么办呢?也就是

//创建标题 HSSFRow row = sheet.createRow(0); //设置标题行高 row.setHeight((short) 行高数); //自定义列宽部分,你将每个列宽作为参数传过来具体每列多宽得自己测试了。 if(liekuanLst != null && liekuanLst.size() > 0){ for (int i = 0; i < liekuanLst.size(); i++) { sheet.setColumnWidth((short)i, liekuanLst.get(i)); } }

7、内容填完了是不是好看,加点样式?也就是

//居中字体等样式区域 sheet.setHorizontallyCenter(true); //主题 HSSFCellStyle titlefontshstyle = wb.createCellStyle(); HSSFFont titlefont = wb.createFont(); setcontentStyleTable(titlefontshstyle, titlefont, "黑体", 20, true, false);public static void setcontentStyleTable(HSSFCellStyle shstyle, HSSFFont titlefont, String string, int i, Boolean is_bold, Boolean is_border) { titlefont.setFontHeightInPoints((short) i); titlefont.setFontName(string); shstyle.setWrapText(true);//自动换行 shstyle.setAlignment(HSSFCellStyle.VERTICAL_CENTER); if(i != 11 && is_bold){ titlefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); } if(is_border){ shstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框 shstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左 shstyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右 shstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上 } shstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中 shstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//定义字体样式左右居中 shstyle.setFont(titlefont); }

8、样式也调了,是不是调一调打印,也就是

//添加打印样式 addPrintClassData(sheet, false); //打印的纸张样式public static void addPrintClassData(HSSFSheet sheet, Boolean is_landscape) { sheet.setMargin(HSSFSheet.TopMargin, 0.4);//上≈2 sheet.setMargin(HSSFSheet.BottomMargin, 0.4);//下≈2 sheet.setMargin(HSSFSheet.LeftMargin, 0.2);//左≈0.5 sheet.setMargin(HSSFSheet.RightMargin, 0.2);//右≈0.5 sheet.setHorizontallyCenter(true); sheet.setDefaultRowHeight((short) 400);//设置默认行高 HSSFPrintSetup ps = sheet.getPrintSetup(); ps.setLandscape(is_landscape);//true横向,false纵向 ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);//设置纸张A4}

9、Excel创建完了,你怎么给我呢?那得看你要什么了,也就是

ByteArrayOutputStream bos = null; try{ /*1转为输入流*/ bos = new ByteArrayOutputStream(); wb.write(bos); byte[] bytes = bos.toByteArray(); InputStream in = new ByteArrayInputStream(bytes); /*2直接写入Excel文档*/ /*String fileName = new Date().getTime()+"frozen_excel.xls"; FileOutputStream output = new FileOutputStream("/temp/"+fileName); wb.write(output); output.close();*/ bos.close(); }catch (Exception e){ e.printStackTrace(); }

【总结】
看看上面9步需要哪些参数,将参数封装做一个统一的公共方法,也就是

/** * 导出Excel * @param title Excel标题 * @param liekuanLst 设置的每个列宽 * @param biaotouLst 表头内容 * @param contentLst 单元格内容 * @return 待定 */ public String export_Excel(String title, List<Integer> liekuanLst, List<String> biaotouLst, List<Object[]> contentLst){ //声明工作薄 HSSFWorkbook wb = new HSSFWorkbook(); //sheet页签部分 HSSFSheet sheet = wb.createSheet(title); //自定义列宽部分 if(liekuanLst != null && liekuanLst.size() > 0){ for (int i = 0; i < liekuanLst.size(); i++) { sheet.setColumnWidth((short)i, liekuanLst.get(i)); } } //居中字体等样式区域 sheet.setHorizontallyCenter(true); //主题 HSSFCellStyle titlefontshstyle = wb.createCellStyle(); HSSFFont titlefont = wb.createFont(); setcontentStyleTable(titlefontshstyle, titlefont, "黑体", 20, true, false); //表头样式 HSSFCellStyle btfontshstyle = wb.createCellStyle(); HSSFFont btfont = wb.createFont(); setcontentStyleTable(btfontshstyle, btfont, "宋体", 10, true, true); //内容样式 HSSFCellStyle shstyle = wb.createCellStyle(); HSSFFont contentfont = wb.createFont(); setcontentStyle(shstyle, contentfont, "宋体", 11); //创建标题 HSSFRow row = sheet.createRow(0); //设置标题行高 row.setHeight((short) 920); HSSFCell cell = row.createCell(0); cell.setCellValue(title); cell.setCellStyle(titlefontshstyle); for (int i = 1; i < liekuanLst.size(); i++) { cell = row.createCell(i); cell.setCellStyle(titlefontshstyle); } //合并标题 sheet.addMergedRegion(new Region(0, (short)0, (short)0,(short)(liekuanLst.size()-1))); //创建表头 row = sheet.createRow(1); //行高 row.setHeight((short) 550); if(biaotouLst != null && biaotouLst.size() > 0){ for (int i = 0; i < biaotouLst.size(); i++) { cell = row.createCell(i); cell.setCellValue(biaotouLst.get(i)); cell.setCellStyle(btfontshstyle); } } if(contentLst != null && contentLst.size() > 0){ //循环插入表格内容 for (int i = 0; i < contentLst.size(); i++) { //当前行 row = sheet.createRow(i+2); row.setHeight((short) 550); //每个单元格 for (int j = 0; j < contentLst.get(i).length; j++) { cell = row.createCell(j); cell.setCellValue(String.valueOf(contentLst.get(i)[j])); cell.setCellStyle(shstyle); } } } //添加打印样式 addPrintClassData(sheet, false); /** * 写入数据 */ ByteArrayOutputStream bos = null; try{ /*1转为输入流*/ bos = new ByteArrayOutputStream(); wb.write(bos); byte[] bytes = bos.toByteArray(); InputStream in = new ByteArrayInputStream(bytes); /*2直接写入Excel文档*/ /*String fileName = new Date().getTime()+"frozen_excel.xls"; FileOutputStream output = new FileOutputStream("/temp/"+fileName); wb.write(output); output.close();*/ bos.close(); }catch (Exception e){ e.printStackTrace(); } return ""; } //单元格样式 public static void setcontentStyle(HSSFCellStyle shstyle, HSSFFont titlefont, String string, int i) { titlefont.setFontHeightInPoints((short) i); titlefont.setFontName(string); shstyle.setWrapText(true);//自动换行 if(i != 11){ titlefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); } shstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//定义字体样式左右居中 shstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中 shstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框 shstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左 shstyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右 shstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上 shstyle.setFont(titlefont); } public static void setcontentStyleTable(HSSFCellStyle shstyle, HSSFFont titlefont, String string, int i, Boolean is_bold, Boolean is_border) { titlefont.setFontHeightInPoints((short) i); titlefont.setFontName(string); shstyle.setWrapText(true);//自动换行 shstyle.setAlignment(HSSFCellStyle.VERTICAL_CENTER); if(i != 11 && is_bold){ titlefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); } if(is_border){ shstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框 shstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左 shstyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右 shstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上 } shstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中 shstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//定义字体样式左右居中 shstyle.setFont(titlefont); } //打印的纸张样式 public static void addPrintClassData(HSSFSheet sheet, Boolean is_landscape) { sheet.setMargin(HSSFSheet.TopMargin, 0.4);//上≈2 sheet.setMargin(HSSFSheet.BottomMargin, 0.4);//下≈2 sheet.setMargin(HSSFSheet.LeftMargin, 0.2);//左≈0.5 sheet.setMargin(HSSFSheet.RightMargin, 0.2);//右≈0.5 sheet.setHorizontallyCenter(true); sheet.setDefaultRowHeight((short) 400);//设置默认行高 HSSFPrintSetup ps = sheet.getPrintSetup(); ps.setLandscape(is_landscape);//true横向,false纵向 ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);//设置纸张A4 }

关于用java创建Excel并导出的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果喜欢这篇文章,不如把它分享出去让更多的人看到。