老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

利用java如何實現把對象數組導出從Excel文件

利用java如何實現把對象數組導出從Excel文件?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

創新互聯建站是一家專注于成都網站制作、做網站、外貿營銷網站建設與策劃設計,宿松網站建設哪家好?創新互聯建站做網站,專注于網站建設10年,網設計領域的專業建站公司;建站業務涵蓋:宿松等地區。宿松做網站價格咨詢:18982081108

一、導入相關jar包,pom依賴如下:

  
   org.apache.poi
   poi
   RELEASE
   

二、開始擼代碼

1.如果導出功能使用的比較多,可以將其做成一個工具類,對我下面貼出的代碼進行改造

//結果返回的是寫入的記錄數(以下用的是自己業務場景數據)
  public int downLoadToExcel(OutputStream outputStream,List paimaiMoneyVOList) {
     //文檔對象
  HSSFWorkbook wb = new HSSFWorkbook();
  int rowNum = 0;
  Sheet sheet = wb.createSheet("excel的標題");
  Row row0 = sheet.createRow(rowNum++);
    //因為場景不同,titil不同,可以在外面寫成數組當參數傳進來
  row0.createCell(0).setCellValue("第一列屬性名");
  row0.createCell(1).setCellValue("第二列屬性名");
  row0.createCell(2).setCellValue("第三列屬性名");
  row0.createCell(3).setCellValue("第四列屬性名");
  row0.createCell(4).setCellValue("第五列屬性名");
  row0.createCell(5).setCellValue("第六列屬性名");
     if (paimaiMoneyVOList != null && paimaiMoneyVOList.size() > 0) {
   for (PaimaiMoneyVO paimaiMoneyVO : paimaiMoneyVOList) {
    Row row = sheet.createRow(rowNum++);
    row.createCell(0).setCellValue(paimaiMoneyVO.getPaimaiId());
    row.createCell(1).setCellValue(paimaiMoneyVO.getTitle());
    row.createCell(2).setCellValue(paimaiMoneyVO.getUsername());
    row.createCell(3).setCellValue(paimaiMoneyVO.getMoney()+"元");
    row.createCell(4).setCellValue("升價拍"); 
    row.createCell(5).setCellValue(bidder);
   }
  }
  try {
   wb.write(outputStream);
   LogEnum.LAW_WARE.info("表數據寫入到excel表成功,一共寫入了"+(rowNum - 1)+"條數據");
   outputStream.close();
  } catch (IOException e) {
   LogEnum.LAW_WARE.error("流關閉異常!", e);
  } finally {
   if (outputStream != null) {
    try {
     outputStream.close();
    } catch (IOException e) {
     LogEnum.LAW_WARE.error("流關閉異常!", e);
    }
   }
  }
  return rowNum - 1;
 }

2.“工具類”寫好后,下面就開始使用它了,從上面的函數參數可以看到,我們需要傳過去兩個對象,一個是輸出流OutPutStream,通過流的方式把excel想要到瀏覽器,

另外一個就是我們需要導出的對象數組,好了,不解釋太多,看代碼。(下面的方法寫在action層,通過struts.xml配置訪問即可實現下載)

public void exportBail(){
  this.fileName = "excel文件名";
  try {
   List paimaiMoneyVOList = new ArrayList<>();
      //下面是我的業務場景獲取對象數組
   if(paimaiMoneySearchParam!=null){
    paimaiMoneySearchParam.setVendorId(WebHelper.getVenderId());
    paimaiMoneySearchParam.setPageSize(Constants.AUCTION_WARE_PAGE_SIZE);
    paimaiMoneySearchParam.setPage(page);
    PaimaiMoneyDto paimaiMoneyDto = auctionWareService1.searchPopPaimaiMoneyList(paimaiMoneySearchParam);
    if(paimaiMoneyDto!=null){
     int count = paimaiMoneyDto.getCount();
     int totalPage = count/ Constants.AUCTION_WARE_PAGE_SIZE + (count% Constants.AUCTION_WARE_PAGE_SIZE > 0?1:0);
     for(int i=1;i<=totalPage;i++){
      paimaiMoneySearchParam.setPage(i);
      PaimaiMoneyDto paimaiMoneyResultResult = auctionWareService1.searchPopPaimaiMoneyList(paimaiMoneySearchParam);
      if(paimaiMoneyResultResult!=null){
       paimaiMoneyVOList.addAll(paimaiMoneyResultResult.getList());
      }
     }
    }
   }
   OutputStream outputStream = response.getOutputStream();
   response.reset();//清空輸出流
   //下面是對中文文件名的處理
   response.setCharacterEncoding("UTF-8");//設置相應內容的編碼格式
       //解析瀏覽器
   final String userAgent = request.getHeader("USER-AGENT").toLowerCase();
   if(userAgent.contains("firefox")){ //火狐瀏覽器
    fileName = new String(fileName.getBytes(), "ISO8859-1");
   }else{
    fileName = URLEncoder.encode(fileName, "UTF-8"); //其他瀏覽器
          fileName = fileName.Replace("+", "%20"); //encode后替換,解決空格問題(其中%20是空格在UTF-8下的編碼 ,如果不這么寫,瀏覽器會用+代替空格)
   }
   response.setHeader("Content-Disposition", "attachment;filename=" +fileName + ".xls");//指定輸出文件名
   response.setContentType("application/msexcel");//定義輸出類型
   int rouNum = ensurePriceListToExcel(outputStream,paimaiMoneyVOList);
   LogEnum.LAW_WARE.info("【RiseAuctionAction.downLoadEnsurePriceExcel】導出成功,一共更新了{"+rouNum+"}條記錄");
  } catch (Exception e) {
   LogEnum.LAW_WARE.error("【RiseAuctionAction.downLoadEnsurePriceExcel】導出失敗,error is {}", e);
  }
 }

三、拓展(詳細的工具類開發)

如果你覺得上面寫的太簡單了,可以繼續往下看,我把它整理出了“萬能”的工具類,供大家參考。

package com.jd.pop.auction.util.excel;
import com.jd.common.web.result.Result;
import com.jd.pop.auction.util.excel.annotations.ExcelColumn;
import com.jd.pop.auction.util.excel.annotations.ExcelMapping;
import com.jd.pop.auction.util.excel.annotations.apt.ExcelColumnAPT;
import com.jd.pop.auction.util.excel.annotations.apt.ExcelMappingAPT;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class GenerateExcel {
 private final static Logger LOG = Logger.getLogger(GenerateExcel.class);
 private HSSFWorkbook workbook;
 private HSSFCellStyle headStyle;
 private HSSFFont headCellFont;
 private HSSFCellStyle theadStyle;
 private HSSFFont theadCellFont;
 private HSSFCellStyle tbodyStyle;
 private HSSFFont tbodyCellFont;
 private HSSFFont stringFont;
 private static final short COLUMN_WIDTH = 15;
 private static final short ROW_HEIGHT = 400;
 public GenerateExcel() {
  this.workbook = new HSSFWorkbook();
  //標題
  this.headStyle = workbook.createCellStyle();
  headStyle.setFillForegroundColor(HSSFColor.GREY_50_PERCENT.index);
  headStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
//  headStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//  headStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
//  headStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
//  headStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
  headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);

//  headStyle.setWrapText(true);
  this.headCellFont = workbook.createFont();
  headCellFont.setFontHeightInPoints((short)13);
  headCellFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  headStyle.setFont(headCellFont);
  this.theadStyle = workbook.createCellStyle();
  theadStyle.setFillForegroundColor(HSSFColor.WHITE.index);
  theadStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  theadStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  theadStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  theadStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
  theadStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
  theadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  theadCellFont = workbook.createFont();
  theadCellFont.setColor(HSSFColor.BLACK.index);
  theadCellFont.setFontHeightInPoints((short) 12);
  theadCellFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  theadStyle.setFont(theadCellFont);
  tbodyStyle = workbook.createCellStyle();
  tbodyStyle.setFillForegroundColor(HSSFColor.WHITE.index);
  tbodyStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  tbodyStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  tbodyStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  tbodyStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
  tbodyStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
  tbodyStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  tbodyStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  tbodyCellFont = workbook.createFont();
  tbodyCellFont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
  tbodyStyle.setFont(tbodyCellFont);
  stringFont = workbook.createFont();
  stringFont.setColor(HSSFColor.BLACK.index);
 }
 public  Result export(List titles, Field[] fields, Class clazz, Collection dataset, OutputStream out, boolean pager) {
  Result result = new Result(false);
  if(pager){
  }else{
   HSSFSheet sheet = workbook.createSheet( "第一頁");
   sheet.setDefaultColumnWidth(COLUMN_WIDTH);
   sheet.setDefaultRowHeight(ROW_HEIGHT);
   //標題
   for (int i = 0; i  it = dataset.iterator();
   int index = titles.size();
   while (it.hasNext()) {
    index++;
    row = sheet.createRow(index);
    T t = (T) it.next();
    for (short i = 0; i < fields.length; i++) {
     HSSFCell cell = row.createCell(i);
     cell.setCellStyle(tbodyStyle);
     Field field = fields[i];
     try {
      String textValue;
      if(field.isAnnotationPresent(ExcelMapping.class)){
       textValue = new ExcelMappingAPT().getColumnValue(field,t,clazz);
      }else{
       textValue = new ExcelColumnAPT().getColumnValue(field,t,clazz);
      }
      cell.setCellValue(textValue);
     } catch (NoSuchMethodException e) {
      String errorMsg = field.getName() +"字段,第"+ index+ "條數據, NoSuchMethodException 反射錯誤!";
      LOG.error(errorMsg,e);
      result.addDefaultModel(errorMsg);
      return result;
     } catch (IllegalAccessException e) {
      String errorMsg = field.getName() +"字段,第"+ index+ "條數據, IllegalAccessException ";
      LOG.error(errorMsg,e);
      result.addDefaultModel(errorMsg);
      return result;
     } catch (InvocationTargetException e) {
      String errorMsg = field.getName() +"字段,第"+ index+ "條數據, InvocationTargetException ";
      LOG.error(errorMsg,e);
      result.addDefaultModel(errorMsg);
      return result;
     }
    }
   }
  }
  try {
   workbook.write(out);
   result.setSuccess(true);
   return result;
  } catch (IOException e) {
   String errorMsg = "將導出數據寫入輸出流失敗!";
   LOG.error("將導出數據寫入輸出流失敗! ",e);
   result.addDefaultModel(errorMsg);
   return result;
  }finally {
   try {
    out.close();
   } catch (IOException e) {
    String errorMsg = "關閉輸出流異常!";
    LOG.error("關閉輸出流異常! ",e);
    result.addDefaultModel(errorMsg);
    return result;
   }
  }
 }
}
public class ExportExcelUtils {
 private final static Logger LOG = Logger.getLogger(ExportExcelUtils.class);
 public static  Result export(List titles,List sourceList, OutputStream out, boolean pager){
  Result result = new Result(false);
  if(CollectionUtils.isEmpty(sourceList)){
   result.addDefaultModel("ExportExcelUtils's param sourceList is empty!");
   LOG.error("ExportExcelUtils's param sourceList is empty!");
   return result;
  }
  if( out == null){
   LOG.error("ExportExcelUtils's param OutputStream is null!");
   result.addDefaultModel("ExportExcelUtils's param OutputStream is null!");
   return result;
  }
  Class clazz = null;
  Field[] fieldArr = null;
  try{
   //得到需要轉換的列名
   clazz = sourceList.get(0).getClass();
   Field[] fields = clazz.getDeclaredFields();
   List fieldList = new ArrayList();
   for(Field field:Arrays.asList(fields)){
    field.setAccessible(true);
    if(field.isAnnotationPresent(ExcelColumn.class)){
     fieldList.add(field);
    }else if(field.isAnnotationPresent(ExcelMapping.class)){
     fieldList.add(field);
    }
   }
   if(CollectionUtils.isEmpty(fieldList)){
    LOG.error("實體類中無需要導出的字段!");
    result.addDefaultModel("實體類中無需要導出的字段!");
    return result;
   }
   fieldArr = fieldList.toArray(new Field[fieldList.size()]);
  }catch(Exception e){
   LOG.error("數據拼裝異常!");
   result.addDefaultModel("數據拼裝異常!");
   return result;
  }
  //生成excel
  GenerateExcel ge = new GenerateExcel();
  return ge.export(titles,fieldArr,clazz,sourceList,out,false);
 }

}

看完上述內容,你們掌握利用java如何實現把對象數組導出從Excel文件的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創新互聯行業資訊頻道,感謝各位的閱讀!


名稱欄目:利用java如何實現把對象數組導出從Excel文件
路徑分享:http://www.xueling.net.cn/article/ihpccs.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 免费中文无码AV动作片 | 天天综合操 | 2021年国产精品免费 | 久久观看免费视频 | 成人国产精品免费观看 | 免费国产精品一区二区三区 | 18禁网站免费无遮挡无码中文 | 亚洲tv久久爽久久爽 | 波多野结衣连续高潮中出 | 99ri精品| 鲁鲁鲁爽爽爽在线视频观看 | 美日韩一区二区三区 | 99久久久无码国产精品免费 | 无码人妻一区二区三区免费N鬼沢 | 欧美中文字幕一区 | 天天骑天天操 | 日韩精品在线免费视频 | 少妇激情一区二区三区视频 | 精品一区二区在线播放 | eeuss第一页 伊人国产在线播放 | 亚洲国产精品高清在线观看 | 天天草视频 | 国产无套码AⅤ在线观看在线播放 | 欧美顶级毛片在线播放 | 中文字幕有码无码人妻在线 | 国产aⅴ精品一区二区三区久久 | 亚洲精品无码久久千人斩探花 | 国内自产少妇自拍区免费 | 中文字幕无码免费久久91 | 成全高清视频免费观看 | 日韩精品亚洲人成在线 | 色欲综合五月丁香五月 | 欧洲熟妇性色黄 | 国产精品白丝喷水在线观看 | 日本无码AAA区A片视频 | 国产精品合集久久久久青苹果 | 岛国a级毛片 | 夜鲁夜鲁狠鲁天天在线 | 欧美—级在线免费片 | 亚洲国产精品久久无人区 | 国产精品自在在线午夜出白浆 |