(ライブラリ)Jxlsとpoiを使用してExcelをダウンロード

12964 ワード


プロジェクトの設定を行うとき、excelダウンロード機能があるのを見て、急いで検索して、理解した内容を整理します.
spig mavenプロジェクト.
Maven Dependerを追加した場合.
<!-- XSSFWorkbook apache poi - Excel 2007 OOXML (.xlsx) 파일 포맷을 사용할 때 사용 -->
		<dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi-ooxml</artifactId>
		    <version>5.0.0</version>
		</dependency>
				
		
		<!-- HSSFWorkbook apache poi - Excel 97(-2007) 파일 포맷을 사용할 때 사용  -->
		<dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi</artifactId>
		    <version>5.0.0</version>
		</dependency>

		<!-- Excel Read/Write 를 위한 Dependency 추가 start-->
		<dependency>
			<groupId>org.jxls</groupId>
			<artifactId>jxls</artifactId>
			<version>2.10.0</version>
		</dependency>

		<dependency>
			<groupId>org.jxls</groupId>
			<artifactId>jxls-poi</artifactId>
			<version>2.10.0</version>
		</dependency>

		<dependency>
			<groupId>org.jxls</groupId>
			<artifactId>jxls-jexcel</artifactId>
			<version>1.0.8</version>
		</dependency>
次のように追加してください.この時!!注意jxlsのバージョンを入力します.聞き出すと1xバージョンとは違いますが、間もなくjxlsドキュメントの内容を利用し、正常な動作を利用しました.
検索できなければ、ドキュメントはやはり答えです...いつ英語を勉強しますか.
まずpoiを使ってテンプレートなしでExcelダウンロードを行いました.
アクセルダウンロードは単独でclassを生成することを実現し,サーブレットで操作を要求する.
	@Override
	protected void renderMergedOutputModel(Map<String, Object> map, HttpServletRequest request, HttpServletResponse response) throws IOException {
		List<Map<String, Object>> dataList = (List<Map<String, Object>>) map.get("dataList");
		String sheetName = (String) map.get("sheetName");
		String fileName = (String) map.get("fileName");

		Iterator<String> keys = dataList.get(0).keySet().iterator();

		Workbook wb = new XSSFWorkbook();
		Sheet sheet = wb.createSheet(sheetName);
		Row row = null;
		Cell cell = null;
		int rowNum = 0;
		int cellNum = 0;

		//Header (셀이름)
		row = sheet.createRow(rowNum++);
		while(keys.hasNext()) {
			cell = row.createCell(cellNum++);
			cell.setCellValue(keys.next());
		}

		//Body (셀 값  한줄 한줄 반복문 쓸것)
		for(Map<String, Object> data : dataList) {
			row = sheet.createRow(rowNum++);
			int i = 0;
			for(String datakey : data.keySet()) {
				cell = row.createCell(i++);
				cell.setCellValue(data.get(datakey).toString());
			}
		}

		// 컨텐츠 타입 지정
		response.setContentType("ms-vnd/excel");
		fileName = new String(fileName.getBytes("KSC5601"), "8859_1");
		response.setHeader("Content-Disposition", "attachment;filename="+fileName+".xlsx");

		wb.write(response.getOutputStream());
		wb.close();
	}
ダウンロードクラスにAbstractViewが継承され、ページ移動を行わずにダウンロードが可能になります.
必要なのは、ブックとsheetを生成し、値を入力することです.
ここで,コアは受信したMapにより,まずkeyによりヘッダ行を描画し,次に2行目から加算値の繰返し文を回転させる.
完了したら、応答でコンテンツの種類を指定し、文字列を変更してハングルの作成を許可し、workbookのwrite()からエクスポートすることで、Excelを正常にダウンロードできます.
参考までにBriteから戻る場合は、次のように指定できます.
return new ModelAndView(pv, data);
pvは@AutowideでインポートしたJxlsExcel DownViewです.もちろん、その前に、上記のクラスをcomponentとして登録する必要があります.
Excelテンプレートを使用する方法は次のとおりです.
Excelテンプレートの利点は、フォーマットできることです.したがって、日付タイプではミリ秒が返され、必要なフォーマットとして指定すると、フォーマットに応じて値が変化します.
@Component
public class JxlsExcelDownView extends AbstractView{

    @Override
    protected void renderMergedOutputModel(Map<String, Object> map, HttpServletRequest request, HttpServletResponse response) throws IOException {
        String template = (String) map.get("template");
        String newfileName = (String) map.get("newfileName");
        InputStream is = new ClassPathResource("/templates/" + template +".xlsx").getInputStream();
        String fileName = new String(newfileName.getBytes("KSC5601"), "8859_1");
        response.setContentType("ms-vnd/excel");
        response.setHeader("Content-Disposition", "attachment;filename="+fileName+".xlsx");
        Context context = new Context();
        context.putVar("data", map.get("data"));
        JxlsHelper.getInstance().processTemplate(is, response.getOutputStream(), context);
    }
}
jxlsを使用するのはテンプレートを使用しているため、実施時間が比較的短い.
地図に必要なすべての情報をContextにインポートし、jxlsHelperでデータを送信します.
jstl文のようなExcelテンプレートを作成できます.重要なのは、Excelコメントで必要なjxls反復文を実行できることです.

前述したように、lastCellで領域を作成して指定します.
詳細はjxlsのドキュメントで確認してください.
後で連結ユニットの場合は、jxlsドキュメント(さまざまなフォーマット方法など)を使用して理解する時間があります.
また、サーブレットで作成したコンテンツも共有します.ここでjxとpoは同じです
        @RequestMapping("/downbypoi")
        public ModelAndView excelDownload(HttpServletResponse response, HashMap<String,Object> params) throws Exception {

                List<HashMap<String, Object>> dataList = null;    // 데이터리스트를 넣으세요
                String sheetName = "테스트시트명";      // 엑셀 시트명을 입력해주세요
                String fileName = "test파일명123!@#_";  // 다운로드시 나타날 파일명을 입력해주세요

                Map<String, Object> data = new HashMap<>();
                data.put("dataList", dataList);
                data.put("sheetName", sheetName);
                data.put("fileName", fileName);

                return new ModelAndView(pv, data);
        }