Java使用POI匯出Excel工具類(反射)
阿新 • • 發佈:2019-01-07
pom.xml:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.6</version>
</dependency>
工具類:
import org.apache.poi.hssf.usermodel.*;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Excel匯出工具類
* @author 單繼重
* @since 2017/11/23 16:44
*/
public class ExcelUtil {
private static Map<String,String> exportFields = new HashMap<String, String>();
//初始化屬性Map
static {
exportFields.put("name","活動名稱");
exportFields.put("content" ,"活動內容");
exportFields.put("population","活動人數");
exportFields.put("provideMeal","提供餐飲");
exportFields.put("provideHotel","提供住宿");
exportFields.put("organization","主辦單位");
exportFields.put("tel","電話");
exportFields.put("qq","負責人qq");
exportFields.put("time" ,"活動時間");
exportFields.put("budget","活動經費");
exportFields.put("certificate","活動證書");
exportFields.put("status","活動狀態");
}
/**
* 獲取Excel實體
* @param sheetName sheet名字
* @param list 物件集合
* @return Excel實體
* @throws IllegalAccessException 安全許可權異常
*/
public static HSSFWorkbook getHSSFWorkbook(String sheetName, List list) throws IllegalAccessException {
//獲取物件所有屬性
Field[] fields = list.get(0).getClass().getDeclaredFields();
//表頭陣列
String[] title = new String[fields.length];
//設定表頭
for (int i = 0 ; i < fields.length ; i ++) {
//獲取屬性
Field field = fields[i];
//設定該屬性可訪問
field.setAccessible(true);
//在屬性Map中找到該屬性對應表頭
title[i] = exportFields.get(field.getName());
}
// 第一步,建立一個workbook,對應一個Excel檔案
HSSFWorkbook workbook = new HSSFWorkbook();
// 第二步,在workbook中新增一個sheet,對應Excel檔案中的sheet
HSSFSheet sheet = workbook.createSheet(sheetName);
// 第三步,在sheet中新增表頭第0行,注意老版本poi對Excel的行數列數有限制short
HSSFRow row = sheet.createRow(0);
// 第四步,建立單元格,並設定值表頭 設定表頭居中
HSSFCellStyle style = workbook.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 建立一個居中格式
HSSFCell cell = null;
//建立標題
for(int i=0;i < title.length;i++){
cell = row.createCell(i);
cell.setCellValue(title[i]);
cell.setCellStyle(style);
}
//建立內容
for(int i = 0 ; i < list.size() ; i ++) {
row = sheet.createRow(i + 1);
for(int j = 0 ; j < fields.length ; j ++) {
Field field = fields[j];
field.setAccessible(true);
String value = String.valueOf(field.get(list.get(0)));
row.createCell(j).setCellValue(value);
}
}
return workbook;
}
}
測試類:
import com.taiji.jilin.common.entity.Activity;
import com.taiji.jilin.common.util.ExcelUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.junit.Test;
import java.io.*;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
/**
* @author 單繼重
* @since 2017/11/23 13:58
*/
public class ExcelTest {
@Test
public void test () throws Exception {
String fileName = "test.xls";
String sheetName = "sheet1";
List<Activity> activities = new ArrayList<Activity>();
for (int i = 0 ; i < 10 ; i ++ ) {
Activity activity = new Activity();
activity.setName("名稱");
activity.setContent("內容");
activity.setCertificate("證書");
activity.setIsFinish(1);
activity.setBudget("預算");
activity.setId(123);
activity.setOrganization("組織");
activity.setPopulation(123456);
activity.setProvideHotel("是");
activity.setProvideMeal("餐飲");
activity.setQq("QQ");
activity.setTel("電話");
activity.setTime("時間");
activity.setStatus("啊啊啊");
activities.add(activity);
}
HSSFWorkbook hssfWorkbook = ExcelUtil.getHSSFWorkbook(sheetName,activities);
File file = new File("F:\\Shanjz" + fileName);
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(file);
hssfWorkbook.write(outputStream);
outputStream.flush();
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}