導出excel通用模板(程序定義模板導出)
轉載原文:https://www.jianshu.com/p/5c7b359a159c
如下代碼,本方法主要用於程序定義模板格式,並導出文件。該方法將定義和創建分離,達到了一定解耦合,降低了開發復雜度。但是依然是程序定義模板,對模板的樣式需要程序控制,沒有達到將數據和樣式分離的目的。
改良版,關於添加依賴之類的之前一篇文章里面有。
這篇是把之前的方法抽成通用模板。
一、添加一個實體類
package com.lencity.securitymanagementplatform.data.entity; import java.util.List; public class XlsData { public static final int DATA_TYPE_INTEGER = 0; public static final int DATA_TYPE_STRING = 1; private List<String> titles;//表頭 private List<Integer> types;//數據類型 private List<List<Object>> values;存表數據 public List<Integer> getTypes() { return types; } public void setTypes(List<Integer> types) { this.types = types; } public List<String> getTitles() { return titles; } public void setTitles(List<String> titles) { this.titles = titles; } public List<List<Object>> getValues() { return values; } public void setValues(List<List<Object>> values) { this.values = values; } }
二、創建一個service類
package com.lencity.securitymanagementplatform.service; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFDataFormat; 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.ss.usermodel.HorizontalAlignment; import org.springframework.stereotype.Service; import com.lencity.securitymanagementplatform.data.entity.XlsData; @Service public class XlsService { //寫一個接口,哪個控制器需要加上導出excel功能就繼承這個接口 public static interface IXlsOutputProcessor { public XlsData processXlsData(Map<String, Object> condition); } //解析數據創建excel public HSSFWorkbook createExcelData(IXlsOutputProcessor processor, Map<String, Object> condition) { XlsData xlsData = processor.processXlsData(condition); HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("統計表");// 創建一個excel表單 HSSFRow titleRow = sheet.createRow(0); // 設置列寬,setColumnWidth的第二個參數要乘以256,這個參數的單位是1/256個字符寬度 sheet.setColumnWidth(1, 15 * 256); sheet.setColumnWidth(3, 20 * 256