1. 程式人生 > >Java開發報表匯入,匯出小工具類

Java開發報表匯入,匯出小工具類

當前演示是是一個自己寫的小工具類報表 匯入  匯出 :

當前的位置是具體的實現 註釋位置是我們需要自己去新增的(匯出或者匯入)

  @RequestMapping(value="/exportData",method = RequestMethod.POST)
    public void exportData(HttpServletRequest request, HttpServletResponse response,
    XXXVO XXXVo) {
        logger.debug("匯出資料 輸入 XXXVo = " + XXXVo.toString());
        OutputStream fOut = null;
        try {
            String fileName = "XXX統計報表";
            HttpSession session = request.getSession();
            session.setAttribute("state", null);
            if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
                response.setContentType("application/vnd.ms-excel");
                String codedFileName = new String(fileName.toString().getBytes("UTF-8"), "ISO8859-1");
                response.setHeader("content-disposition", "attachment;filename=" + codedFileName + ".xls");
            } else {
                response.setContentType("application/vnd.ms-excel");
                String codedFileName = java.net.URLEncoder.encode(fileName, "UTF-8");
                response.setHeader("content-disposition", "attachment;filename=" + codedFileName + ".xls");
            }
            fOut = response.getOutputStream();
            //查詢返回需要的資料
            //自己建立的查詢
            //TODO
            List<XXXVO> retList = XXXService.selectXXX(XXXVo);
            //TODO 分別引數  檔名 對應指定的表頭 列舉類  查詢集合內容
            HSSFWorkbook workbook = ExcelUpload.writeExcel("", fileName, XXXEnum.values(), retList);
            if (workbook != null) {
                workbook.write(response.getOutputStream());
            }
            session.setAttribute("state", "open");
        } catch (Exception e) {
            logger.error("檔案匯出失敗   exportData  XXXVo=={}, error: {}", XXXVo, e);
        } finally {
            try {
                fOut.flush();
                fOut.close();
            } catch (IOException e) {
            logger.error("檔案匯出失敗   exportData  XXXVo=={}, error: {}", XXXVo, e);
            }
        }
    }

匯入讀取資料,具體結合自己的業務邏輯

    ResultInfo resut = new ResultInfo();
        List<XXXInfo> chanceList = null;
        try {
            chanceList = ExcelUpload.readExcel(null, file.getInputStream(), XXX.class,
                XXXEnum.values());
        } catch (IOException e) {
            logger.error("resolveFile 解析XXX匯入Excel出錯", userId, e);
        }


        if (CollectionUtils.isEmpty(chanceList)) {
            resut.setState(1);
            resut.setMsg("Excel資料不存在!");
        }

當前位置是應用的報表匯出工具類(複製程式碼編輯工具類即可)

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
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.usermodel.WorkbookFactory;


import com.paat.common.util.date.DateUtil;
import com.paat.common.util.string.StringUtil;

public class ExcelUpload {


    public static final String EXCEL_TYPE = "application/vnd.ms-excel";


    /**
     * 通過BeanUtils方法讀取excel內容(推薦)
     * @param file 要讀取的excel物件
     * @param t excel對應的泛型物件
     * @return 存放excel內容的list物件
     */
    public static <T> List<T> readExcel(File file, InputStream fis, Class<T> t,
                                        ExcelInterface[] excelInterfaces) {
        List<T> list = null;
        Workbook wBook = fis == null ? readBook(file) : readBook(fis);
        // 取得工作薄物件
        if (wBook != null) {
            list = new ArrayList<T>();
            // 取得工作表索引為sheetNum的工作表
            Sheet sheet = wBook.getSheetAt(0);
            if (sheet != null) {
                // 對每行進行遍歷
                for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
                    Row row = sheet.getRow(rowNum);
                    T tObj = null;
                    try {
                        // 建立泛型物件
                        tObj = t.newInstance();
                    } catch (InstantiationException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                    if (row == null || row.getCell(0) == null) {
                        continue;
                    }
                    // 對每個單元格進行迴圈
                    for (int cellNum = 0; cellNum <= row.getLastCellNum(); cellNum++) {
                        // 取得當前單元格
                        Cell cell = row.getCell(cellNum);
                        if (cell != null) {
                            // 取得表頭資訊
                            String bookTitle = sheet.getRow(0).getCell(cellNum)
                                .getStringCellValue();
                            //取得表頭資訊在列舉類中對應的欄位名
                            String fieldName = getKeyByName(excelInterfaces, bookTitle);
                            try {
                                Class<?> type = PropertyUtils.getPropertyType(tObj, fieldName);
                                if (Date.class.equals(type)) {
                                    BeanUtils.setProperty(tObj, fieldName,
                                        DateUtil.convertString2Date(cell.getStringCellValue()));
                                }
                                if (Number.class.isAssignableFrom(type)) {
                                    BeanUtils.setProperty(tObj, fieldName,
                                        new BigDecimal(cell.getNumericCellValue()));
                                }
                                if (String.class.equals(type)) {
                                    if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
                                        BeanUtils.setProperty(tObj, fieldName,
                                            new BigDecimal(cell.getNumericCellValue())
                                                .stripTrailingZeros().toPlainString());
                                        continue;
                                    }
                                    // 使用BeanUtils設定泛型物件的欄位值
                                    BeanUtils.setProperty(tObj, fieldName,
                                        cell.getStringCellValue());
                                }
                            } catch (NoSuchMethodException e) {
                                continue;
                            } catch (IllegalAccessException e) {
                                e.printStackTrace();
                            } catch (InvocationTargetException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                    // 將設定好的泛型物件存入到list中
                    list.add(tObj);
                }
            }
        }
        return list;
    }


    /**
     * 匯出excel
     * @param path 匯出的路徑地址
     * @param excelInterfaces 欄位與名稱對映列舉
     * @param list 需要匯出的資訊列表
     */
    public static <T> HSSFWorkbook writeExcel(String path, String sheeName,
                                              ExcelInterface[] excelInterfaces, List<T> list) {
        // 建立工作薄物件
        HSSFWorkbook wBook = new HSSFWorkbook();
        Cell cell = null;
        Row row = null;
        // 建立工作表
        Sheet sheet = wBook.createSheet(sheeName);
        // 第一行
        row = sheet.createRow(0);
        // 對泛型物件欄位進行遍歷
        for (int i = 0; i < excelInterfaces.length; i++) {
            // 建立單元格
            cell = row.createCell(i);
            // 設定單元格值的型別為String型別
            cell.setCellType(Cell.CELL_TYPE_STRING);
            // 設定表頭
            cell.setCellValue(excelInterfaces[i].getName());
        }
        // 傳入的物件列表不為null和不為空的請款
        if (CollectionUtils.isNotEmpty(list)) {
            // 對傳入物件列表進行迴圈
            for (int j = 0; j < list.size(); j++) {
                // 建立剩下的行
                row = sheet.createRow(j + 1);
                // 對泛型物件欄位進行遍歷
                for (int x = 0; x < excelInterfaces.length; x++) {


                    String fieldName = excelInterfaces[x].getKey();
                    // 設定單元格內容
                    if (StringUtils.isEmpty(fieldName)) {
                        cell.setCellValue("");
                        continue;
                    }
                    // 建立單元格
                    cell = row.createCell(x);
                    // 設定單元格值的型別為String型別
                    try {
                        Class<?> type = PropertyUtils.getPropertyType(list.get(j), fieldName);
                        String fieldValue = BeanUtils.getProperty(list.get(j), fieldName);
                        if (Double.class.isAssignableFrom(type)) {
                            HSSFCellStyle contextstyle = wBook.createCellStyle();
                            contextstyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));//保留兩位小數點
                            // 設定單元格格式
                            cell.setCellStyle(contextstyle);
                            if (StringUtil.isEmpty(fieldValue)) {
                                fieldValue = "0";
                            }
                            Double cellValue = new BigDecimal(fieldValue).setScale(2,
                                BigDecimal.ROUND_HALF_UP).doubleValue();
                            cell.setCellType(Cell.CELL_TYPE_NUMERIC);
                            cell.setCellValue(cellValue);
                        } else {
                            cell.setCellType(Cell.CELL_TYPE_STRING);
                            cell.setCellValue(fieldValue);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        if (StringUtil.isNotEmpty(path)) {
            // 通過傳入的路徑建立檔案物件
            File file = new File(path);
            try {
                // 檔案不存在的情況
                if (!file.exists()) {
                    // 建立檔案物件
                    file.createNewFile();
                }
                // 通過檔案建立輸出流
                FileOutputStream fos = new FileOutputStream(file);
                // 將工作薄寫入到輸出流中
                wBook.write(fos);
                // 清除輸出流的快取
                fos.flush();
                // 關閉輸出流
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return wBook;
    }


    /**
     * 讀取工作薄物件
     */
    public static Workbook readBook(File file) {
        Workbook wBook = null;
        try {
            FileInputStream fis = new FileInputStream(file);
            wBook = WorkbookFactory.create(fis);
            fis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }


        return wBook;
    }


    /**
     * 讀取工作薄物件
     */
    public static Workbook readBook(InputStream fis) {
        Workbook wBook = null;
        try {
            wBook = WorkbookFactory.create(fis);
            fis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }


        return wBook;
    }


    /**
     * 根據Excel的Title獲取對應的欄位名
     */
    private static String getKeyByName(ExcelInterface[] excelInterfaces, String name) {
        for (ExcelInterface excelInterface : excelInterfaces) {
            if (excelInterface.getName().equals(name)) {
                return excelInterface.getKey();
            }
        }
        return null;
    }


}

相關推薦

Java開發報表匯入匯出工具

當前演示是是一個自己寫的小工具類報表 匯入  匯出 : 當前的位置是具體的實現 註釋位置是我們需要自己去新增的(匯出或者匯入)   @RequestMapping(value="/exportData",method = RequestMethod.POST)     pu

java開發中常用的日期時間工具 DateUtil

java開發中常會用到的 日期時間工具類。 package org.demo; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateForm

JAVA開發經驗(二):常用工具1.1-加解密-MD5

摘要說明: MD5:(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函式,可以產生出一個128位(16位元組)的雜湊值(hash value),用於確保資訊傳輸完整一致。MD5由美國密碼學家羅納德·李維斯特(Ronald Linn

JAVA開發經驗(二):常用工具2.1-IO-檔案操作(FileUtil)

摘要說明: FileUtil主要是整合Apache Commons IO庫中的FileUtils類;主要包括對檔案的屬性查詢,複製,移動,檔案讀取,刪除等 Apache Commons IO庫包含實用程式類,流實現,檔案過濾器,檔案比較器,位元組序轉換類等等 Maven

報表格式Excel的匯入匯出

一,匯入 1,前臺頁面用type="file"接受要匯入的檔案, 例如:<input style="display: inline-block;max-width: 170px;border: 2px solid #e6e6e6;" id="uploadFile" name="uplo

Java操作Excel匯入匯出萬能工具

更新日誌:(程式碼隨時更新、優化、修復bug、也歡迎您私信我) * 更新日誌: * 1.response.reset();註釋掉reset,否在會出現跨域錯誤。 * 2.新增匯出多個單表格。 * 3.

簡書個人文章備份圖片批量匯出工具

  此小工具彌補簡書的 “打包下載文章” 功能上的不足,它能批量的將簡書釋出的個人文章上用到的所有圖片批量爬取並匯出到你的個人電腦,支援 Windows 和 Mac。   匯出的檔案以圖片在頁面上出現的先後順序取名,按一篇文章一個資料夾的方式儲存,資料夾按文章釋出的先後順序編碼 + 文章

java 匯入匯出Excel工具ExcelUtil

前段時間做的分散式整合平臺專案中,許多模組都用到了匯入匯出Excel的功能,於是決定封裝一個ExcelUtil類,專門用來處理Excel的匯入和匯出 本專案的持久化層用的是JPA(底層用hibernate實現),所以匯入和匯出也都是基於實體類的。 在編寫Ex

Java匯入匯出Excel工具ExcelUtil

實戰 匯出就是將List轉化為Excel(listToExcel) 匯入就是將Excel轉化為List(excelToList) 匯入匯出中會出現各種各樣的問題,比如:資料來源為空、有重複行等,我自定義了一個ExcelException異常類,用來處理這些問題。

JAVA工具(17)--Java匯入匯出Excel工具ExcelUtil

實戰 匯出就是將List轉化為Excel(listToExcel) 匯入就是將Excel轉化為List(excelToList) 匯入匯出中會出現各種各樣的問題,比如:資料來源為空、有重複行等,我自定義了一個ExcelException異常類,用來處理這些

Java開發報表——Grid++Report 報表設計器

func pos tracking nchar .html flash target 數據 text2 為了讓數據顯示的更加形象生動,報表在項目中差點兒是很常見的,可是大致能夠分為兩類:

Java開發面試題3年工作經驗的Java程序員面試經

知識 意義 個數 三次握手 post 爬蟲 重復 程序員面試 列表 一、Java基礎部分 1、使用length屬性獲取數組長度,public、private、protected、friendly區別 2、Collection和Collections區別 3、String s

NPOI匯入匯出Excel工具

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Web;

[原始碼分享]使用JAVA開發了一個雷霆戰機遊戲^_^

本程式使用Myeclipse開發,編碼為UTF-8。 本程式實現的主要功能有玩家飛機的控制、玩家飛機子彈發射、敵機移動、敵機子彈發射、boss飛機的折線運動、boss飛機的子彈發射、玩家飛機和boss飛機的血量顯示、遊戲的暫停開始及重新開始、控制遊戲音效的播放、玩家戰機的選擇(五種戰機)、飛

windows 環境下docker匯入匯出映象

這次,以下載node.js映象為例,進入node.js的中文官網,他會告訴你docker 的下載命令是 docker pull node 既然這樣,咱們就win+R,輸入cmd,再命令列輸入 docker pull node 稍等片刻,輸入 docker images

Java開發程式設計師最常用的20%技術有哪些?

Web應用,最常見的研發語言是Java和PHP。後端服務,最常見的研發語言是Java和C/C++。大資料,最常見的研發語言是Java和Python。 基本可以說,Java是現階段中國網際網路公司中覆蓋度最廣的研發語言,掌握了Java技術體系,不管在成熟的大公司,快速發展的公司,還是創業階段的公司

memcached基於magent 多主多從主主同步主從備份匯入匯出大於2M資料。

                       安裝部署memcached 基於magent的 主從同步 主主同步 需下載的包 wget http://www.memcached.org/files/memcached-1.5.10.tar.gz wget https://

easypoi Excel匯入匯出工具

1.用到的jar 紅色的必須的。 下面那些是執行起來,缺哪個就導哪個。 如果報錯提示沒有這個方法的話,重啟Tomcat,還不好使就是jar包版本不對,找個高點的版本。  easypoi-annotation-3.1.0.jar easypoi-base-3.1.0.j

怎樣在Windows下搭建Java開發平臺(送給新手白的文章)

如果你還不懂什麼是Java,建議你先去了解一下基本資料。下面是百度百科的資料,我直接粘出來供大家看。具體資料自行搜尋。提供連結如下:https://baike.baidu.com/item/Java%E5%B9%B3%E5%8F%B0 那我們就知道了,搭建Java開發平臺的過程時

Java Log4j2 動態調整log級別工具

import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import o