ポイ(A)を使用して、エクスポートするデータのspringboot

アイデア+安らかなスタイルを使用します

まず:依存関係の導入:

        <! - POI - > 
        <依存> 
            <groupIdを> org.apache.xmlbeans </ groupIdを> 
            <たartifactId> XMLBeansの</たartifactId> 
            <バージョン> 2.6.0 </バージョン> 
        </依存関係> 
        <依存> 
            <groupIdを> DOM4J </のgroupId> 
            <たartifactId> DOM4J </たartifactId> 
            <バージョン> 1.6.1 </バージョン> 
        </依存> 
        <依存性> 
            <のgroupId> org.apache.poi </のgroupId> 
            <たartifactId> POI </たartifactId > 
            <バージョン> 3.9 </ version>の
        </依存関係>
        <依存> 
            <groupIdを> org.apache.poi </ groupIdを>
            <たartifactId> POI-OOXML </たartifactId> 
            <バージョン> 3.9 </ version>の
        </依存関係> 
        <! - POI - >

ステップ2:

ファイルアップロードツール

輸入java.io.BufferedInputStreamの。
輸入java.io.BufferedOutputStream。
輸入java.io.ByteArrayInputStream。
輸入java.io.ByteArrayOutputStreamを。
インポートにjava.io.IOException; 
輸入java.io.InputStreamを。
輸入java.lang.reflect.Methodオブジェクト。
輸入はjava.util.ArrayList; 
輸入java.util.HashMapを; 
輸入はjava.util.List; 
輸入java.util.Map; 
 
インポートのjavax.servlet.ServletOutputStream。
インポートのjavax.servlet.http.HttpServletResponse; 
 
輸入org.apache.poi.hssf.usermodel.HSSFWorkbook; 
輸入org.apache.poi.ss.usermodel.Cell; 
輸入org.apache.poi.ss.usermodel.CellStyle。
輸入org.apache.poi.ss.usermodel.Font;
輸入org.apache.poi.ss.usermodel.IndexedColors。
org.apache.poi.ss.usermodel.Rowインポート、
インポートorg.apache.poi.ss.usermodel.Sheet; 
インポートorg.apache.poi.ss.usermodel.Workbook; 
 
/ ** 
 * @author Qingmu 
 * @versionを作成時間:2017年12月28日午前4時53分29秒PM 
 *クラス説明:POI輸出ツールクラス
 * / 
パブリッククラスExportPOIUtils { 
 
	//パラメーター:ファイル名:ファイル名のプロジェクト:オブジェクトのCOLUMNNAMESのコレクション:列名キー:マップキー
	パブリック静的ボイドstart_download(HttpServletResponseの応答、文字列のファイル名、リスト<?>プロジェクトは、
			String []型COLUMNNAMES、文字列[]キー)のIOException {スロー
		
		//属性のコレクション・リスト内のオブジェクトに対応する<地図<文字列、オブジェクト>>を
		一覧<地図<文字列、オブジェクトリスト>> = createExcelRecord(プロジェクト、キー); 
 
		ByteArrayOutputStream ByteArrayOutputStream新しい新OS =();
		{試します 
			//ワークブックオブジェクトによって変換され、ダウンロードストリーミング
			; createWorkBook(一覧、キー、COLUMNNAMES).WRITE(OS)
		}キャッチ(IOExceptionをEを){ 
			e.printStackTrace(); 
		} 
		バイト[ ] os.toByteArrayコンテンツ=(); 
		のInputStream AれるByteArrayInputStreamは=(コンテンツ)新しいIS新しい; 
		//設定ダウンロードページ開くことができます応答パラメータ
		response.reset(); 
		response.setContentType(「ファイルアプリケーション/ vnd.ms-Excelを;のcharset = UTF -8 "); 
		response.setHeader("コンテンツ・処分""添付ファイル;ファイル名= "+新新しいString((fileNameに+" * .XLS ")GetBytesメソッド(),." ISO-8859-1「)); 
		ServletOutputStreamをOUT response.getOutputStream =(); 
		BufferedInputStreamをBIS = NULL;
		BufferedOutputStreamがBOS = NULL;
		試す{ 
			ビス=新しいBufferedInputStreamを(です); 
			BOS =新しいBufferedOutputStreamが(アウト);  
			バイト[] = BUFF新しい新しいバイト[2048]; 
			int型bytesRead。
			一方(-1 =(bytesRead = bis.read(バフ、0、buff.length))!){ 
				bos.write(バフ、0、bytesRead)。
			} 
		}キャッチ(最終のIOException電子){ 
			Eを投げます。
		}最後に、{ 
			(!ビス= NULL)場合
				)(bis.close。
			(BOS = nullを!)もし
				bos.close(); 
		} 
	} 
	
	プライベート静的リスト<地図<文字列オブジェクト>> createExcelRecord(一覧<?>プロジェクト、文字列[]キー){ 
		リスト<地図<文字列オブジェクト>> listmap =新規のArrayList <地図<文字列オブジェクト>>() ; 
		地図<文字列、オブジェクト>マップ=新しいHashMapの<文字列、オブジェクト>(); 
		map.put( "SHEETNAME"、 "シート")。
		listmap.add(マップ)
		オブジェクトプロジェクト= NULL; 
		以下のための(int型J = 0; J <projects.size(); J ++){
			プロジェクト= projects.get(J)。
			地図<文字列、オブジェクト> mapValue =新しいHashMapの<文字列、オブジェクト>(); 
			以下のために(INT i = 0; I <keys.length; I ++){ 
				mapValue.put(キー[I]、getFieldValueByName(キー[I]、プロジェクト))。
			} 
 
			listmap.add(mapValue)。
		} 
		戻りlistmap。
	} 
	/ ** 
	 *利用反射根据属性名获取属性值
	 * /   
	プライベート静的オブジェクトgetFieldValueByName(文字列フィールド名、オブジェクトo){   
		{試みる     
			文字列firstLetter = fieldName.substring(0、1).toUpperCase();    
			文字列のゲッター= "GET" + firstLetter + fieldName.substring(1);    
			方法メソッド= o.getClass()getMethod(ゲッター、新しいクラス[] {})。    
			オブジェクト値= method.invoke(O、新しいオブジェクト[] {})。    
			値を返します。    
		キャッチ}(例外E){     
			e.printStackTrace();   
			戻り値はnull;     
		}     
	} 
    / ** 
     *エクセル文書オブジェクト作成
     マップのキー配列に設定* @paramキーのリストを
     * @paramのCOLUMNNAMESはの列名秀でる
     * * / 
	プライベート静的createWorkBookブック(一覧<地図<文字列オブジェクト>>リスト、文字列[]キー、COLUMNNAMESのString []){ 
        // Excelワークブックの作成
        ワークブックWB =新しい新しいHSSFWorkbookを(); 
        //最初のシート(ページ)を作成し、そして、指定
        シートシート= wb.createSheet(List.get(0)に.get( "SHEETNAME")のtoString()); 
        //最初の行を作成します 
        //手動で列幅を設定します。列の最初のパラメータセットに、2番目の列は、幅パラメータを示し、nは高いことがピクセルの列の数です。
        以下のために(INT I = 0; I <keys.length; I ++){ 
            sheet.setColumnWidth((ショート)I、(ショート)(35.7 * 150)); 
        } 
 
        行の行= sheet.createRow((ショート)、0); 
 
        / /書式二つの細胞の作成
        、CellStyle wb.createCellStyle CS =()を
        CellStyle wb.createCellStyle CS2 =を(); 
 
        // 2つのフォントを作成する
        フォントwb.createFont F =(); 
        フォントwb.createFont F2 =(); 
 
        / /最初のフォントスタイル(カラム名)を作成
        f.setFontHeightInPoints((ショート)10); 
        f.setColor(IndexedColors.BLACK.getIndex()); 
        f.setBoldweight(Font.BOLDWEIGHT_BOLD); 
 
        //第二の作成フォントスタイル(値用)
        f2.setFontHeightInPoints((ショート)10)。
        f2.setColor(IndexedColors.BLACK.getIndex()); 
 
        //(カラム名用)最初のセルのスタイルを設定 
        するための(INT i = 0; iは columnNames.lengthを<。 I ++){ 
        cs.setFont(F); 
        cs.setBorderLeft(CellStyle.BORDER_THIN)。
        cs.setBorderRight(CellStyle.BORDER_THIN); 
        cs.setBorderTop(CellStyle.BORDER_THIN); 
        cs.setBorderBottom(CellStyle.BORDER_THIN); 
        cs.setAlignment(CellStyle.ALIGN_CENTER); 
 
        //設定された第2のセルパターン(値)
        cs2.setFont(F2); 
        cs2.setBorderLeft(CellStyle.BORDER_THIN); 
        cs2.setBorderRight(CellStyle.BORDER_THIN); 
        cs2.setBorderTop(CellStyle.BORDER_THIN); 
        cs2.setBorderBottom(CellStyle.BORDER_THIN); 
        cs2.setAlignment(CellStyle。 ALIGN_CENTER); 
        //列の名前を設定する 
            cell.setCellValue(COLUMNNAMES [I]); 
            cell.setCellStyle(CS)。
            = Row.createCellセルCELL(I);
        } 
        行ごと//設定値
        のため(=ショートI 1、。私は()はlist.sizeを<; Iは++){ 
            //行の行、セル格子、行セルとは、0からカウントさ
            作成//ページ・シート上の線
            列sheet.createRow ROW1 =((ショート)I); 
            //行ライン上にグリッドを作成
            するための(ショートJ = 0; J <keys.length; J ++){ 
                セルCELL = ROW1。 createCell(J); 
                cell.setCellValue(list.get(I)に.get(キー[J])== NULL "":list.get(I)に.get(キー[J])のtoString()+。)。
                cell.setCellStyle(CS2); 
            } 
        } 
        WBを返します; 
    } 
 
}

 第三段階:コントローラ層を書きます

輸入com.example.uploaddemo.util.ExportPOIUtils。
輸入org.springframework.web.bind.annotation.RequestMapping。

インポートのjavax.servlet.http.HttpServletResponse;
インポートにjava.io.IOException;
輸入はjava.util.ArrayList;
輸入はjava.util.List; 

/ ** 
 * @author qingmu 
 * @date 
 * / 
パブリック クラスUserControllerで{ 
    @RequestMapping( "exportList" 公共 ボイドexportList(HttpServletResponseの応答、ストリングID){ 

        文字列fileNameに = "人员档案列表" 

        リスト試す{ 
            ExportPOIUtils.start_download(応答、ファイル名、ユーザ、COLUMNNAMES、キー)
        } キャッチ(IOExceptionを電子){ 
            e.printStackTrace(); 
        }

        
    } 
}

ここで一つ少なく、ユーザエンティティクラスだ、あなたは大丈夫、エクスポートするエンティティ・クラスに直接置き換えることができます。

クリーンコード、および効率的なコード。

 

おすすめ

転載: www.cnblogs.com/qingmuchuanqi48/p/11531187.html