国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

JavaWeb動態導出Excel可彈出下載

2019-11-26 14:29:52
字體:
來源:轉載
供稿:網友

由于項目需求,需要將數據導出成Excel表格,并且可選擇導出項,可下載。項目使用的Spring+Mybatis+SpringMVC框架,利用Apache POI導出Excel。POI具體使用請自行百度。話不多說,上代碼。

ExportExcelUtil代碼

package com.rixin.common.util;import java.io.OutputStream;import java.lang.reflect.Method;import java.net.URLEncoder;import java.util.Collection;import java.util.Iterator;import javax.servlet.http.HttpServletResponse;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;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.ss.usermodel.Font;/** * 基于POI的javaee導出Excel工具類 *  * @author wjmisaboy@gmail.com * @see POI */public class ExportExcelUtil { /**  *   * @param response  *   請求  * @param fileName  *   文件名 如:"學生表"  * @param excelHeader  *   excel表頭數組,存放"姓名#name"格式字符串,"姓名"為excel標題行, "name"為對象字段名  * @param dataList  *   數據集合,需與表頭數組中的字段名一致,并且符合javabean規范  * @return 返回一個HSSFWorkbook  * @throws Exception  */ public static <T> HSSFWorkbook export(HttpServletResponse response, String fileName, String[] excelHeader,   Collection<T> dataList) throws Exception {  // 設置請求  response.setContentType("application/application/vnd.ms-excel");  response.setHeader("Content-disposition",    "attachment;filename=" + URLEncoder.encode(fileName + ".xls", "UTF-8"));  // 創建一個Workbook,對應一個Excel文件  HSSFWorkbook wb = new HSSFWorkbook();  // 設置標題樣式  HSSFCellStyle titleStyle = wb.createCellStyle();  // 設置單元格邊框樣式  titleStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上邊框 細邊線  titleStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);// 下邊框 細邊線  titleStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左邊框 細邊線  titleStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右邊框 細邊線  // 設置單元格對齊方式  titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中  titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中  // 設置字體樣式  Font titleFont = wb.createFont();  titleFont.setFontHeightInPoints((short) 15); // 字體高度  titleFont.setFontName("黑體"); // 字體樣式  titleStyle.setFont(titleFont);  // 在Workbook中添加一個sheet,對應Excel文件中的sheet  HSSFSheet sheet = wb.createSheet(fileName);  // 標題數組  String[] titleArray = new String[excelHeader.length];  // 字段名數組  String[] fieldArray = new String[excelHeader.length];  for (int i = 0; i < excelHeader.length; i++) {   String[] tempArray = excelHeader[i].split("#");// 臨時數組 分割#   titleArray[i] = tempArray[0];   fieldArray[i] = tempArray[1];  }  // 在sheet中添加標題行  HSSFRow row = sheet.createRow((int) 0);// 行數從0開始  HSSFCell sequenceCell = row.createCell(0);// cell列 從0開始 第一列添加序號  sequenceCell.setCellValue("序號");  sequenceCell.setCellStyle(titleStyle);  sheet.autoSizeColumn(0);// 自動設置寬度  // 為標題行賦值  for (int i = 0; i < titleArray.length; i++) {   HSSFCell titleCell = row.createCell(i + 1);// 0號位被序號占用,所以需+1   titleCell.setCellValue(titleArray[i]);   titleCell.setCellStyle(titleStyle);   sheet.autoSizeColumn(i + 1);// 0號位被序號占用,所以需+1  }  // 數據樣式 因為標題和數據樣式不同 需要分開設置 不然會覆蓋  HSSFCellStyle dataStyle = wb.createCellStyle();  // 設置數據邊框  dataStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);  dataStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);  dataStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);  dataStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);  // 設置居中樣式  dataStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中  dataStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中  // 設置數據字體  Font dataFont = wb.createFont();  dataFont.setFontHeightInPoints((short) 12); // 字體高度  dataFont.setFontName("宋體"); // 字體  dataStyle.setFont(dataFont);  // 遍歷集合數據,產生數據行  Iterator<T> it = dataList.iterator();  int index = 0;  while (it.hasNext()) {   index++;// 0號位被占用 所以+1   row = sheet.createRow(index);   // 為序號賦值   HSSFCell sequenceCellValue = row.createCell(0);// 序號值永遠是第0列   sequenceCellValue.setCellValue(index);   sequenceCellValue.setCellStyle(dataStyle);   sheet.autoSizeColumn(0);   T t = (T) it.next();   // 利用反射,根據傳過來的字段名數組,動態調用對應的getXxx()方法得到屬性值   for (int i = 0; i < fieldArray.length; i++) {    HSSFCell dataCell = row.createCell(i + 1);    dataCell.setCellStyle(dataStyle);    sheet.autoSizeColumn(i + 1);    String fieldName = fieldArray[i];    String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);// 取得對應getXxx()方法    Class<? extends Object> tCls = t.getClass();// 泛型為Object以及所有Object的子類    Method getMethod = tCls.getMethod(getMethodName, new Class[] {});// 通過方法名得到對應的方法    Object value = getMethod.invoke(t, new Object[] {});// 動態調用方,得到屬性值    if (value != null) {     dataCell.setCellValue(value.toString());// 為當前列賦值    }   }  }  OutputStream outputStream = response.getOutputStream();// 打開流  wb.write(outputStream);// HSSFWorkbook寫入流  wb.close();// HSSFWorkbook關閉  outputStream.flush();// 刷新流  outputStream.close();// 關閉流  return wb; } // XSSFCellStyle.ALIGN_CENTER 居中對齊 // XSSFCellStyle.ALIGN_LEFT 左對齊 // XSSFCellStyle.ALIGN_RIGHT 右對齊 // XSSFCellStyle.VERTICAL_TOP 上對齊 // XSSFCellStyle.VERTICAL_CENTER 中對齊 // XSSFCellStyle.VERTICAL_BOTTOM 下對齊 // CellStyle.BORDER_DOUBLE 雙邊線 // CellStyle.BORDER_THIN 細邊線 // CellStyle.BORDER_MEDIUM 中等邊線 // CellStyle.BORDER_DASHED 虛線邊線 // CellStyle.BORDER_HAIR 小圓點虛線邊線 // CellStyle.BORDER_THICK 粗邊線}

controller代碼

@RequestMapping("/exportProject.do") public void exportProject(HttpServletResponse response, String export) {  String[] excelHeader = export.split(",");  List<Project> projectList = projectService.getProjects(null);  try {   ExportExcelUtil.export(response, "項目表", excelHeader, projectList);  } catch (Exception e) {   e.printStackTrace();  } }

JSP部分代碼

...<div style="margin-top: 5px;" class="am-input-group am-u-sm-4">     <span class="am-input-group-label"><input type="checkbox"      value="項目名稱#name" name="export" checked="checked"></span> <input      type="text" value="項目名稱" disabled="disabled"></div>...

下面上圖

以上就是本文的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河间市| 荆州市| 遵化市| 禹州市| 台南县| 昆明市| 定日县| 胶州市| 黄龙县| 榆中县| 东乡族自治县| 万源市| 津南区| 福海县| 包头市| 荃湾区| 桂平市| 伊春市| 班戈县| 屏东县| 博野县| 武鸣县| 白水县| 兰坪| 太白县| 济南市| 思南县| 子长县| 河池市| 青岛市| 佛教| 鲁甸县| 永善县| 祁门县| 大余县| 新疆| 麻江县| 嘉峪关市| 灵石县| 友谊县| 淮滨县|