使用阿里EasyExcel实现上传下载、导入导出Excel
生活随笔
收集整理的這篇文章主要介紹了
使用阿里EasyExcel实现上传下载、导入导出Excel
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先引入pom依賴:
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.3</version></dependency>1.下載
后端java代碼如下:
@WebServlet("/download") public class DownloadServlet extends HttpServlet {/*** */private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("application/octet-stream;charset=UTF-8");response.setHeader("Content-disposition", "attachment;filename=down.xlsx");EasyExcel.write(response.getOutputStream(), DownloadData.class).sheet("模板").doWrite(data());}private List<DownloadData> data() {List<DownloadData> list = new ArrayList<>();for (int i = 0; i < 7; i++) {DownloadData data = new DownloadData();data.setString("字符串" + i);data.setDate(new Date());data.setDoubleData(0.56+i);list.add(data);}return list;} }public class DownloadData {@ExcelProperty("字符串標題")private String string;@ExcelProperty("日期標題")private Date date;@ExcelProperty("數字標題")private Double doubleData;public String getString() {return string;}public void setString(String string) {this.string = string;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}public Double getDoubleData() {return doubleData;}public void setDoubleData(Double doubleData) {this.doubleData = doubleData;} }web端訪問即可獲得名為down.xlsx的Excel文件,文件內容如下:
?2.上傳
前端html代碼:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript">function func() {} </script> </head> <body><h1 onclick="func()">Hello tomcat1!</h1><form action="/webtest/upload" method="post" enctype="multipart/form-data">用戶名:<input type="text" name="username" /><br /> 上傳文件:<input type="file" name="uploadFile" /><br /> <input type="submit" value="上傳" /></form> </body> </html>后端java代碼:
@MultipartConfig @WebServlet("/upload") public class UploadServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Part uploadFile = request.getPart("uploadFile");InputStream inputStream = uploadFile.getInputStream();UploadDAO uploadDAO = new UploadDAO();EasyExcel.read(inputStream, DownloadData.class, new UploadDataListener(uploadDAO)).sheet().doRead();} }/*** 存儲上傳的數據的類***/ public class UploadDAO {public void save(List<DownloadData> list) {for(int i=0;i<list.size();i++){System.out.println("正在保存數據:"+list.get(i).getString());}} }/*** 模板的讀取類*/ public class UploadDataListener implements ReadListener<DownloadData> {/*** 每隔5條存儲數據庫,實際使用中可以100條,然后清理list ,方便內存回收*/private static final int BATCH_COUNT = 5;private List<DownloadData> cachedDataList = new ArrayList<>(BATCH_COUNT);private UploadDAO uploadDAO;/*** DataListener不能被spring管理,每次讀取excel都要new,同時使用這個構造方法把spring管理的類傳進來*/public UploadDataListener(UploadDAO uploadDAO) {this.uploadDAO = uploadDAO;}/*** 每一條數據解析都會來調用這個方法*/@Overridepublic void invoke(DownloadData data, AnalysisContext context) {cachedDataList.add(data);// 達到BATCH_COUNT了,需要去存儲一次數據庫,防止數據幾萬條數據在內存,容易OOMif (cachedDataList.size() >= BATCH_COUNT) {saveData();// 存儲完成清理 listcachedDataList.clear();}}/*** 所有數據解析完成了 都會來調用** @param context*/@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {// 這里也要保存數據,確保最后遺留的數據也存儲到數據庫saveData();}/*** 加上存儲數據庫*/private void saveData() {uploadDAO.save(cachedDataList);} }數據實體沿用下載類DownloadData.java,在前端頁面上傳之前下載的附件down.xlsx
點擊上傳后,后臺輸出如下:?
成功讀取到上傳的文件內容。?
3.下載文件樣式
一般情況下,需要對導出的Excel進行樣式微調:
import java.util.Date;import org.apache.poi.ss.usermodel.IndexedColors;import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentFontStyle; import com.alibaba.excel.annotation.write.style.HeadFontStyle; import com.alibaba.excel.annotation.write.style.HeadStyle; import com.alibaba.excel.enums.poi.FillPatternTypeEnum;//設置頭背景顏色 org.apache.poi.ss.usermodel.IndexedColors IndexedColors.CORNFLOWER_BLUE.getIndex() @HeadStyle(fillForegroundColor = 24) //頭字體設置成20 @HeadFontStyle(fontHeightInPoints = 20) //內容的背景設置成綠色 IndexedColors.GREEN.getIndex() //@ContentStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 17) //內容字體設置成12 @ContentFontStyle(fontHeightInPoints = 12) @ColumnWidth(25) public class DownloadData {@ExcelProperty("字符串標題")private String string;/*** 忽略這個字段*/@ExcelIgnore@ExcelProperty("日期標題")private Date date;/*** 寬度為50*/@ColumnWidth(50)@ExcelProperty("數字標題")private Double doubleData;public String getString() {return string;}public void setString(String string) {this.string = string;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}public Double getDoubleData() {return doubleData;}public void setDoubleData(Double doubleData) {this.doubleData = doubleData;} }其中ColumnWidth可以設置列寬,根據以上所示,可以調整標題的背景色、字體大小,內容行的背景色、字體大小等,調整后效果如下:
更多樣式調整,請參考easyexcel: easyexcel —— JAVA 解析 Excel 工具 Java 解析、生成 Excel 比較有名的框架有 Apache poi、jxl - Gitee.com
總結
以上是生活随笔為你收集整理的使用阿里EasyExcel实现上传下载、导入导出Excel的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VUE vue-devtools 安装成
- 下一篇: 利用phpstudy搭建thinkphp