真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

利用java反射機(jī)制導(dǎo)出Excel的公共方法以及使用的方法

import java.io.IOException;

古交網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,古交網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為古交上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個(gè)售后服務(wù)好的古交做網(wǎng)站的公司定做!

import java.io.OutputStream;

import java.lang.reflect.Field;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.text.SimpleDateFormat;

import java.util.Collection;

import java.util.Date;

import java.util.Iterator;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import javax.servlet.http.HttpSession;

import org.apache.poi.ss.usermodel.CellStyle;

import org.apache.poi.ss.usermodel.IndexedColors;

import org.apache.poi.xssf.usermodel.XSSFCell;

import org.apache.poi.xssf.usermodel.XSSFCellStyle;

import org.apache.poi.xssf.usermodel.XSSFClientAnchor;

import org.apache.poi.xssf.usermodel.XSSFDrawing;

import org.apache.poi.xssf.usermodel.XSSFFont;

import org.apache.poi.xssf.usermodel.XSSFRichTextString;

import org.apache.poi.xssf.usermodel.XSSFRow;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.cddgg.lianyoulw.utils.Arith;

/**

?* 導(dǎo)出Excel表

?*??

?* @author wangbowen

?*?

?* @param 應(yīng)用泛型,代表任意一個(gè)符合javabean風(fēng)格的類

?*/

public class ExportExcel {

? ? /**

? ? ?* 導(dǎo)出excel

? ? ?* @param footTitle 腳標(biāo)題

? ? ?* @param dataset 控制數(shù)據(jù)

? ? ?* @param out 輸出流

? ? ?*? @param session 會(huì)話

? ? ?*/

? ? public void exportExcel(String footTitle,Collection dataset, OutputStream out,HttpSession session) {

? ? ? ? export(footTitle, null, dataset, out, "yyyy-MM-dd",session);

? ? }

? ? /**

? ? ?* 導(dǎo)出excel

? ? ?* @param footTitle 腳標(biāo)題

? ? ?* @param headers 表頭

? ? ?* @param dataset 控制數(shù)據(jù)

? ? ?* @param out 輸出流

? ? ?* @param session 會(huì)話

? ? ?*/

? ? public void exportExcel(String footTitle, String[] headers, Collection dataset,

? ? ? ? ? ? OutputStream out,HttpSession session) {

? ? ? ? export(footTitle, headers, dataset, out, "yyyy-MM-dd",session);

? ? }

? ? /**

? ? ?* 導(dǎo)出excel

? ? ?* @param footTitle 腳標(biāo)題

? ? ?* @param headers? 表頭

? ? ?* @param dataset 控制數(shù)據(jù)

? ? ?* @param out 輸出流

? ? ?* @param pattern 驗(yàn)證

? ? ?*? @param session 會(huì)話

? ? ?*/

? ? public void exportExcel(String footTitle,String[] headers, Collection dataset,

? ? ? ? ? ? OutputStream out, String pattern,HttpSession session) {

? ? ? ? export(footTitle,headers, dataset, out, pattern,session);

? ? }

? ? /**

? ? ?* 通用的方法,利用了JAVA的反射機(jī)制,可以將放置在JAVA集合中并且符號一定條件的數(shù)據(jù)以EXCEL 的形式輸出到指定IO設(shè)備上

? ? ?*?

? ? ?* @param title

? ? ?*? ? ? ? ? ? 表格標(biāo)題

? ? ?* @param headers

? ? ?*? ? ? ? ? ? 表格屬性列名數(shù)組

? ? ?* @param dataset

? ? ?*? ? ? ? ? ? 需要顯示的數(shù)據(jù)集合,集合中一定要放置符合javabean風(fēng)格的類的對象。此方法支持的

? ? ?*? ? ? ? ? ? javabean屬性的數(shù)據(jù)類型有基本數(shù)據(jù)類型及String,Date,byte[](圖片數(shù)據(jù))

? ? ?* @param out

? ? ?*? ? ? ? ? ? 輸出設(shè)備關(guān)聯(lián)的流對象,可以將EXCEL文檔導(dǎo)出到本地文件或者網(wǎng)絡(luò)中

? ? ?* @param pattern

? ? ?*? ? ? ? ? ? 如果有時(shí)間數(shù)據(jù),設(shè)定輸出格式。默認(rèn)為"yyy-MM-dd"

? ? ?*? @param session 會(huì)話

? ? ?*/

? ? public void export(String title, String[] headers,

? ? ? ? ? ? Collection dataset, OutputStream out, String pattern, HttpSession session) {

? ? ? ? //申明一個(gè)工作簿

? ? ? ? XSSFWorkbook book = new XSSFWorkbook();

? ? ? ? //創(chuàng)建一個(gè)表

? ? ? ? XSSFSheet sheet = book.createSheet();

? ? ? ? // 設(shè)置表格默認(rèn)列寬度為30個(gè)字節(jié)

? ? ? ? sheet.setDefaultColumnWidth(25);

? ? ? ? // 聲明一個(gè)畫圖的頂級管理器

? ? ? ? XSSFDrawing patriarch = sheet.createDrawingPatriarch();

? ? ? ? book.setSheetName(0, title); // 設(shè)置第一個(gè)sheet的名稱

? ? ? ? XSSFRow row = sheet.createRow((short) 0);

? ? ? ? XSSFFont font = book.createFont();

? ? ? ? // font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);

? ? ? ? font.setFontHeightInPoints((short) 9); // 設(shè)置字體大小

? ? ? ? font.setFontName("微軟雅黑");

? ? ? ? XSSFCellStyle style = book.createCellStyle();

? ? ? ? style.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 中對齊

? ? ? ? style.setFont(font);

? ? ? ? style.setBorderTop(XSSFCellStyle.BORDER_THIN);

? ? ? ? style.setBorderBottom(XSSFCellStyle.BORDER_THIN);

? ? ? ? style.setBorderLeft(XSSFCellStyle.BORDER_THIN);

? ? ? ? style.setBorderRight(XSSFCellStyle.BORDER_THIN);

? ? ? ? style.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());

? ? ? ? style.setFillPattern(CellStyle.SOLID_FOREGROUND);

? ? ? ? XSSFCellStyle style2 = book.createCellStyle();

? ? ? ? style2.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 中對齊

? ? ? ? style2.setBorderTop(XSSFCellStyle.BORDER_THIN);

? ? ? ? style2.setBorderBottom(XSSFCellStyle.BORDER_THIN);

? ? ? ? style2.setBorderLeft(XSSFCellStyle.BORDER_THIN);

? ? ? ? style2.setBorderRight(XSSFCellStyle.BORDER_THIN);

? ? ? ? style2.setFont(font);

? ? ? ? for (short i = 0; i < headers.length; i++) {

? ? ? ? ? ? XSSFCell cell = row.createCell(i);

? ? ? ? ? ? cell.setCellStyle(style);

? ? ? ? ? ? XSSFRichTextString text = new XSSFRichTextString(headers[i]);

? ? ? ? ? ? cell.setCellValue(text);

? ? ? ? }

? ? ? ? // 循環(huán)數(shù)據(jù)

? ? ? ? Iterator it = dataset.iterator();

? ? ? ? int index = 0;

? ? ? ? while (it.hasNext()) {

? ? ? ? ? ? index++;

? ? ? ? ? ? row = sheet.createRow(index);

? ? ? ? ? ? T t = (T) it.next();

? ? ? ? ? ? // 利用反射,根據(jù)javabean屬性的先后順序,動(dòng)態(tài)調(diào)用getXxx()方法得到屬性值

? ? ? ? ? ? Field[] fields = t.getClass().getDeclaredFields();

? ? ? ? ? ? for (int i = 0; i < fields.length; i++) {

? ? ? ? ? ? ? ? XSSFCell cell = row.createCell(i);

? ? ? ? ? ? ? ? cell.setCellStyle(style2);

? ? ? ? ? ? ? ? Field field = fields[i];

? ? ? ? ? ? ? ? String fieldName = field.getName();

? ? ? ? ? ? ? ? //如果fieldName是idCard就進(jìn)入if里面

? ? ? ? ? ? ? ? if(fieldName.equals("idCard")){

? ? ? ? ? ? ? ? fieldName = fieldName.equals("idCard")?"IDCard":fieldName;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? String getMethodName = "get"

? ? ? ? ? ? ? ? ? ? ? ? + fieldName.substring(0, 1).toUpperCase()

? ? ? ? ? ? ? ? ? ? ? ? + fieldName.substring(1);

? ? ? ? ? ? ? ? try {

? ? ? ? ? ? ? ? ? ? Class tCls = t.getClass();

? ? ? ? ? ? ? ? ? ? Method getMethod = tCls.getMethod(getMethodName,

? ? ? ? ? ? ? ? ? ? ? ? ? ? new Class[] {});

? ? ? ? ? ? ? ? ? ? Object value = getMethod.invoke(t, new Object[] {});

? ? ? ? ? ? ? ? ? ? // 判斷值的類型后進(jìn)行強(qiáng)制類型轉(zhuǎn)換

? ? ? ? ? ? ? ? ? ? String textValue = null;

? ? ? ? ? ? ? ? ? ? if (value instanceof Boolean) {

? ? ? ? ? ? ? ? ? ? ? ? boolean bValue = (Boolean) value;

? ? ? ? ? ? ? ? ? ? ? ? textValue = "男";

? ? ? ? ? ? ? ? ? ? ? ? if (!bValue) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? textValue = "女";

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? } else if (value instanceof Date) {

? ? ? ? ? ? ? ? ? ? ? ? Date date = (Date) value;

? ? ? ? ? ? ? ? ? ? ? ? SimpleDateFormat sdf = new SimpleDateFormat(pattern);

? ? ? ? ? ? ? ? ? ? ? ? textValue = sdf.format(date);

? ? ? ? ? ? ? ? ? ? }else if(value instanceof Double){

? ? ? ? ? ? ? ? ? ? ? ? double value1 = Double.parseDouble(value.toString());

? ? ? ? ? ? ? ? ? ? ? ? textValue = Arith.doubleTransform(value1);

? ? ? ? ? ? ? ? ? ? }else if (value instanceof byte[]) {

? ? ? ? ? ? ? ? ? ? ? ? // 有圖片時(shí),設(shè)置行高為60px;

? ? ? ? ? ? ? ? ? ? ? ? row.setHeightInPoints(60);

? ? ? ? ? ? ? ? ? ? ? ? // 設(shè)置圖片所在列寬度為80px,注意這里單位的一個(gè)換算

? ? ? ? ? ? ? ? ? ? ? ? sheet.setColumnWidth(i, (short) (35.7 * 80));

? ? ? ? ? ? ? ? ? ? ? ? byte[] bsValue = (byte[]) value;

? ? ? ? ? ? ? ? ? ? ? ? XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1023, 255, (short) 6, index, (short) 6, index);

? ? ? ? ? ? ? ? ? ? ? ? anchor.setAnchorType(2);

? ? ? ? ? ? ? ? ? ? ? ? patriarch.createPicture(anchor, book.addPicture(

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bsValue, XSSFWorkbook.PICTURE_TYPE_JPEG));

? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? //判斷value是否為空

? ? ? ? ? ? ? ? ? ? ? ? if(value != null){

? ? ? ? ? ? ? ? ? ? ? ? // 其它數(shù)據(jù)類型都當(dāng)作字符串簡單處理

? ? ? ? ? ? ? ? ? ? ? ? textValue = value.toString();

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? // 如果不是圖片數(shù)據(jù),就利用正則表達(dá)式判斷textValue是否全部由數(shù)字組成

? ? ? ? ? ? ? ? ? ? if (textValue != null) {

? ? ? ? ? ? ? ? ? ? ? ? Pattern p = Pattern.compile("^//d+(//.//d+)?$");

? ? ? ? ? ? ? ? ? ? ? ? Matcher matcher = p.matcher(textValue);

? ? ? ? ? ? ? ? ? ? ? ? if (matcher.matches()) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? // 是數(shù)字當(dāng)作double處理

? ? ? ? ? ? ? ? ? ? ? ? ? ? cell.setCellValue(Double.parseDouble(textValue));

? ? ? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? ? ?XSSFRichTextString richString = new XSSFRichTextString(

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? textValue);

? ? ? ? ? ? ? ? ? ? ? ? ? ? richString.applyFont(font);

? ? ? ? ? ? ? ? ? ? ? ? ? ? cell.setCellValue(richString);

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? } catch (SecurityException e) {

? ? ? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? ? ? } catch (NoSuchMethodException e) {

? ? ? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? ? ? } catch (IllegalArgumentException e) {

? ? ? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? ? ? } catch (IllegalAccessException e) {

? ? ? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? ? ? } catch (InvocationTargetException e) {

? ? ? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? ? ? } finally {

? ? ? ? ? ? ? ? ? ? // 清理資源

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? try {

? ? ? ? ? ? book.write(out);

? ? ? ? ? ? out.flush();

? ? ? ? ? ? out.close();

? ? ? ? } catch (IOException e) {

? ? ? ? ? ? e.printStackTrace();

? ? ? ? }

? ? }

? ??

}

使用方法:

?ExportExcel ex = new ExportExcel();

? ? ? ? // 設(shè)置列表名

? ? ? ? String[] headers = { "序號", "員工姓名", "性別","合同類型",? "×××號碼", "派遣單位",

? ? ? ? ? ? ? ? "派遣時(shí)間", "合同開始時(shí)間", "合同結(jié)束時(shí)間","合同期限","合同狀態(tài)","合同名稱" };

? ? ? ?//查詢導(dǎo)出列表名的值

? ? ? ? List dataset = contractExpireDmn.getContractMessage();

? ? ? ? response.reset();

? ? ? ? // 設(shè)置生成的文件類型

? ? ? ? response.setContentType("application/vnd.ms-excel");

? ? ? //設(shè)置文件頭

? ? ? ? response.setHeader("Content-disposition","attachment;filename=" +new String(("單位合同預(yù)警信息").getBytes("gbk"), "iso8859-1")

? ? ? ? + ".xlsx");

? ? ? ? OutputStream os = response.getOutputStream();

? ? ? ? // 把數(shù)據(jù)傳入到導(dǎo)出Excel的方法里面

? ? ? ? ex.exportExcel("單位員工合同Excel文檔",headers, dataset, os,session);


網(wǎng)站欄目:利用java反射機(jī)制導(dǎo)出Excel的公共方法以及使用的方法
網(wǎng)站地址:http://weahome.cn/article/ppsppc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部