PoI:apached 的報表匯出
阿新 • • 發佈:2018-11-30
Pomxml
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> </dependencies>
application.properties
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/cn?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
PoIExcelUtils
package com.hc.controller; import com.hc.model.User; 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 org.apache.poi.ss.util.CellRangeAddress; //import org.slf4j.Logger; //import org.slf4j.LoggerFactory; import java.io.*; //import java.lang.reflect.Method; //import java.text.SimpleDateFormat; //import java.util.Date; import java.util.ArrayList; import java.util.List; //import java.util.Map; //import java.util.UUID; public final class PoIExcelUtils { // private static Logger log = LoggerFactory.getLogger(Obj2ExcelUtils.class); // private static final String LOGPRE = "Obj2ExcelUtils:"; /*** * 構造方法 */ private PoIExcelUtils() { } /*** * 工作簿 */ private static HSSFWorkbook workbook; /*** * sheet */ private static HSSFSheet sheet; /*** * 標題行開始位置 */ private static final int TITLE_START_POSITION = 1; /*** * 時間行開始位置 */ // private static final int DATEHEAD_START_POSITION = 1; /*** * 表頭行開始位置 */ private static final int HEAD_START_POSITION = 0;//從0行開始 /*** * 文字行開始位置 */ private static final int CONTENT_START_POSITION = 1;//報表從第一行開始 // /** // * @param //dataList 物件集合 // * @param //titleMap 表頭資訊(物件屬性名稱->要顯示的標題值)[按順序新增] // * @param //sheetName sheet名稱和表頭值 // */ /** * @param dataList */ public static void excelExport(List<User> dataList) { // 初始化 List<String> titleMap = new ArrayList<>(); titleMap.add("編號"); titleMap.add("名稱"); titleMap.add("日期"); titleMap.add("說明"); String sheetName = "使用者資訊"; // 初始化workbook initHSSFWorkbook(sheetName); // 標題行 createTitleRow(titleMap, sheetName);//userSize 物件幾個屬性 // 時間行 // createDateHeadRow(titleMap); // 表頭行 createHeadRow(titleMap); // 文字行 createContentRow(dataList, titleMap.size()); //設定自動伸縮 // autoSizeColumn(titleMap.size()); // 寫入處理結果 try { //生成UUID檔名稱 // UUID uuid = UUID.randomUUID(); String fileDisplay = System.currentTimeMillis() + ".xls"; //如果web專案,1、設定下載框的彈出(設定response相關引數); // 2、通過httpServletResponse.getOutputStream()獲取 OutputStream out = new FileOutputStream("D:\\" + fileDisplay); workbook.write(out); out.close(); } catch (Exception e) { e.printStackTrace(); } } /** * web專案下載 * // * @param dataList 物件集合 // * @param titleMap 表頭資訊(物件屬性名稱->要顯示的標題值)[按順序新增] // * @param sheetName sheet名稱和表頭值 */ // public static InputStream excelExportWeb(List<?> dataList, Map<String, String> titleMap, // String sheetName) { // // 初始化workbook // initHSSFWorkbook(sheetName); // // 標題行 // createTitleRow(titleMap, sheetName); // // 時間行 //// createDateHeadRow(titleMap); // // 表頭行 // createHeadRow(titleMap); // // 文字行 // createContentRow(dataList, titleMap); // //設定自動伸縮 //// autoSizeColumn(titleMap.size()); // // 寫入處理結果 // ByteArrayOutputStream os = null; // try { // if (workbook == null) { //// log.error(LOGPRE + "HSSFWorkbook為空"); // return null; // } // // 將檔案存到流中 // os = new ByteArrayOutputStream(); // workbook.write(os); // byte[] fileContent = os.toByteArray(); // return new ByteArrayInputStream(fileContent); // } catch (Exception e) { // e.printStackTrace(); // } finally { // if (os != null) { // try { // os.close(); // } catch (IOException e) { //// log.error(LOGPRE + e.getMessage(), e); // } // } // if (workbook != null) { // try { //// workbook.close(); // } catch (Exception e) { //// log.error(LOGPRE + e.getMessage(), e); // } // } // // log.info("匯出結束時間:"+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"). // format(new Date(System.currentTimeMillis()))); // } // return null; // } /*** * // * @param sheetName * sheetName */ private static void initHSSFWorkbook(String sheetName) { workbook = new HSSFWorkbook(); sheet = workbook.createSheet(sheetName); } /** * 生成標題(第零行建立) * <p> * // * @param titleMap 物件屬性名稱->表頭顯示名稱 * // * @param sheetName sheet名稱 */ // firstCol---3 userSize-1 private static void createTitleRow(List<String> titleMap, String sheetName) {//5 物件屬性 CellRangeAddress titleRange = new CellRangeAddress(1, 1, titleMap.size() - 1, titleMap.size() - 1); sheet.addMergedRegion(titleRange); HSSFRow titleRow = sheet.createRow(TITLE_START_POSITION); HSSFCell titleCell = titleRow.createCell(0); titleCell.setCellValue(sheetName); } /** * 建立時間行(第一行建立) * // * @param titleMap 物件屬性名稱->表頭顯示名稱 */ // firstCol---3 /* private static void createDateHeadRow(Map<String, String> titleMap) { CellRangeAddress dateRange = new CellRangeAddress(1, 1, 1, titleMap.size() - 1); sheet.addMergedRegion(dateRange); HSSFRow dateRow = sheet.createRow(DATEHEAD_START_POSITION); HSSFCell dateCell = dateRow.createCell(0); dateCell.setCellValue(new SimpleDateFormat("yyyy年MM月dd日").format(new Date())); }*/ /** * 建立表頭行(第二行建立) * <p> * // * @param titleMap 物件屬性名稱->表頭顯示名稱 */ private static void createHeadRow(List<String> titleMap) { // 第2行建立 HSSFRow headRow = sheet.createRow(HEAD_START_POSITION); //不加標題和時間行,第0行建立 // HSSFRow headRow = sheet.createRow(0); int i = 0; for (String entry : titleMap) { HSSFCell headCell = headRow.createCell(i); headCell.setCellValue(entry); i++; } } /** * // * @param dataList 物件資料集合 * * @param //tit//leMap 表頭資訊 */ private static void createContentRow(List<User> dataList, int titleSize) { try { int i = 0; for (User obj : dataList) { HSSFRow textRow = sheet.createRow(CONTENT_START_POSITION + i); //自定義列段 for (int i1 = 0; i1 < titleSize; i1++) { HSSFCell textcell = textRow.createCell(i1); if (i1 == 0) { textcell.setCellValue(obj.getUserId()); } else if (i1 == 1) { textcell.setCellValue(obj.getUserName()); } else if (i1 == 2) { textcell.setCellValue(obj.getUserDay()); } else if (i1 == 3) { textcell.setCellValue(obj.getUserBase()); } } // 不加標題和時間行,第1行建立 // HSSFRow textRow = sheet.createRow(1 + i); // int j = 0; // for (String entry : titleMap.keySet()) { // String method = "get" + entry.substring(0, 1). // toUpperCase() + entry.substring(1); // Method m = obj.getClass().getMethod(method, null); // String value = m.invoke(obj, null).toString(); // HSSFCell textcell = textRow.createCell(j); // textcell.setCellValue(value); // j++; // } i++; } } catch (Exception e) { e.printStackTrace(); } } /** * 自動伸縮列(如非必要,請勿開啟此方法,耗記憶體) * // * @param size 列數 */ // private static void autoSizeColumn(Integer size) { // for (int j = 0; j < size; j++) { // sheet.autoSizeColumn(j); // } // } }
User
package com.hc.model;
public class User {
private int userId;
private String userName;
private String userDay;
private String userBase;
public User() {
}
public User(String userName, String userDay, String userBase) {
this.userName = userName;
this.userDay = userDay;
this.userBase = userBase;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserDay() {
return userDay;
}
public void setUserDay(String userDay) {
this.userDay = userDay;
}
public String getUserBase() {
return userBase;
}
public void setUserBase(String userBase) {
this.userBase = userBase;
}
}
UserMapper
package com.hc.mapper;
import com.hc.model.User;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public interface UserMapper {
@Select("select * from User")
List<User> allUser();
}
UserService
package com.hc.service;
import com.hc.model.User;
import java.util.List;
public interface UserService {
List<User> allUser();
}
UserServiceImpl
package com.hc.service.impl;
import com.hc.mapper.UserMapper;
import com.hc.model.User;
import com.hc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> allUser() {
return userMapper.allUser();
}
}
UserController
package com.hc.controller;
import com.hc.model.User;
import com.hc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("data")
@ResponseBody
public String PoIData() {
List<User> staffs = userService.allUser();
PoIExcelUtils.excelExport(staffs);
return "yes";
}
}
DatapoiApplication
package com.hc;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.hc.mapper")
public class DatapoiApplication {
public static void main(String[] args) {
SpringApplication.run(DatapoiApplication.class, args);
}
}
Pol資料匯出