博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
导出Excel java
阅读量:5741 次
发布时间:2019-06-18

本文共 12998 字,大约阅读时间需要 43 分钟。

1.导出excel的工具类模板

1 public class ExportExcelUtil {  2     private HSSFWorkbook wb = null;  3   4     private HSSFSheet sheet = null;  5   6     /**  7      * @param wb  8      * @param sheet  9      */ 10     public ExportExcelUtil(HSSFWorkbook wb, HSSFSheet sheet) { 11         super(); 12         this.wb = wb; 13         this.sheet = sheet; 14     } 15  16     /** 17      * @return the sheet 18      */ 19     public HSSFSheet getSheet() { 20         return sheet; 21     } 22  23     /** 24      * @param sheet 25      *            the sheet to set 26      */ 27     public void setSheet(HSSFSheet sheet) { 28         this.sheet = sheet; 29     } 30  31     /** 32      * @return the wb 33      */ 34     public HSSFWorkbook getWb() { 35         return wb; 36     } 37  38     /** 39      * @param wb 40      *            the wb to set 41      */ 42     public void setWb(HSSFWorkbook wb) { 43         this.wb = wb; 44     } 45  46     /** 47      * 创建通用EXCEL头部 48      *  49      * @param headString 50      *            头部显示的字符 51      * @param colSum 52      *            该报表的列数 53      */ 54     public void createNormalHead(String headString, int colSum) { 55  56         HSSFRow row = sheet.createRow(0); 57  58         // 设置第一行 59         HSSFCell cell = row.createCell(0); 60         row.setHeight((short) 1000); 61  62         // 定义单元格为字符串类型 63         cell.setCellType(HSSFCell.ENCODING_UTF_16); 64         cell.setCellValue(new HSSFRichTextString(headString)); 65  66         // 指定合并区域 67         sheet.addMergedRegion(new Region(0, (short) 0, 0, (short) colSum)); 68  69         HSSFCellStyle cellStyle = wb.createCellStyle(); 70  71         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐 72         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐 73         cellStyle.setWrapText(true);// 指定单元格自动换行 74  75         // 设置单元格字体 76         HSSFFont font = wb.createFont(); 77         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 78         font.setFontName("宋体"); 79         font.setFontHeight((short) 500); 80         cellStyle.setFont(font); 81  82         cell.setCellStyle(cellStyle); 83     } 84  85     /** 86      * 创建通用报表第二行 87      *  88      * @param params 89      *            统计条件数组 90      * @param colSum 91      *            需要合并到的列索引 92      */ 93     public void createNormalTwoRow(String params,String condition, int colSum) { 94         HSSFRow row1 = sheet.createRow(1); 95         row1.setHeight((short) 400); 96  97         HSSFCell cell2 = row1.createCell(0); 98  99         cell2.setCellType(HSSFCell.ENCODING_UTF_16);100         cell2.setCellValue(new HSSFRichTextString("导出时间:" + params+"    查询条件:"+condition101                 ));102 103         // 指定合并区域104         sheet.addMergedRegion(new Region(1, (short) 0, 1, (short) colSum));105 106         HSSFCellStyle cellStyle = wb.createCellStyle();107         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐108         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐109         cellStyle.setWrapText(true);// 指定单元格自动换行110 111         // 设置单元格字体112         HSSFFont font = wb.createFont();113         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);114         font.setFontName("宋体");115         font.setFontHeight((short) 250);116         cellStyle.setFont(font);117 118         cell2.setCellStyle(cellStyle);119 120     }121 122     /**123      * 设置报表标题124      * 125      * @param columHeader126      *            标题字符串数组127      */128     public void createColumHeader(String[] columHeader) {129 130         // 设置列头131         HSSFRow row2 = sheet.createRow(2);132 133         // 指定行高134         row2.setHeight((short) 800);135 136         HSSFCellStyle cellStyle = wb.createCellStyle();137         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐138         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐139         cellStyle.setWrapText(true);// 指定单元格自动换行140 141         // 单元格字体142         HSSFFont font = wb.createFont();143         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);144         font.setFontName("宋体");145         font.setFontHeight((short) 350);146         cellStyle.setFont(font);147 148         149           cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 设置单无格的边框为粗体150           cellStyle.setBottomBorderColor(HSSFColor.BLACK.index); // 设置单元格的边框颜色.151           cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);152           cellStyle.setLeftBorderColor(HSSFColor.BLACK.index);153           cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);154           cellStyle.setRightBorderColor(HSSFColor.BLACK.index);155           cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);156           cellStyle.setTopBorderColor(HSSFColor.BLUE.index);157          158 159         // 设置单元格背景色160         cellStyle.setFillForegroundColor(HSSFColor.BLUE.index);161         162         cellStyle.setFillBackgroundColor(HSSFColor.SKY_BLUE.index);163         cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);164 165         HSSFCell cell3 = null;166 167         for (int i = 0; i < columHeader.length; i++) {168             cell3 = row2.createCell(i);169             cell3.setCellType(HSSFCell.ENCODING_UTF_16);170             cell3.setCellStyle(cellStyle);171             cell3.setCellValue(new HSSFRichTextString(columHeader[i]));172         }173 174     }175 176     /**177      * 创建内容单元格178      * 179      * @param wb180      *            HSSFWorkbook181      * @param row182      *            HSSFRow183      * @param col184      *            short型的列索引185      * @param align186      *            对齐方式187      * @param val188      *            列值189      */190     public void cteateCell(HSSFWorkbook wb, HSSFRow row, int col, short align,191             String val) {192         HSSFCell cell = row.createCell(col);193         cell.setCellType(HSSFCell.ENCODING_UTF_16);194         cell.setCellValue(new HSSFRichTextString(val));195         HSSFCellStyle cellstyle = wb.createCellStyle();196         cellstyle.setAlignment(align);197         cell.setCellStyle(cellstyle);198     }199     200     public void cteateCell(HSSFWorkbook wb, HSSFRow row, int col,201             String val,HSSFCellStyle cellstyle) {202         HSSFCell cell = row.createCell(col);203         cell.setCellType(HSSFCell.ENCODING_UTF_16);204         cell.setCellValue(new HSSFRichTextString(val));205         cell.setCellStyle(cellstyle);206     }207 208     /**209      * 创建合计行210      * 211      * @param colSum212      *            需要合并到的列索引213      * @param cellValue214      */215     public void createLastSumRow(int colSum, String[] cellValue) {216 217         HSSFCellStyle cellStyle = wb.createCellStyle();218         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐219         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐220         cellStyle.setWrapText(true);// 指定单元格自动换行221 222         // 单元格字体223         HSSFFont font = wb.createFont();224         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);225         font.setFontName("宋体");226         font.setFontHeight((short) 250);227         cellStyle.setFont(font);228 229         HSSFRow lastRow = sheet.createRow((short) (sheet.getLastRowNum() + 1));230         HSSFCell sumCell = lastRow.createCell(0);231 232         sumCell.setCellValue(new HSSFRichTextString("合计"));233         sumCell.setCellStyle(cellStyle);234 //        sheet.addMergedRegion(new Region(sheet.getLastRowNum(), (short) 0,235 //                sheet.getLastRowNum(), (short) colSum));// 指定合并区域236 237         for (int i = 1; i < (cellValue.length + 1); i++) {238             sumCell = lastRow.createCell(i);239             sumCell.setCellStyle(cellStyle);240             sumCell.setCellValue(new HSSFRichTextString(cellValue[i - 1]));241 242         }243 244     }245 246     /**247      * 输入EXCEL文件248      * 249      * @param fileName250      *            文件名251      */252     public void outputExcel(String fileName) {253         FileOutputStream fos = null;254         try {255             fos = new FileOutputStream(new File(fileName));256             wb.write(fos);257             fos.close();258         } catch (FileNotFoundException e) {259             e.printStackTrace();260         } catch (IOException e) {261             e.printStackTrace();262         }263     }264 265 266 }

2.导出调用方法

1 public void exportXls(V_itemList item, HttpServletRequest request, HttpServletResponse response) {  2         HSSFWorkbook wb_item = new HSSFWorkbook();  3         HSSFSheet sheet_item = wb_item.createSheet();  4         ExportExcelUtil exportExcel = new ExportExcelUtil(wb_item, sheet_item);  5         //列数  6         int number = 13 ;  7         // 给工作表列定义列宽(实际应用自己更改列数)  8         for (int i = 0; i < number; i++) {  9             sheet_item.setColumnWidth(i,5000); 10         } 11         // 创建单元格样式 12         HSSFCellStyle cellStyle = wb_item.createCellStyle(); 13         // 指定单元格居中对齐 14         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); 15         // 指定单元格垂直居中对齐 16         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); 17         // 指定当单元格内容显示不下时自动换行 18         cellStyle.setWrapText(true); 19         // 设置单元格字体 20         HSSFFont font = wb_item.createFont(); 21         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 22         font.setFontName("宋体"); 23         font.setFontHeight((short) 200); 24         cellStyle.setFont(font); 25         // 创建报表头部 26         exportExcel.createNormalHead("美容项目列表", number); 27         // 设置第二行 28         Date now = new Date();  29         DateFormat d1 = DateFormat.getDateTimeInstance(); 30         String nowDate = d1.format(now);  31         String excelWhere=getItemExcelWhere(item, request); 32         if (StringUtil.isEmpty(excelWhere)) { 33             excelWhere="无"; 34         } 35         exportExcel.createNormalTwoRow(nowDate,excelWhere, number); 36         HSSFRow row2 = sheet_item.createRow(2); 37          38         HSSFCell cell0 = row2.createCell(0); 39         cell0.setCellStyle(cellStyle); 40         cell0.setCellValue(new HSSFRichTextString("项目编号")); 41          42          43         HSSFCell cell1 = row2.createCell(1); 44         cell1.setCellStyle(cellStyle); 45         cell1.setCellValue(new HSSFRichTextString("项目名称")); 46          47         HSSFCell cell2 = row2.createCell(2); 48         cell2.setCellStyle(cellStyle); 49         cell2.setCellValue(new HSSFRichTextString("项目类型")); 50          51        92         String sql; 93         sql="from V_itemList t"; 94         String sqlWhere = getItemSqlWhere(item,request); 95         if (!sqlWhere.isEmpty()) { 96             sql+=" where "+sqlWhere; 97         } 98         List
itemList= systemService.findByQueryString(sql); 99 // 循环创建中间的单元格的各项的值100 for (int i =0; i < itemList.size(); i++) {101 V_itemList dc = itemList.get(i);102 HSSFRow row = sheet_item.createRow((short) i + 3);103 exportExcel.cteateCell(wb_item, row, (short) 0,HSSFCellStyle.ALIGN_CENTER_SELECTION, String .valueOf(dc.getNo()));104 exportExcel.cteateCell(wb_item, row, (short) 1,HSSFCellStyle.ALIGN_CENTER_SELECTION, String .valueOf(dc.getName()));105 exportExcel.cteateCell(wb_item, row, (short) 2,HSSFCellStyle.ALIGN_CENTER_SELECTION, String .valueOf(dc.getTypename()));106 131 }132 133 exportExcel.outputExcel("d:\\itemList.xls");134 download("d:\\itemList.xls", response); 135 }

3.弹出下载框

1 /** 2      * 弹出下载框 3      * @param path 4      * @param response 5      */ 6     private void download(String path, HttpServletResponse response) {   7         try {   8             // path是指欲下载的文件的路径。   9             File file = new File(path);  10             // 取得文件名。  11             String filename = file.getName();  12             // 以流的形式下载文件。  13             InputStream fis = new BufferedInputStream(new FileInputStream(path));  14             byte[] buffer = new byte[fis.available()];  15             fis.read(buffer);  16             fis.close();  17             // 清空response  18             response.reset();  19             // 设置response的Header  20             response.addHeader("Content-Disposition", "attachment;filename="  21                     + new String(filename.getBytes()));  22             response.addHeader("Content-Length", "" + file.length());  23             OutputStream toClient = new BufferedOutputStream(  24                     response.getOutputStream());  25             response.setContentType("application/vnd.ms-excel;charset=gb2312");  26             toClient.write(buffer);  27             toClient.flush();  28             toClient.close();  29         } catch (IOException ex) {  30             ex.printStackTrace();  31         }  32     }

 

转载于:https://www.cnblogs.com/changeQian/p/5139754.html

你可能感兴趣的文章
nagios监控windows 改了NSclient++默认端口 注意事项
查看>>
干货 | JAVA代码引起的NATIVE野指针问题(上)
查看>>
POI getDataFormat() 格式对照
查看>>
Python 中的进程、线程、协程、同步、异步、回调
查看>>
好的产品原型具有哪些特点?
查看>>
实现java导出文件弹出下载框让用户选择路径
查看>>
刨根问底--技术--jsoup登陆网站
查看>>
OSChina 五一劳动节乱弹 ——女孩子晚上不要出门,发生了这样的事情
查看>>
Spring--通过注解来配置bean
查看>>
pandas 十分钟入门
查看>>
nginx rewrite
查看>>
前端安全系列(一):如何防止XSS攻击?
查看>>
IK分词器安装
查看>>
查看Linux并发连接数
查看>>
你是谁不重要,关键是你跟谁!
查看>>
CSS中规则@media的用法
查看>>
pychecker:分析你的python代码
查看>>
我的友情链接
查看>>
DNS显性+隐性URL转发原理
查看>>
我的友情链接
查看>>