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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

poi根據(jù)模板導(dǎo)出excel

2019-11-06 06:14:02
字體:
供稿:網(wǎng)友
package com.CSS.commcon.util;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.CellStyle;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.ss.util.CellRangeAddress;import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class ExcelUtil {//模板map    PRivate Map<String,Workbook> tempWorkbook = new HashMap<String, Workbook>();    //模板輸入流map    private Map<String,FileInputStream> tempStream = new HashMap<String, FileInputStream>();         /**     *      * <p class="detail">     * 描述:臨時(shí)單元格數(shù)據(jù)     * </p>     * @ClassName: Cell     * @version V1.0       * @date 2015年9月26日      * @author <a href="mailto:1435290472@QQ.com">zq</a>     */    class TempCell{        private int row;        private int column;        private CellStyle cellStyle;        private Object data;        //用于列表合并,表示幾列合并        private int columnSize = -1;         public int getColumn() {            return column;        }        public void setColumn(int column) {            this.column = column;        }        public int getRow() {            return row;        }        public void setRow(int row) {            this.row = row;        }        public CellStyle getCellStyle() {            return cellStyle;        }        public void setCellStyle(CellStyle cellStyle) {            this.cellStyle = cellStyle;        }        public Object getData() {            return data;        }        public void setData(Object data) {            this.data = data;        }        public int getColumnSize() {            return columnSize;        }        public void setColumnSize(int columnSize) {            this.columnSize = columnSize;        }    }         /**     *      * <p class="detail">     * 功能:按模板向Excel中相應(yīng)地方填充數(shù)據(jù)     * </p>     * @date 2015年9月26日     * @author <a href="mailto:1435290472@qq.com">zq</a>     * @param tempFilePath     * @param dataMap     * @param sheetNo     * @throws IOException     */    public void writeData(String tempFilePath,Map<String,Object> dataMap,int sheetNo) throws IOException{        //獲取模板填充格式位置等數(shù)據(jù)    //    HashMap tem = getTemp(tempFilePath,sheet);        //讀取模板        Workbook wbModule = getTempWorkbook(tempFilePath);        //數(shù)據(jù)填充的sheet        Sheet wsheet = wbModule.getSheetAt(sheetNo);                 Iterator it = dataMap.entrySet().iterator();        while(it.hasNext()){            @SuppressWarnings("unchecked")Entry<String, Object> entry = (Entry<String, Object>) it.next();            String point = entry.getKey();            Object data = entry.getValue();                         TempCell cell = getCell(point, data,wsheet);            //指定坐標(biāo)賦值            setCell(cell,wsheet);        }        //設(shè)置生成excel中公式自動(dòng)計(jì)算        wsheet.setForceFormulaRecalculation(true);    }         /**     *      * <p class="detail">     * 功能:按模板向Excel中列表填充數(shù)據(jù)。    只支持列合并     * </p>     * @date 2015年9月27日     * @author <a href="mailto:1435290472@qq.com">zq</a>     * @param tempFilePath     * @param heads   列表頭部位置集合     * @param datalist     * @param sheetNo     * @throws FileNotFoundException     * @throws IOException     */    public void writeDateList(String tempFilePath,String[] heads,List<Map<Integer, Object>> datalist,int sheetNo) throws FileNotFoundException, IOException {        //讀取模板        Workbook wbModule = getTempWorkbook(tempFilePath);        //數(shù)據(jù)填充的sheet        Sheet wsheet = wbModule.getSheetAt(sheetNo);        //列表數(shù)據(jù)模板cell        List<TempCell> tempCells = new ArrayList<TempCell>();        for(int i=0;i<heads.length;i++){            String point = heads[i];            TempCell tempCell = getCell(point,null,wsheet);            //取得合并單元格位置  -1:表示不是合并單元格            int pos = isMergedRegion(wsheet, tempCell.getRow(), tempCell.getColumn());            if(pos>-1){                CellRangeAddress range = wsheet.getMergedRegion(pos);                tempCell.setColumnSize(range.getLastColumn()-range.getFirstColumn());            }            tempCells.add(tempCell);        }        //賦值        for(int i=0;i<datalist.size();i++){            Map<Integer, Object> dataMap = datalist.get(i);            for(int j=0;j<tempCells.size();j++){                TempCell tempCell = tempCells.get(j);                tempCell.setRow(tempCell.getRow()+1);                tempCell.setData(dataMap.get(j+1));                setCell(tempCell, wsheet);            }        }              }               /**     *      * <p class="detail">     * 功能:獲取輸入工作區(qū)     * </p>     * @date 2015年9月26日     * @author <a href="mailto:1435290472@qq.com">zq</a>     * @param tempFilePath     * @return     * @throws FileNotFoundException     * @throws IOException     */    private Workbook getTempWorkbook(String tempFilePath) throws FileNotFoundException, IOException {        if(!tempWorkbook.containsKey(tempFilePath)){            if(tempFilePath.endsWith(".xlsx")){                tempWorkbook.put(tempFilePath, new XSSFWorkbook(getFileInputStream(tempFilePath)));            }else if(tempFilePath.endsWith(".xls")){                tempWorkbook.put(tempFilePath, new HSSFWorkbook(getFileInputStream(tempFilePath)));            }        }        return tempWorkbook.get(tempFilePath);    }         /**     *      * <p class="detail">     * 功能:獲得模板輸入流     * </p>     * @date 2015年9月26日     * @author <a href="mailto:1435290472@qq.com">zq</a>     * @param tempFilePath     * @return     * @throws FileNotFoundException     */    private FileInputStream getFileInputStream(String tempFilePath) throws FileNotFoundException {        if(!tempStream.containsKey(tempFilePath)){            tempStream.put(tempFilePath, new FileInputStream(tempFilePath));        }        return tempStream.get(tempFilePath);    }         /**     *      * <p class="detail">     * 功能:設(shè)置單元格數(shù)據(jù),樣式  (根據(jù)坐標(biāo):B3)     * </p>     * @date 2015年9月27日     * @author <a href="mailto:1435290472@qq.com">zq</a>     * @param point     * @param data     * @param sheet     * @return     */    private TempCell getCell(String point,Object data,Sheet sheet){        TempCell tempCell = new TempCell();         //得到列 字母         String lineStr = "";        String reg = "[A-Z]+";        Pattern p = Pattern.compile(reg);        Matcher m = p.matcher(point);               while(m.find()){            lineStr = m.group();        }        //將列字母轉(zhuǎn)成列號  根據(jù)ascii轉(zhuǎn)換        char[] ch = lineStr.toCharArray();        int column = 0;        for(int i=0;i<ch.length;i++){            char c = ch[i];            int post = ch.length-i-1;            int r = (int) Math.pow(10, post);            column = column + r*((int)c-65);        }        tempCell.setColumn(column);                 //得到行號        reg = "[1-9]+";        p = Pattern.compile(reg);        m = p.matcher(point);               while(m.find()){            tempCell.setRow((Integer.parseInt(m.group())-1));        }                 //獲取模板指定單元格樣式,設(shè)置到tempCell (寫列表數(shù)據(jù)的時(shí)候用)        Row rowIn = sheet.getRow(tempCell.getRow());        if(rowIn == null) {            rowIn = sheet.createRow(tempCell.getRow());        }        Cell cellIn = rowIn.getCell(tempCell.getColumn());        if(cellIn == null) {            cellIn = rowIn.createCell(tempCell.getColumn());        }        tempCell.setCellStyle(cellIn.getCellStyle());                 tempCell.setData(data);        return tempCell;    }     /**     *      * <p class="detail">     * 功能:給指定坐標(biāo)賦值     * </p>     * @date 2015年9月27日     * @author <a href="mailto:1435290472@qq.com">zq</a>     * @param tempCell     * @param sheet     */    private void setCell(TempCell tempCell,Sheet sheet) {        if(tempCell.getColumnSize()>-1){            CellRangeAddress rangeAddress = mergeRegion(sheet, tempCell.getRow(), tempCell.getRow(), tempCell.getColumn(), tempCell.getColumn()+tempCell.getColumnSize());            setRegionStyle(tempCell.getCellStyle(), rangeAddress, sheet);        }                 Row rowIn = sheet.getRow(tempCell.getRow());        if(rowIn == null) {            rowIn = sheet.createRow(tempCell.getRow());        }        Cell cellIn = rowIn.getCell(tempCell.getColumn());        if(cellIn == null) {            cellIn = rowIn.createCell(tempCell.getColumn());        }        //根據(jù)data類型給cell賦值        if(tempCell.getData() instanceof String){            cellIn.setCellValue((String)tempCell.getData());        }else if(tempCell.getData() instanceof Integer){            cellIn.setCellValue((int)tempCell.getData());        }else if(tempCell.getData() instanceof Double){            cellIn.setCellValue((double)tempCell.getData());        }else{            cellIn.setCellValue((String)tempCell.getData());        }        //樣式        if(tempCell.getCellStyle()!=null && tempCell.getColumnSize()==-1){            cellIn.setCellStyle(tempCell.getCellStyle());        }                      }         /**     *      * <p class="detail">     * 功能:寫到輸出流并移除資源     * </p>     * @date 2015年9月27日     * @author <a href="mailto:1435290472@qq.com">zq</a>     * @param tempFilePath     * @param os     * @throws FileNotFoundException     * @throws IOException     */    public void writeAndClose(String tempFilePath,OutputStream os) throws FileNotFoundException, IOException{        if(getTempWorkbook(tempFilePath)!=null){            getTempWorkbook(tempFilePath).write(os);            tempWorkbook.remove(tempFilePath);        }        if(getFileInputStream(tempFilePath)!=null){            getFileInputStream(tempFilePath).close();            tempStream.remove(tempFilePath);        }    }         /**     *      * <p class="detail">     * 功能:判斷指定的單元格是否是合并單元格     * </p>     * @date 2015年9月27日     * @author <a href="mailto:1435290472@qq.com">zq</a>     * @param sheet     * @param row     * @param column     * @return  0:不是合并單元格,i:合并單元格的位置     */    private Integer isMergedRegion(Sheet sheet,int row ,int column) {          int sheetMergeCount = sheet.getNumMergedRegions();          for (int i = 0; i < sheetMergeCount; i++) {              CellRangeAddress range = sheet.getMergedRegion(i);              int firstColumn = range.getFirstColumn();              int lastColumn = range.getLastColumn();              int firstRow = range.getFirstRow();              int lastRow = range.getLastRow();              if(row >= firstRow && row <= lastRow){                  if(column >= firstColumn && column <= lastColumn){                      return i;                  }              }          }          return -1;      }         /**     *      * <p class="detail">     * 功能:合并單元格     * </p>     * @date 2015年9月27日     * @author <a href="mailto:1435290472@qq.com">zq</a>     * @param sheet     * @param firstRow     * @param lastRow     * @param firstCol     * @param lastCol     */    private CellRangeAddress mergeRegion(Sheet sheet, int firstRow, int lastRow, int firstCol, int lastCol) {        CellRangeAddress rang = new CellRangeAddress(firstRow, lastRow, firstCol, lastCol);        sheet.addMergedRegion(rang);         return rang;    }         /**     *      * <p class="detail">     * 功能:設(shè)置合并單元格樣式     * </p>     * @date 2015年9月27日     * @author <a href="mailto:1435290472@qq.com">zq</a>     * @param cs     * @param region     * @param sheet     */    private static void setRegionStyle(CellStyle cs, CellRangeAddress region, Sheet sheet){          for(int i=region.getFirstRow();i<=region.getLastRow();i++){              Row row=sheet.getRow(i);              if(row==null) row=sheet.createRow(i);              for(int j=region.getFirstColumn();j<=region.getLastColumn();j++){                  Cell cell=row.getCell(j);                  if(cell==null){                      cell=row.createCell(j);                      cell.setCellValue("");                  }                  cell.setCellStyle(cs);              }          }      }             public static void main(String[] args) throws FileNotFoundException, IOException {//      String tempFilePath = ExcelUtil.class.getResource("demo.xlsx").getPath();        String tempFilePath = "D:/demo.xlsx";        File file = new File("d:/data.xlsx");        OutputStream os = new FileOutputStream(file);                 ExcelUtil excel = new ExcelUtil();//        Map<String, Object> dataMap = new HashMap<String, Object>();//        dataMap.put("B1", "dddd");//        dataMap.put("B2", 55);//        dataMap.put("B3", 55);//        excel.writeData(tempFilePath, dataMap, 0);                 List<Map<Integer, Object>> datalist = new ArrayList<Map<Integer,Object>>();        Map<Integer, Object> data = new HashMap<Integer,Object>();        data.put(1, "雷濤");        data.put(2, "男");        data.put(3, 4222);        datalist.add(data);        data = new HashMap<Integer,Object>();        data.put(1, "小花");        data.put(2, "女");        data.put(3, "5555555");        datalist.add(data);        data = new HashMap<Integer,Object>();        data.put(1, "小華");        data.put(2, "女");        data.put(3, "66665");        datalist.add(data);        String[] heads = new String[]{"A1","B1","C1"};   //必須為列表頭部所有位置集合,   輸出 數(shù)據(jù)單元格樣式和頭部單元格樣式保持一致        excel.writeDateList(tempFilePath,heads,datalist,0);                 //寫到輸出流并移除資源        excel.writeAndClose(tempFilePath, os);        System.out.println("導(dǎo)出成功");        os.flush();        os.close();    }}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 西安市| 黑龙江省| 宿迁市| 汨罗市| 新源县| 江川县| 贵溪市| 星座| 南川市| 清河县| 高安市| 德钦县| 铜川市| 全州县| 陆川县| 平安县| 子长县| 普兰县| 威远县| 巴林左旗| 隆德县| 内江市| 托克托县| 麟游县| 长治市| 卫辉市| 秦安县| 饶河县| 宜阳县| 共和县| 六安市| 当阳市| 治多县| 郓城县| 平邑县| 密云县| 张家界市| 田阳县| 共和县| 柞水县| 宣威市|