1. 程式人生 > >Spring 使用POI匯出Excel並生成下拉選項

Spring 使用POI匯出Excel並生成下拉選項

在開發中我們經常會用到生成excel,下面是spring專案前後端分離匯出excel工具類,介面中直接引用即可。

首先引入poi-jar包:

		<dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi</artifactId>
		    <version>3.14</version>
		</dependency>
		<dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi-ooxml</artifactId>
		    <version>3.14</version>
		</dependency>

ExcelPoiUtil:

import java.util.List;

import org.apache.poi.hssf.usermodel.DVConstraint;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
import org.apache.poi.hssf.usermodel.HSSFFont;
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.ss.usermodel.IndexedColors;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellRangeAddressList;

public class ExcelPoiUtil {

	/**
	 * 
	 * @param fileName 檔名稱
	 * @param sheetName sheet頁名稱
	 * @param titleList 列名
	 * @param titleCodeList 列名對應的code
	 * @param parpamtsList 可選擇引數列(需與列名一比一)
	 */
	public static HSSFWorkbook createExcel(String fileName,String sheetName,List<String> titleList,List<String> titleCodeList,List<List<String>> parpamtsList) {
		 HSSFWorkbook wb = new HSSFWorkbook();
		 
		 HSSFSheet sheet = setSheetBaseInfoExcel(sheetName,36,30,wb);
		 
		 //設定前三行凍結
	     sheet.createFreezePane(0,3,0,3);
	     //此處是設定 第一行 合併單元格的個數(標題行)
	     sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, (titleList.size()-1)));
	     
	     // 產生表格標題行
	    HSSFRow rowm = sheet.createRow(0);
	    HSSFCell cellTiltle = rowm.createCell(0);
	    HSSFCellStyle columnTopStyle = getColumnTopStyle(wb);//獲取列頭樣式物件
	    cellTiltle.setCellStyle(columnTopStyle);
	    cellTiltle.setCellValue(sheetName);
	    rowm.setHeightInPoints(25);
	    
	    //隱藏第二行,並填寫code值
	    HSSFRow row_titleCode = sheet.createRow(1);
	    for(int i=0;i<titleCodeList.size();i++) {
	    	HSSFCell cellTiltleCode = row_titleCode.createCell(i);
	    	cellTiltleCode.setCellValue(titleCodeList.get(i));
	    }
	    row_titleCode.setZeroHeight(true);
	    
	    //設定第三行標題 標題列
	    HSSFRow row_titleName = sheet.createRow(2);
	    HSSFCellStyle style = getStyle(wb);
        for (int i=0;i<titleList.size();i++){
            HSSFCell cell_titleName = row_titleName.createCell(i);
            cell_titleName.setCellValue(titleList.get(i));
            cell_titleName.setCellStyle(style);
        }
        
        //設定預設下拉內容
        if(parpamtsList!=null && parpamtsList.size()>0) {
        	for(int i=0;i<parpamtsList.size();i++) {
        		if(parpamtsList.get(i)==null || parpamtsList.get(i).size()<1) {
        			continue;
        		}
        		//設定下拉控制的範圍
        		CellRangeAddressList regions = new CellRangeAddressList(3, 999, i, i);
        		// 生成下拉框內容
        		String[] strings = new String[parpamtsList.get(i).size()];
        		parpamtsList.get(i).toArray(strings);
        		DVConstraint constraint = DVConstraint.createExplicitListConstraint(strings);
        		// 繫結下拉框和作用區域
        		HSSFDataValidation data_validation = new HSSFDataValidation(regions, constraint);
        		// 對sheet頁生效
        		sheet.addValidationData(data_validation);
        	}
        }
        
        return wb;
	    
	}
	
	 /**設計excel定義列數、列寬和標頭資訊*/
    private static HSSFSheet setSheetBaseInfoExcel(String excelName,int columWith,int rowHight,HSSFWorkbook wb){
        HSSFSheet sheet = wb.createSheet(excelName);
        sheet.setDefaultColumnWidth(columWith);
        sheet.setDefaultRowHeightInPoints(rowHight);
//        String columWiths[] =  columWithMsg.split(",");
//        for (int i=0;i<columWiths.length;i++){
//            sheet.setColumnWidth(i,Integer.valueOf(columWiths[i])*512);
//        }
        return sheet;
    }
    
    /*
     * 列表首頁的大title樣式
     */
    private static HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {

        // 設定字型
        HSSFFont font = workbook.createFont();
        //設定字型大小
        font.setFontHeightInPoints((short)16);
        //字型加粗
//        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);
        //設定背景顏色
//        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        style.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
        return style;
    }
    
    /*
     * 標題 列的樣式
     */
    private static HSSFCellStyle getStyle(HSSFWorkbook workbook) {
        // 設定字型
        HSSFFont font = workbook.createFont();
        //設定字型大小
        font.setFontHeightInPoints((short)12);
        //字型加粗
//        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);
        //設定背景顏色
//        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex());
        return style;
    }
}

相關推薦

Spring 使用POI匯出Excel生成選項

在開發中我們經常會用到生成excel,下面是spring專案前後端分離匯出excel工具類,介面中直接引用即可。首先引入poi-jar包: <dependency> <groupId>org.apache.poi</groupId&

Npoi匯出Excel設定選擇限制

/// <summary> /// 下載匯入資料地圖模板 /// </summary> /// <returns></returns> [HttpGet]

Java使用POI操作Excel建立

java建立 package poiexcel;   import java.io.FileOutputStream;   import java.util.Date;   import org

POI匯出帶級聯框的excel

效果: 所需jar包: poi-3.8-20120326.jar demo: import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOExceptio

Java根據模板匯出Excel生成多個Sheet

因為最近用報表匯出比較多,所有就提成了一個工具類,本工具類使用的場景為  根據提供的模板來匯出Excel報表 並且可根據提供的模板Sheet頁進行復制 從而實現多個Sheet頁的需求, 使用本工具類時,如果需求是每個Sheet頁中的資料都不一致,但是表格樣式和模板都一樣 那

整理POI解析資料和生成框模板的例子

import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.poi.hssf

實際專案中使用poi匯出excel(spring+springMVC+Mybatis環境)

1,需要匯出的原始資料.即根據實際需求查詢得到的結果集作為原始資料.可能是一個list,map...看你封裝成什麼樣了(這裡是封裝成list了) 2,將原始的資料轉換到excel中,具體根據資料形式不同,寫法也會不同.不過這些都是大同小異的. 3,將生產好的excel檔案寫到一個路徑下(這裡都是放到t

Excel的單元格設置選項填充顏色

bcd 同時 photos spf sel 菜單 完成 d3d -o 如何在Excel的單元格中加入下拉選項 方法/步驟 第一步:打開excel文檔,選中需加入下拉選項的單元格。 第二步:點擊菜單中的“數據”-&g

Spring Boot利用poi匯出Excel

public class ExcelData implements Serializable { private static final long serialVersionUID = 4444017239100620999L; // 表

使用exceljs匯出部門-職位聯動框的excel

import { Workbook } from 'exceljs'; /////////////////////////////// const wb = new Workbook(); const ws = wb.addWorksheet('tb'); const d

poi批量匯入匯出Excel(三、通過模板匯出Excel能實現匯入多個sheet表)

本專案基於SSM框架,簡單封裝了Excel批量匯入匯出功能,不用建資料庫表一鍵匯入匯出Excel,不過這樣只適用於對匯入的Excel表進行轉換,通過模板匯出Excel並且能實現匯入多個sheet表。上一篇介紹了建表匯入匯出Excel(點選跳轉)一、下載poi jar包:點這裡

使用poi 匯出Excel檔案 解決中文名亂碼

使用poi 匯出Excel檔案  並解決中文名亂碼 第一種方法: @Action("subAreaAction_exportXLs") public String exportXLs() throws IOException{ List<SubArea>l

使用EXCEL設置“菜單”選項功能

sphere data *** 選擇 bsp 分享 導入 體系 收獲 原創作品,出自 “深藍的blog” 博客,歡迎轉載。轉載時請務必註明出處,否則有權追究版權法律責任。 深藍的blog:http://blog.csdn.net/huangyanlong/article

菜鳥調錯——POI匯出Excel報錯No such file or directory

場景重現 Apache POI Linux Tomcat 如上所示,當時在linux+tomcat的環境下,使用apache的poi匯出excel的時候就會報“No such file or directory”的錯誤。 錯誤資訊 java.la

POI匯出excel表格優化

package com.ywj.excel; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java

HSSFWorkbook(poi)匯出excel表格

本文與另一篇文章關聯: csv格式匯出excel報表 其中: String accountDate 入參(日期) AccountInfoEntityResp accountInfoEntityResp 匯出的xml報文內容(轉換成obj物件) xml報文解析見另一篇:x

java使用poi匯出excel例子

java匯出某個頁籤: 第一步:先在jsp新建一個匯出介面按鈕: <a id="export" class="mini-button" iconCls="icon-download" onclick="exportexcel();" plain="true">匯出</a>

Javaweb專案,簡單應用Apache POI匯出Excel的簡單例子

直接上程式碼: jsp: 說明:這裡使用ajax請求是會有問題的,會導致瀏覽器視窗不會彈出下載提示和選擇位址列的彈窗 //匯出 $('#btn-export').click(function () { location.href = "${pageContext.r

laravel匯出excel設定單元格格式

$list = $this->recommend($request); $data = array(); foreach($list as $k=>$v){ $data[] = array_values($v); $len = count($v); } $header =

使用poi匯出excel檔案

一、獲取資料     private List<PmsrT2> getPmsrT2List(HttpServletRequest request) {         try {  &