亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java SSM框架下實現數據EXCEL導出下載功能

發布時間:2020-07-15 06:47:12 來源:網絡 閱讀:7626 作者:吃餅的蝸牛 欄目:開發技術

最近公司項目有個需求,是導出列表中的數據并下載。如下圖所示的列表數據,并且該數據不是一個表里的數據。
java  SSM框架下實現數據EXCEL導出下載功能

-------------------------------------------------華麗的分割線------------------------------------------------------------------------------------------------------
實現步驟如下:本項目實現環境為maven項目
1.引入jia包:

java  SSM框架下實現數據EXCEL導出下載功能

2.拷貝ExportExcel文件和ReadExcel文件,是讀取和導出excel文件的工具類,通用型的。
2.1 ReadExcel:
package dwz.plugins;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

                /*****
                 * @category 讀取Excel文件的工具類
                 * @author yinzhifu
                 * @version 2017-12-22
                 */
                public class ReadExcel {
                    public static List<List<Object>> readExcel(File file) throws IOException {
                        String fName = file.getName();
                        String extension = fName.lastIndexOf(".") == -1 ? "" : fName.substring(fName.lastIndexOf(".") + 1);
                        if ("xls".equals(extension)) {// 2003
                            System.err.println("讀取excel2003文件內容");
                            return read2003Excel(file);
                        } else if ("xlsx".equals(extension)) {// 2007
                            System.err.println("讀取excel2007文件內容");
                            return read2007Excel(file);
                        } else {
                            throw new IOException("不支持的文件類型:" + extension);
                        }
                    }

                    /**
                     * 讀取2003excel
                     * 
                     * @param file
                     * @return
                     */
                    @SuppressWarnings("deprecation")
                    private static List<List<Object>> read2003Excel(File file) throws IOException {
                        List<List<Object>> dataList = new ArrayList<List<Object>>();
                        HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(file));
                        HSSFSheet sheet = wb.getSheetAt(0);
                        HSSFRow row = null;
                        HSSFCell cell = null;
                        Object val = null;
                        DecimalFormat df = new DecimalFormat("0");// 格式化數字
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
                        // 如果加1 則為去掉表頭
                        for (int i = sheet.getFirstRowNum() + 1; i < sheet.getPhysicalNumberOfRows(); i++) {
                            row = sheet.getRow(i);
                            if (row == null) {
                                continue;
                            }
                            List<Object> objList = new ArrayList<Object>();
                            for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
                                cell = row.getCell(j);
                                if (cell == null) {
                                    val = null;
                                    objList.add(val);
                                    continue;
                                }
                                switch (cell.getCellType()) {
                                case HSSFCell.CELL_TYPE_STRING:
                                    val = cell.getStringCellValue();
                                    break;
                                case HSSFCell.CELL_TYPE_NUMERIC:
                                    if ("@".equals(cell.getCellStyle().getDataFormatString())) {
                                        val = df.format(cell.getNumericCellValue());
                                    } else if ("General".equals(cell.getCellStyle().getDataFormatString())) {
                                        val = df.format(cell.getNumericCellValue());
                                    } else {
                                        val = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
                                    }
                                    break;
                                case HSSFCell.CELL_TYPE_BOOLEAN:
                                    val = cell.getBooleanCellValue();
                                    break;
                                case HSSFCell.CELL_TYPE_BLANK:
                                    val = "";
                                    break;
                                default:
                                    val = cell.toString();
                                    break;
                                }
                                objList.add(val);
                            }
                            dataList.add(objList);
                        }
                        return dataList;
                    }

                    /**
                     * 讀取excel表頭
                     * 
                     * @param file
                     * @return
                     * @throws IOException
                     */
                    public static String[] readExcelHead(File file) throws IOException {
                        HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(file));
                        HSSFSheet sheet = wb.getSheetAt(0);
                        HSSFRow row = null;
                        HSSFCell cell = null;
                        row = sheet.getRow(0);
                        String[] buff = new String[row.getLastCellNum()];
                        for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) {
                            cell = row.getCell(i);
                            buff[i] = cell.getStringCellValue();
                        }
                        return buff;
                    }

                    /**
                     * 讀取2007excel
                     * 
                     * @param file
                     * @return 文件內容
                     */

                    private static List<List<Object>> read2007Excel(File file) throws IOException {
                        List<List<Object>> dataList = new ArrayList<List<Object>>();
                        XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));
                        XSSFSheet sheet = xwb.getSheetAt(0);
                        XSSFRow row = null;
                        XSSFCell cell = null;
                        Object val = null;
                        DecimalFormat df = new DecimalFormat("0");// 格式化數字
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
                        // 如果開始位置加1 則不讀取表頭
                        for (int i = sheet.getFirstRowNum() + 1; i < sheet.getPhysicalNumberOfRows(); i++) {
                            row = sheet.getRow(i);
                            if (row == null) {
                                continue;
                            }
                            List<Object> objList = new ArrayList<Object>();
                            for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
                                cell = row.getCell(j);
                                if (cell == null) {
                                    val = null;
                                    objList.add(val);
                                    continue;
                                }
                                switch (cell.getCellType()) {
                                case XSSFCell.CELL_TYPE_STRING:
                                    val = cell.getStringCellValue();
                                    break;
                                case XSSFCell.CELL_TYPE_NUMERIC:
                                    if ("@".equals(cell.getCellStyle().getDataFormatString())) {
                                        val = df.format(cell.getNumericCellValue());
                                    } else if ("General".equals(cell.getCellStyle().getDataFormatString())) {
                                        val = df.format(cell.getNumericCellValue());
                                    } else {
                                        val = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
                                    }
                                    break;
                                case XSSFCell.CELL_TYPE_BOOLEAN:
                                    val = cell.getBooleanCellValue();
                                    break;
                                case XSSFCell.CELL_TYPE_BLANK:
                                    val = "";
                                    break;
                                default:
                                    val = cell.toString();
                                    break;
                                }
                                objList.add(val);
                            }
                            dataList.add(objList);
                        }
                        return dataList;
                    }

                    /***
                     * 測試
                     * 
                     * @param args
                     */
                    public static void readExcel() {
                        try {
                            List<List<Object>> list = readExcel(new File("F:\\1.xls"));
                            int num = 1;
                            for (List<Object> objList : list) {
                                System.out.print(num + " ");
                                for (Object obj : objList) {
                                    System.out.print(obj + "\t");
                                }
                                System.out.println();
                                num++;
                            }
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }

                    // 測試表頭
                    public static void readHed() {
                        String[] sArr;
                        try {
                            sArr = readExcelHead(new File("F:\\1.xls"));
                            for (String s : sArr) {
                                System.out.print(s + "  ");
                            }
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                    }

                    public static void main(String[] args) {
                        readHed();
                        System.out.println("\n" + "-----------------");
                        readExcel();
                    }
                }

       2.2 ExportExcel:
            package dwz.plugins;
            import java.io.BufferedInputStream;
            import java.io.BufferedOutputStream;
            import java.io.File;
            import java.io.FileInputStream;
            import java.io.IOException;
            import java.io.InputStream;
            import java.io.OutputStream;
            import java.lang.reflect.Field;
            import java.lang.reflect.InvocationTargetException;
            import java.lang.reflect.Method;
            import java.net.URLEncoder;
            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.HttpServletResponse;
            import org.apache.poi.hssf.usermodel.HSSFCell;
            import org.apache.poi.hssf.usermodel.HSSFCellStyle;
            import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
            import org.apache.poi.hssf.usermodel.HSSFComment;
            import org.apache.poi.hssf.usermodel.HSSFFont;
            import org.apache.poi.hssf.usermodel.HSSFPatriarch;
            import org.apache.poi.hssf.usermodel.HSSFRichTextString;
            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;

            /****
             * 
             * @author yinzhfu
             * @category excel導出公共類
             * @param <T>
             * @serial 2017-12-12
             */
            public class ExportExcel<T> {

                public void exportExcelCar(String[] headers, String sheetName, Collection<T> dataset, OutputStream out) {
                    exportExcel(sheetName, headers, dataset, out, "yyyy-MM-dd");
                }

                /**
                 * 這是一個通用的方法,利用了JAVA的反射機制,可以將放置在JAVA集合中并且符號一定條件的數據以EXCEL 的形式輸出到指定IO設備上
                 * 
                 * @param title
                 *            表格標題名
                 * @param headers
                 *            表格屬性列名數組
                 * @param dataset
                 *            需要顯示的數據集合,集合中一定要放置符合javabean風格的類的對象。此方法支持的
                 *            javabean屬性的數據類型有基本數據類型及String,Date,byte[](圖片數據)
                 * @param out
                 *            與輸出設備關聯的流對象,可以將EXCEL文檔導出到本地文件或者網絡中
                 * @param pattern
                 *            如果有時間數據,設定輸出格式。默認為"yyy-MM-dd"
                 */
                @SuppressWarnings({ "unchecked", "deprecation", "resource" })
                public void exportExcel(String title, String[] headers, Collection<T> dataset, OutputStream out, String pattern) {
                    // 聲明一個工作薄
                    HSSFWorkbook workbook = new HSSFWorkbook();
                    // 生成一個表格
                    HSSFSheet sheet = workbook.createSheet(title);
                    // 設置表格默認列寬度為15個字節
                    sheet.setDefaultColumnWidth((short) 15);
                    // 生成一個樣式
                    HSSFCellStyle style = workbook.createCellStyle();
                    // 設置這些樣式
                    style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
                    style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
                    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
                    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
                    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
                    style.setBorderTop(HSSFCellStyle.BORDER_THIN);
                    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
                    // 生成一個字體
                    HSSFFont font = workbook.createFont();
                    font.setColor(HSSFColor.VIOLET.index);
                    font.setFontHeightInPoints((short) 12);
                    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
                    // 把字體應用到當前的樣式
                    style.setFont(font);
                    // 生成并設置另一個樣式
                    HSSFCellStyle style2 = workbook.createCellStyle();
                    style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
                    style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
                    style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
                    style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
                    style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
                    style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
                    style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
                    style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
                    // 生成另一個字體
                    HSSFFont font2 = workbook.createFont();
                    font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
                    // 把字體應用到當前的樣式
                    style2.setFont(font2);

                    // 聲明一個畫圖的頂級管理器
                    HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
                    // 定義注釋的大小和位置,詳見文檔
                    HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short) 4, 2, (short) 6, 5));
                    // 設置注釋內容
                    comment.setString(new HSSFRichTextString("可以在POI中添加注釋!"));
                    // 設置注釋作者,當鼠標移動到單元格上是可以在狀態欄中看到該內容.
                    comment.setAuthor("leno");

                    // 產生表格標題行
                    HSSFRow row = sheet.createRow(0);
                    for (short i = 0; i < headers.length; i++) {
                        HSSFCell cell = row.createCell(i);
                        cell.setCellStyle(style);
                        HSSFRichTextString text = new HSSFRichTextString(headers[i]);
                        cell.setCellValue(text);
                    }

                    // 遍歷集合數據,產生數據行
                    Iterator<T> it = dataset.iterator();
                    int index = 0;
                    while (it.hasNext()) {
                        index++;
                        row = sheet.createRow(index);
                        T t = (T) it.next();
                        // 利用反射,根據javabean屬性的先后順序,動態調用getXxx()方法得到屬性值
                        Field[] fields = t.getClass().getDeclaredFields();
                        for (short i = 0; i < fields.length; i++) {
                            HSSFCell cell = row.createCell(i);
                            cell.setCellStyle(style2);
                            Field field = fields[i];
                            String fieldName = field.getName();
                            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[] {});
                                // 判斷值的類型后進行強制類型轉換
                                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 byte[]) {
                                    // 有圖片時,設置行高為60px;
                                    row.setHeightInPoints(60);
                                    // 設置圖片所在列寬度為80px,注意這里單位的一個換算
                                    sheet.setColumnWidth(i, (short) (35.7 * 80));
                                    // sheet.autoSizeColumn(i);
                                    byte[] bsValue = (byte[]) value;
                                    HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 255, (short) 6, index, (short) 6,
                                            index);
                                    anchor.setAnchorType(2);
                                    patriarch.createPicture(anchor, workbook.addPicture(bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));
                                } else {
                                    // 其它數據類型都當作字符串簡單處理
                                    if (null == value) {
                                        textValue = "";
                                    } else {
                                        textValue = value.toString();
                                    }
                                }
                                // 如果不是圖片數據,就利用正則表達式判斷textValue是否全部由數字組成
                                if (textValue != null) {
                                    Pattern p = Pattern.compile("^//d+(//.//d+)?$");
                                    Matcher matcher = p.matcher(textValue);
                                    if (matcher.matches()) {
                                        // 是數字當作double處理
                                        cell.setCellValue(Double.parseDouble(textValue));
                                    } else {
                                        HSSFRichTextString richString = new HSSFRichTextString(textValue);
                                        HSSFFont font3 = workbook.createFont();
                                        font3.setColor(HSSFColor.BLUE.index);
                                        richString.applyFont(font3);
                                        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 {
                        workbook.write(out);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                /***
                 * @category 下載excel文件公共方法
                 * 
                 * @param path
                 *            文件所在路徑
                 * @param response
                 */
                public void download(String path, HttpServletResponse response) {
                    try {
                        // path是指欲下載的文件的路徑。
                        File file = new File(path);
                        // 取得文件名。
                        String name = file.getName();
                        String filename = URLEncoder.encode(name, "UTF-8");
                        // 以流的形式下載文件。
                        InputStream fis = new BufferedInputStream(new FileInputStream(path));
                        byte[] buffer = new byte[fis.available()];
                        fis.read(buffer);
                        fis.close();
                        // 清空response
                        response.reset();
                        // 設置response的Header
                        response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
                        response.addHeader("Content-Length", "" + file.length());
                        OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
                        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
                        toClient.write(buffer);
                        toClient.flush();
                        toClient.close();
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
            }

3.controller 部分截圖如下:
java  SSM框架下實現數據EXCEL導出下載功能

java  SSM框架下實現數據EXCEL導出下載功能

4.service 部分截圖如下:

java  SSM框架下實現數據EXCEL導出下載功能

  1. serviceImpl 部分截圖如下:
    java  SSM框架下實現數據EXCEL導出下載功能

6.dao 部分截圖如下:
java  SSM框架下實現數據EXCEL導出下載功能

7.mapper.xml部分截圖如下:
java  SSM框架下實現數據EXCEL導出下載功能

8.還有個關鍵點,如下圖所示:
java  SSM框架下實現數據EXCEL導出下載功能

  1. 所以,我們創建這個實體類,部分如下:
    java  SSM框架下實現數據EXCEL導出下載功能
    10.訪問得出結果如下所示:
    java  SSM框架下實現數據EXCEL導出下載功能
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

呼图壁县| 海盐县| 伊宁市| 新安县| 钟山县| 西华县| 绩溪县| 承德县| 大厂| 安达市| 拉萨市| 南漳县| 嘉义市| 吉水县| 甘泉县| 海门市| 瓮安县| 玉门市| 沈阳市| 星子县| 潜江市| 淅川县| 广汉市| 吉隆县| 峨眉山市| 博湖县| 田林县| 岑溪市| 临泉县| 衡南县| 正蓝旗| 治多县| 上犹县| 达尔| 罗江县| 海宁市| 从江县| 义乌市| 大姚县| 盱眙县| 武鸣县|