日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

poi导出Excel(分行单元格颜色设置,字体设置,合并单元格,插入图片)

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poi导出Excel(分行单元格颜色设置,字体设置,合并单元格,插入图片) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是一個日報導出功能的代碼;圖片是用JfreeChars生成好的,話不多少 看代碼

public String excelExport(HttpServletRequest request,HttpServletResponse response,CarSaledailyDTO carSaledailyDTO){//獲取需要導出的報表數據
    List
<List<List>> list = carSaledailyFacade.excelData(carSaledailyDTO,request);HSSFWorkbook workbook = new HSSFWorkbook();HSSFSheet sheet = workbook.createSheet("銷售日報");CellRangeAddress region=new CellRangeAddress(0, 1, 0, 30);sheet.addMergedRegion(region);HSSFRow row=sheet.createRow(0);//合并列HSSFCell cell=row.createCell(0);HSSFFont f = workbook.createFont();f.setFontName("黑體");f.setFontHeightInPoints((short) 22);//字號 f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗 HSSFCellStyle style = workbook.createCellStyle(); style.setFont(f); style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中cell.setCellValue("日報");cell.setCellStyle(style);int r =2;for(int i = 0;i<list.size();i++){r=createRow(list.get(i), sheet,r,workbook);} //cell.setCellStyle(style);//HSSFSheet sheet1 = workbook.createSheet("全國每日提報量和成交合同量"); FileInputStream stream;String path = request.getSession().getServletContext().getRealPath("/");System.out.println(path);try {stream = new FileInputStream(path+"images\\pic\\line.png");byte[] bytes=new byte[(int)stream.getChannel().size()];stream.read(bytes);//讀取圖片到二進制數組int pictureIdx = workbook.addPicture(bytes, HSSFWorkbook.PICTURE_TYPE_JPEG);HSSFPatriarch patriarch = sheet.createDrawingPatriarch();HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short)0, 33, (short)20, 60);HSSFPicture pict = patriarch.createPicture(anchor, pictureIdx);//pict.resize();//自動調節圖片大小,圖片位置信息可能丟失} catch (Exception e1) {// TODO Auto-generated catch block e1.printStackTrace();}ByteArrayOutputStream os = new ByteArrayOutputStream();try {workbook.write(os);} catch (IOException e) {e.printStackTrace();}byte[] content = os.toByteArray();InputStream is = new ByteArrayInputStream(content);try {// 設置response參數,可以打開下載頁面 response.reset();response.setContentType("application/vnd.ms-excel;charset=utf-8");//response.setHeader("Content-Disposition", "attachment;filename=" + new String(".xls").getBytes(), "iso-8859-1"));String filename = "SaleDailyReport"+carSaledailyDTO.getSearchDate()+".xls";response.setHeader("Content-Disposition", "attachment;filename= "+ URLEncoder.encode(filename, "UTF-8"));ServletOutputStream out = response.getOutputStream();BufferedInputStream bis = null;BufferedOutputStream bos = null;bis = new BufferedInputStream(is);bos = new BufferedOutputStream(out);byte[] buff = new byte[2048];int bytesRead;// Simple read/write loop.while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {bos.write(buff, 0, bytesRead);}if (bis != null)bis.close();if (bos != null)bos.close();} catch (final IOException e) {e.printStackTrace();} return "導出成功!";}

上面這個方法是koala框架里的基于spring mvc的一個controller,完全可以忽略參數*DTO;

public Integer createRow(List<List> list,HSSFSheet sheet,int r,HSSFWorkbook workbook){for(int k = 0;k<list.size();k++){HSSFCellStyle style = workbook.createCellStyle();//設置邊框樣式 style.setBorderTop(HSSFCellStyle.BORDER_THIN);style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);//設置邊框顏色 style.setTopBorderColor(HSSFColor.BLACK.index);style.setBottomBorderColor(HSSFColor.BLACK.index);style.setLeftBorderColor(HSSFColor.BLACK.index);style.setRightBorderColor(HSSFColor.BLACK.index);style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);if(r==2){style.setFillForegroundColor(HSSFColor.YELLOW.index);}else if(r==7||r==15||r==23||r==31){style.setFillForegroundColor(HSSFColor.RED.index);}else if(r==9){style.setFillForegroundColor(HSSFColor.GOLD.index);}else if(r==17){style.setFillForegroundColor(HSSFColor.TAN.index);}else if(r==25){style.setFillForegroundColor(HSSFColor.SEA_GREEN.index);}else{style.setFillForegroundColor(HSSFColor.WHITE.index);}HSSFRow row = sheet.createRow(r);if(list.get(k)!=null){for(int j =0;j<list.get(k).size();j++){HSSFCell cell = row.createCell(j);cell.setCellValue((list.get(k).get(j))+"");cell.setCellStyle(style);}}r+=1;}if(r==8||r==16||r==24){HSSFRow row1 = sheet.createRow(r);for(int j =0;j<list.get(0).size();j++){HSSFCellStyle style = workbook.createCellStyle();style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);style.setFillForegroundColor(HSSFColor.GREY_50_PERCENT.index);HSSFCell cell = row1.createCell(j);cell.setCellValue("");cell.setCellStyle(style);}}r+=1;System.out.println(r);return r;}

除去Excel的標題‘日報’部分 和 圖片導入;其余數據寫入及單元格樣式設計實在createRow方法里面實現的;

需要注意的是

1.我們在頁面導出excel文檔時,都會涉及到一個導出路徑選擇的問題,在第一段代碼中設置response參數之后就可以實現;發送到出請求時在直接在頁面發送超鏈接請求,如:

2.使用瀏覽器導出excel的文件名如果是中文,可能會出現亂碼問題(這里火狐瀏覽器比較特殊,所以為了不出現亂碼,建議統一使用英文名)

response.setHeader("Content-Disposition", "attachment;filename=" + new String(".xls").getBytes(), "UTF-8"));// 火狐瀏覽器 response.setHeader("Content-Disposition", "attachment;filename= "+ URLEncoder.encode(filename, "UTF-8"));//其他

轉載于:https://www.cnblogs.com/Mu-yi/p/5465029.html

總結

以上是生活随笔為你收集整理的poi导出Excel(分行单元格颜色设置,字体设置,合并单元格,插入图片)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。