最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

POI通過模板導(dǎo)出EXCEL文件的實(shí)例

 更新時間:2017年08月15日 09:22:54   投稿:jingxian  
下面小編就為大家?guī)硪黄狿OI通過模板導(dǎo)出EXCEL文件的實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一般的EXCEL導(dǎo)出使用POI先創(chuàng)建一個HSSFWorkbook,然后通過不斷創(chuàng)建HSSFRow,HSSFCell后設(shè)置單元格內(nèi)容便可以完成導(dǎo)出。

這次在項目中需要用到模板,導(dǎo)出的內(nèi)容包括(1.模板中的內(nèi)容、樣式。2.自己需要新增的內(nèi)容、樣式。),還需要設(shè)置單元格的樣式,在網(wǎng)上搜了一些blog,完成后記錄一下。

分析這次需求,最關(guān)鍵的就是如何獲取到填充了模板的新HSSFWorkbook,如果獲取到它,我們可以熟練的往里面添加內(nèi)容。

File fi = new File("F:/usr/user.xls");
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fi)); 
HSSFWorkbook wb = new HSSFWorkbook(fs);

這樣便可以獲取到我們熟悉的HSSFWorkbook對象了,操作熟悉的HSSFWorkbook對象想必爽歪歪了。這里還有一個需求,就是需要設(shè)置一些單元格的樣式,這在之前我也沒有接觸到過,記錄下來。

//生成單元格樣式
HSSFCellStyle cellStyle = wb.createCellStyle(); //wb是上一步創(chuàng)建的HSSFWorkbook對象
//設(shè)置背景顏色
cellStyle.setFillForegroundColor(HSSFColor.RED.index);
//solid 填充 foreground 前景色
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

這樣便創(chuàng)建完成了一個單元格的樣式,接下來便是在特定的單元格添加樣式。

//獲取特定的單元格
HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
//設(shè)置樣式
cell.setCellStyle(cellStyle); //cellStyle是上一步創(chuàng)建的HSSFCellStyle對象 

 

如此,整個需求基本完成。對于整個過程中需要用到的其他方法,這里寫了一個封裝類。

**  有些方法可能只適用此項目,使用時需要修改。

package com.pole.educate.excel;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;

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.hssf.util.HSSFColor;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.RichTextString; 
/** 
 * 共分為六部完成根據(jù)模板導(dǎo)出excel操作:<br/> 
 * 第一步、設(shè)置excel模板路徑(setSrcPath)<br/> 
 * 第二步、設(shè)置要生成excel文件路徑(setDesPath)<br/> 
 * 第三步、設(shè)置模板中哪個Sheet列(setSheetName)<br/> 
 * 第四步、獲取所讀取excel模板的對象(getSheet)<br/> 
 * 第五步、設(shè)置數(shù)據(jù)(分為6種類型數(shù)據(jù):setCellStrValue、setCellDateValue、setCellDoubleValue、setCellBoolValue、setCellCalendarValue、setCellRichTextStrValue)<br/> 
 * 第六步、完成導(dǎo)出 (exportToNewFile)<br/> 
 * 
 * @author Administrator 
 * 
 */ 
public class ExcelWriter {
  POIFSFileSystem fs = null; 
  HSSFWorkbook wb = null; 
  HSSFSheet sheet = null;
  HSSFCellStyle cellStyle = null;
  
  private String srcXlsPath = "";// excel模板路徑 
  private String desXlsPath = ""; // 生成路徑
  private String sheetName = ""; 

  /** 
   * 第一步、設(shè)置excel模板路徑 
   * @param srcXlsPaths 
   */ 
  public void setSrcPath(String srcXlsPaths) { 
    this.srcXlsPath = srcXlsPaths; 
  } 
 
  /** 
   * 第二步、設(shè)置要生成excel文件路徑 
   * @param desXlsPaths
   * @throws FileNotFoundException 
   */ 
  public void setDesPath(String desXlsPaths) throws FileNotFoundException { 
    this.desXlsPath = desXlsPaths;
  } 
 
  /** 
   * 第三步、設(shè)置模板中哪個Sheet列 
   * @param sheetName 
   */ 
  public void setSheetName(String sheetName) { 
    this.sheetName = sheetName; 
  } 
 
  /** 
   * 第四步、獲取所讀取excel模板的對象 
   */ 
  public void getSheet() { 
    try { 
      File fi = new File(srcXlsPath); 
      if(!fi.exists()){ 
        //System.out.println("模板文件:"+srcXlsPath+"不存在!"); 
        return; 
      } 
      fs = new POIFSFileSystem(new FileInputStream(fi)); 
      wb = new HSSFWorkbook(fs);
      sheet = wb.getSheet(sheetName); 
      
      //生成單元格樣式
      cellStyle = wb.createCellStyle();
      //設(shè)置背景顏色
      cellStyle.setFillForegroundColor(HSSFColor.RED.index);
      //solid 填充 foreground 前景色
      cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
      
    } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
  /**
   * 
   */
  public HSSFRow createRow(int rowIndex) {
    HSSFRow row = sheet.createRow(rowIndex);
    return row;
  }
  /**
   * 
   */
  public void createCell(HSSFRow row,int colIndex) {
    row.createCell(colIndex);
  }
  /** 
   * 第五步、設(shè)置單元格的樣式 
   * @param rowIndex  行值 
   * @param cellnum  列值 
   */ 
  public void setCellStyle(int rowIndex, int cellnum) { 
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
    cell.setCellStyle(cellStyle);
  }
  
  /** 
   * 第五步、設(shè)置字符串類型的數(shù)據(jù) 
   * @param rowIndex  行值 
   * @param cellnum  列值 
   * @param value    字符串類型的數(shù)據(jù) 
   */ 
  public void setCellStrValue(int rowIndex, int cellnum, String value) {
    if(value != null) {
      HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
      cell.setCellValue(value);
    }
  } 
 
  /** 
   * 第五步、設(shè)置日期/時間類型的數(shù)據(jù) 
   * @param rowIndex  行值 
   * @param cellnum  列值 
   * @param value    日期/時間類型的數(shù)據(jù) 
   */ 
  public void setCellDateValue(int rowIndex, int cellnum, Date value) { 
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
    cell.setCellValue(value); 
  } 
 
  /** 
   * 第五步、設(shè)置浮點(diǎn)類型的數(shù)據(jù) 
   * @param rowIndex  行值 
   * @param cellnum  列值 
   * @param value    浮點(diǎn)類型的數(shù)據(jù) 
   */ 
  public void setCellDoubleValue(int rowIndex, int cellnum, double value) { 
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
    cell.setCellValue(value); 
  } 
 
  /** 
   * 第五步、設(shè)置Bool類型的數(shù)據(jù) 
   * @param rowIndex  行值 
   * @param cellnum  列值 
   * @param value    Bool類型的數(shù)據(jù) 
   */ 
  public void setCellBoolValue(int rowIndex, int cellnum, boolean value) { 
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
    cell.setCellValue(value); 
  } 
 
  /** 
   * 第五步、設(shè)置日歷類型的數(shù)據(jù) 
   * @param rowIndex  行值 
   * @param cellnum  列值 
   * @param value    日歷類型的數(shù)據(jù) 
   */ 
  public void setCellCalendarValue(int rowIndex, int cellnum, Calendar value) { 
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
    cell.setCellValue(value); 
  } 
 
  /** 
   * 第五步、設(shè)置富文本字符串類型的數(shù)據(jù)。可以為同一個單元格內(nèi)的字符串的不同部分設(shè)置不同的字體、顏色、下劃線 
   * @param rowIndex  行值 
   * @param cellnum  列值 
   * @param value    富文本字符串類型的數(shù)據(jù) 
   */ 
  public void setCellRichTextStrValue(int rowIndex, int cellnum, 
      RichTextString value) { 
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
    cell.setCellValue(value); 
  } 
  
  /** 
   * 第六步、完成導(dǎo)出 
   */ 
  public void exportToNewFile() { 
    FileOutputStream out; 
    try { 
      out = new FileOutputStream(desXlsPath); 
      wb.write(out);
      out.close(); 
    } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 

}

以上這篇POI通過模板導(dǎo)出EXCEL文件的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 5種必會的Java異步調(diào)用轉(zhuǎn)同步的方法你會幾種

    5種必會的Java異步調(diào)用轉(zhuǎn)同步的方法你會幾種

    這篇文章主要介紹了5種必會的Java異步調(diào)用轉(zhuǎn)同步的方法你會幾種,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • JUC三大輔助類CountDownLatch、CyclicBarrier和Semaphore詳解

    JUC三大輔助類CountDownLatch、CyclicBarrier和Semaphore詳解

    這篇文章主要介紹了JUC三大輔助類CountDownLatch、CyclicBarrier和Semaphore詳解,CountDownLatch 類可以設(shè)置一個計數(shù)器,然后通過 countDown 方法來進(jìn)行 減 1 的操作,使用 await 方法等待計數(shù)器不大于 0,然后繼續(xù)執(zhí)行 await 方法 之后的語句,需要的朋友可以參考下
    2024-01-01
  • java堆排序原理與實(shí)現(xiàn)方法分析

    java堆排序原理與實(shí)現(xiàn)方法分析

    這篇文章主要介紹了java堆排序原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了java堆排序的相關(guān)原理、實(shí)現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2018-12-12
  • SpringCloud+Tornado基于jwt實(shí)現(xiàn)請求安全校驗功能

    SpringCloud+Tornado基于jwt實(shí)現(xiàn)請求安全校驗功能

    這篇文章主要介紹了SpringCloud+Tornado基于jwt實(shí)現(xiàn)請求安全校驗,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Java NIO寫大文件對比(win7和mac)

    Java NIO寫大文件對比(win7和mac)

    這篇文章主要介紹了Java NIO寫大文件對比(win7和mac),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 如何使用Java統(tǒng)計gitlab代碼行數(shù)

    如何使用Java統(tǒng)計gitlab代碼行數(shù)

    這篇文章主要介紹了如何使用Java統(tǒng)計gitlab代碼行數(shù),實(shí)現(xiàn)方式通過git腳本將所有的項目拉下來并然后通過進(jìn)行代碼行數(shù)的統(tǒng)計,需要的朋友可以參考下
    2023-10-10
  • SpringBoot實(shí)現(xiàn)國密通信的流程步驟

    SpringBoot實(shí)現(xiàn)國密通信的流程步驟

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)國密通信的流程步驟,我們需要完成以下步驟:生成支持國密的證書,配置兩個 Spring Boot 項目,使用國密證書實(shí)現(xiàn) HTTPS和驗證通信是否成功,通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • java 判斷l(xiāng)ist是否為空過程解析

    java 判斷l(xiāng)ist是否為空過程解析

    這篇文章主要介紹了java 判斷l(xiāng)ist是否為空過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Java設(shè)計模式以虹貓藍(lán)兔的故事講解適配器模式

    Java設(shè)計模式以虹貓藍(lán)兔的故事講解適配器模式

    適配器模式(Adapter?Pattern)是作為兩個不兼容的接口之間的橋梁。這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個獨(dú)立接口的功能
    2022-04-04
  • Spring Boot整合FTPClient線程池的實(shí)現(xiàn)示例

    Spring Boot整合FTPClient線程池的實(shí)現(xiàn)示例

    這篇文章主要介紹了Spring Boot整合FTPClient線程池的實(shí)現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12

最新評論

津市市| 闽侯县| 芷江| 饶河县| 库伦旗| 交口县| 东乌| 哈巴河县| 彰武县| 满城县| 铜川市| 红桥区| 凤庆县| 惠东县| 德清县| 新巴尔虎左旗| 新晃| 贵南县| 高密市| 南投市| 会宁县| 饶平县| 娄烦县| 资溪县| 城市| 湛江市| 报价| 万安县| 六盘水市| 新安县| 富宁县| 昌图县| 高要市| 咸阳市| 保德县| 长汀县| 波密县| 高雄县| 清苑县| 鸡西市| 友谊县|