天天看點

JFinal的Excel導出

JFinal的Excel導出

在自己的WEB項目中要用到導出Excel,是以結合網絡上的資源寫了一個自己的export 工具類。

說明:

JFinal 環境

WEB項目

JAVA背景生成非JS插件

好了,直接撸代碼

1.設定檔案儲存路徑

private static final String FILEPATH = PathKit.getWebRootPath() + File.separator + “upload” + File.separator ;//路徑為webRoot/upload/

2.設定 檔案名

public static String getTitle(){

Date date = new Date();

SimpleDateFormat dateFormat=new SimpleDateFormat(“yyyy-MM-dd”);

String title=FILEPATH+dateFormat.format(date)+"_統計報表.xls";

return title;

}

3.前台頁面調用

導出資料 4.contr oller處理并renderFile回去 public void export(){ String sql = "select * from `order`"; Map

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.List;

import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import com.jfinal.kit.PathKit;

import com.jfinal.plugin.activerecord.Db;

import com.jfinal.plugin.activerecord.Record;

public class ExcelExportUtil {

private static final String FILEPATH = PathKit.getWebRootPath() + File.separator + "upload" + File.separator ;

public static String getTitle(){
	Date date = new Date();
	SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");  
     String title=FILEPATH+dateFormat.format(date)+"_統計報表.xls";  
     return title;
}


public static File saveFile(Map<String, String> headData, String sql, File file) {
	// 建立工作薄
	HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
	// sheet:一張表的簡稱
	// row:表裡的行
	// 建立工作薄中的工作表
	HSSFSheet hssfSheet = hssfWorkbook.createSheet();
	// 建立行
	HSSFRow row = hssfSheet.createRow(0);
	// 建立單元格,設定表頭 建立列
	HSSFCell cell = null;
	// 初始化索引
	int rowIndex = 0;
	int cellIndex = 0;

	// 建立标題行
	row = hssfSheet.createRow(rowIndex);
	rowIndex++;
	// 周遊标題
	for (String h : headData.keySet()) {
		//建立列
		cell = row.createCell(cellIndex);
		//索引遞增
		cellIndex++;
		//逐列插入标題
		cell.setCellValue(headData.get(h));
	}

	// 得到所有記錄 行:列
	List<Record> list = Db.find(sql);
	Record record = null;

	if (list != null) {
		// 擷取所有的記錄 有多少條記錄就建立多少行
		for (int i = 0; i < list.size(); i++) {
			row = hssfSheet.createRow(rowIndex);
			// 得到所有的行 一個record就代表 一行
			record = list.get(i);
			//下一行索引
			rowIndex++;
			//重新整理新行索引
			cellIndex = 0;
			// 在有所有的記錄基礎之上,便利傳入進來的表頭,再建立N行
			for (String h : headData.keySet()) {
				cell = row.createCell(cellIndex);
				cellIndex++;
				//按照每條記錄比對資料
				cell.setCellValue(record.get(h) == null ? "" : record.get(h).toString());
			}
		}
	}
	try {
		FileOutputStream fileOutputStreane = new FileOutputStream(file);
		hssfWorkbook.write(fileOutputStreane);
		fileOutputStreane.flush();
		fileOutputStreane.close();
		
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}
	return file;
}
           

}

//轉自@TheLostman