1. 程式人生 > >POI+Maven實現資料匯出到Excel

POI+Maven實現資料匯出到Excel

關於poi的使用將資料庫中的資料匯出到Excel中詳解

1.首先要匯入poi的maven座標
<dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.14</version>
</dependency>
2.使用工具類進行下載封裝,並且完成下載後單元格的樣式設定,寬度隨著單元格內容長度自適應,以及Excel標題的設定。
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

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.HSSFFont;
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.CellRangeAddress;
import org.apache.poi.hssf.util.HSSFColor;

public class ExportExcel{

    // 顯示的匯出表的標題
    private String title;
    // 匯出表的列名
    private String[] rowName;

    private List<Object[]> dataList = new ArrayList<Object[]>();

    HttpServletResponse response;

    // 構造方法,傳入要匯出的資料
    public ExportExcel(String title, String[] rowName,
            List<Object[]> dataList) {
        this.dataList = dataList;
        this.rowName = rowName;
        this.title = title;
    }

    /*
     * 匯出資料
     */
    public void export(OutputStream out) throws Exception {
        try {
            HSSFWorkbook workbook = new HSSFWorkbook(); // 建立工作簿物件
            HSSFSheet sheet = workbook.createSheet(title); // 建立工作表
            // 產生表格標題行
            HSSFRow rowm = sheet.createRow(0);
            HSSFCell cellTiltle = rowm.createCell(0);

            // sheet樣式定義【getColumnTopStyle()/getStyle()均為自定義方法 - 在下面 - 可擴充套件】
            HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);// 獲取列頭樣式物件
            HSSFCellStyle style = this.getStyle(workbook); // 單元格樣式物件
            /*
             * sheet.addMergedRegion(new
             * CellRangeAddress(0,dataList.get(0).length-1 , 0,
             * (rowName.length-1)));
             */// 合併單元格
            sheet.addMergedRegion(new CellRangeAddress(0, 1, 0,
                    dataList.get(0).length - 1));// 列行
            cellTiltle.setCellStyle(style);
            cellTiltle.setCellValue(title);

            // 定義所需列數
            int columnNum = rowName.length;
            HSSFRow rowRowName = sheet.createRow(0); // 在索引2的位置建立行(最頂端的行開始的第二行)

            // 將列頭設定到sheet的單元格中
            for (int n = 0; n < columnNum; n++) {
                HSSFCell cellRowName = rowRowName.createCell(n); // 建立列頭對應個數的單元格
                cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING); // 設定列頭單元格的資料型別
                HSSFRichTextString text = new HSSFRichTextString(rowName[n]);
                cellRowName.setCellValue(text); // 設定列頭單元格的值
                cellRowName.setCellStyle(columnTopStyle); // 設定列頭單元格樣式
            }

            // 將查詢出的資料設定到sheet對應的單元格中
            for (int i = 0; i < dataList.size(); i++) {

                Object[] obj = dataList.get(i);// 遍歷每個物件
                HSSFRow row = sheet.createRow(i + 2);// 建立所需的行數(從第三行開始寫資料)

                for (int j = 0; j < obj.length; j++) {
                    HSSFCell cell = null; // 設定單元格的資料型別
                    if (j == 0) {
                        cell = row.createCell(j, HSSFCell.CELL_TYPE_NUMERIC);
                        cell.setCellValue(i);
                    } else {
                        cell = row.createCell(j, HSSFCell.CELL_TYPE_STRING);
                        if (obj[j] != null) {
                            cell.setCellValue(obj[j].toString());
                        }
                    }
                    cell.setCellStyle(style); // 設定單元格樣式
                }
            }
            // 讓列寬隨著匯出的列長自動適應
            for (int colNum = 0; colNum < dataList.get(1).length; colNum++) {
                int columnWidth = sheet.getColumnWidth(colNum) / 256;
                for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
                    HSSFRow currentRow;
                    // 當前行未被使用過
                    if (sheet.getRow(rowNum) == null) {
                        currentRow = sheet.createRow(rowNum);
                    } else {
                        currentRow = sheet.getRow(rowNum);
                    }
                    /*
                     * if (currentRow.getCell(colNum) != null) { HSSFCell
                     * currentCell = currentRow.getCell(colNum); if
                     * (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING)
                     * { int length =
                     * currentCell.getStringCellValue().getBytes().length; if
                     * (columnWidth < length) { columnWidth = length; } } }
                     */
                    if (currentRow.getCell(colNum) != null) {
                        HSSFCell currentCell = currentRow.getCell(colNum);
                        if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
                            int length = 0;
                            try {
                                length = currentCell.getStringCellValue()
                                        .getBytes().length;
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                            if (columnWidth < length) {
                                columnWidth = length;
                            }
                        }
                    }

                }
                if (colNum == 0) {
                    sheet.setColumnWidth(colNum, (columnWidth - 2) * 256);
                } else {
                    sheet.setColumnWidth(colNum, (columnWidth + 4) * 256);
                }
            }
            if (workbook != null) {
                try {
                    workbook.write(out);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            out.close();
        }

    }

    /*
     * 列頭單元格樣式
     */
    public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {

        // 設定字型
        HSSFFont font = workbook.createFont();
        // 設定字型大小
        font.setFontHeightInPoints((short) 11);
        // 字型加粗
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        // 設定字型名字
        font.setFontName("Courier New");
        // 設定樣式;
        HSSFCellStyle style = workbook.createCellStyle();
        // 設定底邊框;
        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        // 設定底邊框顏色;
        style.setBottomBorderColor(HSSFColor.BLACK.index);
        // 設定左邊框;
        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        // 設定左邊框顏色;
        style.setLeftBorderColor(HSSFColor.BLACK.index);
        // 設定右邊框;
        style.setBorderRight(HSSFCellStyle.BORDER_THIN);
        // 設定右邊框顏色;
        style.setRightBorderColor(HSSFColor.BLACK.index);
        // 設定頂邊框;
        style.setBorderTop(HSSFCellStyle.BORDER_THIN);
        // 設定頂邊框顏色;
        style.setTopBorderColor(HSSFColor.BLACK.index);
        // 在樣式用應用設定的字型;
        style.setFont(font);
        // 設定自動換行;
        style.setWrapText(false);
        // 設定水平對齊的樣式為居中對齊;
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        // 設定垂直對齊的樣式為居中對齊;
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

        return style;

    }

    /*
     * 列資料資訊單元格樣式
     */
    public HSSFCellStyle getStyle(HSSFWorkbook workbook) {
        // 設定字型
        HSSFFont font = workbook.createFont();
        // 設定字型大小
        // font.setFontHeightInPoints((short)10);
        // 字型加粗
        // font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        // 設定字型名字
        font.setFontName("Courier New");
        // 設定樣式;
        HSSFCellStyle style = workbook.createCellStyle();
        // 設定底邊框;
        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
        // 設定底邊框顏色;
        style.setBottomBorderColor(HSSFColor.BLACK.index);
        // 設定左邊框;
        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
        // 設定左邊框顏色;
        style.setLeftBorderColor(HSSFColor.BLACK.index);
        // 設定右邊框;
        style.setBorderRight(HSSFCellStyle.BORDER_THIN);
        // 設定右邊框顏色;
        style.setRightBorderColor(HSSFColor.BLACK.index);
        // 設定頂邊框;
        style.setBorderTop(HSSFCellStyle.BORDER_THIN);
        // 設定頂邊框顏色;
        style.setTopBorderColor(HSSFColor.BLACK.index);
        // 在樣式用應用設定的字型;
        style.setFont(font);
        // 設定自動換行;
        style.setWrapText(false);
        // 設定水平對齊的樣式為居中對齊;
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        // 設定垂直對齊的樣式為居中對齊;
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

        return style;

    }

}
3.使用方式
List<Map<String, Object>> list = registrationInformationDao
                .findRegistrationInformation1(map);//獲取資料
        List<Object[]> dataList = new ArrayList<Object[]>();
        Object[] objects0 = new Object[list.get(0).size()+1];
        dataList.add(objects0);
        Map<String, Object> map2 = list.get(0);
        Set<String> keySet = map2.keySet();
        int m = 1;
        for (String key : keySet) {
            dataList.get(0)[m++] = key;
        }
        for (int i = 0; i < list.size(); i++) {
            Object[] objects = new Object[list.get(i).size()+1];
            dataList.add(objects);
            int j = 1;
            Map<String, Object> map3 = list.get(i);
            Set<String> keySet1 = map3.keySet();
            for (String key : keySet1) {
                dataList.get(i+1)[j++] = map3.get(key);
            }
        }
// 使用流將資料匯出
OutputStream out = null;
try {
// 防止中文亂碼
Parament findByName = paramentDao.findByName("export_name");

String headStr = "attachment; filename=\""
        + new String((findByName.getParament_value()+/*下載後的檔名*/".xls").getBytes("gb2312"), "ISO8859-1") + "\"";
response.setContentType("octets/stream");
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", headStr);
out = response.getOutputStream();
ExportExcelSeedBack ex = new ExportExcelSeedBack(findByName.getParament_value(),/*表的標題*/ new String[]{findByName.getParament_value()/*內容標題*/},
        dataList/*資料準備  ---資料型別為List<Object[]>*/);
ex.export(out);
} catch (Exception e) {
    e.printStackTrace();
}

相關推薦

POI+Maven實現資料匯出Excel

關於poi的使用將資料庫中的資料匯出到Excel中詳解 1.首先要匯入poi的maven座標 <dependency> <groupId>org.apache.poi</groupId>

java使用poi實現資料匯出

匯出資料可以寫成一個工具類,具體程式碼如下: package com.kanzhun.phoenix.admin.util; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.hssf.util.HSSFCo

SpringBoot整合POI實現檔案匯出Excel,匯入Excel更新Mysql資料庫資料

        上傳功能 轉載自https://blog.csdn.net/xyy1028/article/details/79054749原創寫的非常好,但是每個人都有自己的業務邏輯;所以在研究了一點之後,打上註釋,方便新手理解,同時也方便自己記憶;專案目錄applicat

JAVA 使用 POI實現資料匯出Excel

前言:    人生中第一次釋出部落格,怎麼說還是有點緊張的。希望各位看官多多支援~~~!引入:    就在上個禮拜,專案中有一個需求就是把一些資料匯出到Excel中,並且要求Excel要按照規定的內容和排版顯示匯出來的資料。    當時看到這個需求內心還是有點小壓力的,畢竟剛

Vue+element UI實現表格資料匯出Excel元件

介紹 這是一個可以將頁面中的表格資料匯出為Excel檔案的功能元件,該元件一般與表格一起使用,將表格資料傳給元件,然後通過點選元件按鈕可將表格中的資料匯出成Excel檔案。 使用方法 由於封裝該元件內部引用了xlsx.js,file-saver.js和elementUI,因此在使用該元件時,請先安裝如下

js 實現純前端將資料匯出excel。chome瀏覽器 親測有效。

有了新的需求 所以就瞭解下怎麼用js 直接匯出excel文件。 html程式碼 <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" cont

springboot實現資料庫中資料匯出Excel功能

功能介紹        網上查找了一堆的資料匯出程式碼,可能是自己基礎比較薄弱的原因還是別的什麼原因,導致一直沒有執行成功,就算是執行成功的,結果也是差強人意。在此總結一下自己借鑑別人已經經過自己整合

python實現資料匯出excel--普通格式

python實現資料匯出到excel–普通格式 此文是在django框架下編寫,從資料庫中獲取資料使用的是django-orm 用python匯出資料到excel,簡單到爆!(普通的exce

js 實現純前端將資料匯出excel兩種方式,親測有效

由於專案需要,需要在不呼叫後臺介面的情況下,將json資料匯出到excel表格,參考了好多資料以及很多大佬寫的部落格終於實現,相容chrome沒問題,其他還沒有測試過,這邊介紹兩種實現方式,並附上程式碼和gif動圖,博主不才還望輕噴方法一將table標籤,包括tr、td等對j

Java利用POI實現匯入匯出Excel表格示例程式碼

介紹Jakarta POI 是一套用於訪問微軟格式文件的Java API。Jakarta POI有很多元件組成,其中有用於操作Excel格式檔案的HSSF和用於操作Word的HWPF,在各種元件中目前只有用於操作Excel的HSSF相對成熟。官方主頁http://poi.ap

C#實現匯入匯出Excel資料的兩種方法詳解

這篇文章主要為大家詳細介紹了C#匯入匯出Excel資料的兩種方法,具有一定的參考價值,感興趣的小夥伴們可以參考一下本文為大家分享了C#匯入匯出Excel資料的具體程式碼,供大家參考,具體內容如下注:對於實體類物件最好新建一個並且繼承原有實體類,這樣可以將型別進行修改;方法一:

使用POI資料匯出excel

        在web開發中,有一個經典的功能,就是資料的匯入匯出。特別是資料的匯出,在生產管理或者財務系統中用的非常普遍,因為這些系統經常要做一些報表列印的工作。而資料匯出的格式一般是EXCEL。         現在主流的操作Excel檔案的開源工具有很多,用得比較

POI實現java匯出Excel功能

import java.io.FileOutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel

有關Java從資料庫查詢出的資料匯出Excel POI分頁功能總結

這幾天一直在做Java從資料庫查詢出的資料匯出Excel 的功能;做著做著發現: 當 row 超過65535的時候會報異常,該怎麼解決呢? 首先宣告一下,我的專案是基於Struts+ spring + mybatis的:以下方法僅供參考! 那麼我們先從jsp傳值開始看起吧

IE中在js中將查詢出的資料匯出excel表格

<input style="width: 70px; height: 22px;margin-left: 10%;font-family: \"微軟雅黑\" ; font-size: 12px; color:#2587D2 " type="button" onclick="move('exec

頁面資料匯出Excel要點

在使用資料匯出的時候,後臺的程式碼可以自己寫根據類或者根據網上開源的工具來生成Excel檔案,需要注意的是,使用get和post的方式都可以來獲取到Excel檔案 使用get方式: 可以將查詢引數用key=value的方式傳到後臺,後臺使用request.getParameter

檢索資料匯出Excel

        在前端進行資料檢索時,通常會將根據條件檢索到某個資料的列表排序,而這種資訊對於使用者來說有的時候會很不方便,因此需要將查詢結果匯出到excel檔案中,方便使用者進行檢視對比; 步驟一:呼叫GetQueryIdByCondition獲取到

js資料匯出excel

<html> <meta charset="utf-8"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <scrip

JSON資料匯出Excel

1、下載外掛    1.1、百度雲盤下載:https://pan.baidu.com/s/1WSCTS3auENWJj-aO2gJtww 提取碼: ijq3     1.2、引入jsonExportExcel.js <scrip

js table資料匯出excel檔案

前言 百度了幾篇有關的教程,都差不多甚至可以說是完全相同;在這裡也只是精簡、記錄一下。 程式碼 表格轉換成excel並下載 (document).ready(function () {