java表格数据导出到Excel案例
生活随笔
收集整理的這篇文章主要介紹了
java表格数据导出到Excel案例
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
??????? 這兩天在實(shí)現(xiàn)一個(gè)將數(shù)據(jù)導(dǎo)出到Excel功能的時(shí)候,在網(wǎng)上搜索了很多案例,方式有多種,有一種使用POI的,用到繼承AbstractExcelView這個(gè)類來(lái)進(jìn)行實(shí)現(xiàn),但是隨著Spring版本的更新,這個(gè)逐漸被棄用。在網(wǎng)上查閱諸多案例之后,做了如下總結(jié):
??? 1. 構(gòu)建Java Web項(xiàng)目(Maven構(gòu)建)
??? 2. 導(dǎo)入支持jar:
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi Excel處理支持 --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.15-beta2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.17</version> </dependency>??? 3.主要類:
????模擬數(shù)據(jù)實(shí)體類(Student.java):
package com.ed.util;public class Student {private String id;private String name;private String sex;private String birth;public Student(){}public Student(String id, String name, String sex, String birth){this.id = id;this.name = name;this.sex = sex;this.birth = birth;}public String getId(){return id;}public void setId(String id){this.id = id;}public String getName(){return name;}public void setName(String name){this.name = name;}public String getSex(){return sex;}public void setSex(String sex){this.sex = sex;}public String getBirth(){return birth;}public void setBirth(String birth){this.birth = birth;}}??? 控制類(ExcelDemo.java):
package com.ed.util;import java.io.IOException; import java.io.OutputStream; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFFont; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class ExcelDemo extends HttpServlet{private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");OutputStream os = null;XSSFWorkbook xWorkbook = null;try {//定義表格導(dǎo)出時(shí)默認(rèn)文件名 時(shí)間戳String fileName = df.format(new Date()) + ".xlsx";os = response.getOutputStream();response.reset();//作用:在前端作用顯示為調(diào)用瀏覽器下載彈窗response.setHeader("Content-disposition", "attachment; filename = " + URLEncoder.encode(fileName, "UTF-8"));/*response.setHeader("Content-disposition", "attachment; filename = " + new String(fileName.getBytes(fileName), "ISO8859-1"));*/response.setContentType("application/octet-streem");//創(chuàng)建表格工作空間xWorkbook = new XSSFWorkbook();//創(chuàng)建一個(gè)新表格XSSFSheet xSheet = xWorkbook.createSheet("學(xué)生信息表");//set Sheet頁(yè)頭部setSheetHeader(xWorkbook, xSheet);//set Sheet頁(yè)內(nèi)容setSheetContent(xWorkbook, xSheet);xWorkbook.write(os);} catch (Exception e) {e.printStackTrace();} finally {if (null != os) {try {os.close();} catch (Exception e) {e.printStackTrace();}}if (null != xWorkbook) {try {xWorkbook.close();} catch (Exception e) {e.printStackTrace();}}}response.sendRedirect("index.jsp");}/*** 配置Excel表格的頂部信息,如:學(xué)號(hào) 姓名 年齡 出生年月* @param xWorkbook* @param xSheet*/private void setSheetContent(XSSFWorkbook xWorkbook, XSSFSheet xSheet) {//設(shè)置表格的寬度 xSheet.setColumnWidth(0, 20 * 256); 中的數(shù)字 20 自行設(shè)置為自己適用的xSheet.setColumnWidth(0, 20 * 256);xSheet.setColumnWidth(1, 15 * 256);xSheet.setColumnWidth(2, 15 * 256);xSheet.setColumnWidth(3, 20 * 256);//創(chuàng)建表格的樣式CellStyle cs = xWorkbook.createCellStyle();//設(shè)置水平、垂直居中cs.setAlignment(CellStyle.ALIGN_CENTER);cs.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//設(shè)置字體Font headerFont = xWorkbook.createFont();headerFont.setFontHeightInPoints((short) 12);/*headerFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);*/headerFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);headerFont.setFontName("宋體");cs.setFont(headerFont);cs.setWrapText(true);//是否自動(dòng)換行//創(chuàng)建一行XSSFRow xRow0 = xSheet.createRow(0);//設(shè)置每一列XSSFCell xCell0 = xRow0.createCell(0);xCell0.setCellStyle(cs);xCell0.setCellValue("學(xué)號(hào)");XSSFCell xCell1 = xRow0.createCell(1);xCell1.setCellStyle(cs);xCell1.setCellValue("姓名");XSSFCell xCell2 = xRow0.createCell(2);xCell2.setCellStyle(cs);xCell2.setCellValue("性別"); XSSFCell xCell3 = xRow0.createCell(3);xCell3.setCellStyle(cs);xCell3.setCellValue("出生年月"); }/*** 配置(賦值)表格內(nèi)容部分* @param xWorkbook* @param xSheet* @throws Exception */private void setSheetHeader(XSSFWorkbook xWorkbook, XSSFSheet xSheet) throws Exception {//由于太過(guò)匆忙,前端頁(yè)面顯示的數(shù)據(jù)都是靜態(tài)數(shù)據(jù),此處定義了一個(gè)List傳入了靜態(tài)寫(xiě)死的數(shù)據(jù)來(lái)模擬List<Student> listStu = getStudent();//創(chuàng)建內(nèi)容樣式(頭部以下的樣式)CellStyle cs = xWorkbook.createCellStyle();cs.setWrapText(true);//設(shè)置水平垂直居中cs.setAlignment(CellStyle.ALIGN_CENTER);cs.setVerticalAlignment(CellStyle.VERTICAL_CENTER);if (null != listStu && listStu.size() > 0) {for (int i = 0; i < listStu.size(); i++) {XSSFRow xRow = xSheet.createRow(i + 1);//設(shè)置第一列學(xué)號(hào)的值XSSFCell xCell0 = xRow.createCell(0);xCell0.setCellStyle(cs);xCell0.setCellValue(listStu.get(i).getId()); //設(shè)置第二列姓名的值XSSFCell xCell1 = xRow.createCell(1);xCell1.setCellStyle(cs);xCell1.setCellValue(listStu.get(i).getName()); //設(shè)置第三列性別的值XSSFCell xCell2 = xRow.createCell(2);xCell2.setCellStyle(cs);xCell2.setCellValue(listStu.get(i).getSex()); //設(shè)置第四列性別的值XSSFCell xCell3 = xRow.createCell(3);xCell3.setCellStyle(cs);xCell3.setCellValue(listStu.get(i).getBirth()); }}}/*** @功能:提供模擬數(shù)據(jù)導(dǎo)入到Excel表格*/private static List<Student> getStudent() throws Exception{List<Student> list = new ArrayList<Student>();Student user1 = new Student("1001", "張三", "男", "1997-03-12");Student user2 = new Student("1002", "李四", "女", "1996-08-12");Student user3 = new Student("1003", "王五", "女", "1985-11-12");list.add(user1);list.add(user2);list.add(user3);return list;} }??? 4. jsp頁(yè)面
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <style> table{border:1px solid #000; } table td{border:1px solid #000; } </style> </head> <body><h3>學(xué)生信息表</h3><table><thead><tr><td>學(xué) 號(hào)</td><td>姓 名</td><td>性 別</td><td>出生年月</td></tr></thead><tbody><tr><td>1001</td><td>張三</td><td>男</td><td>1997-03-12</td></tr><tr><td>1002</td><td>李四</td><td>女</td><td>1996-08-12</td></tr><tr><td>1003</td><td>王五</td><td>女</td><td>1985-11-12</td></tr></tbody></table> <br> <!-- 此處重要,需為Http請(qǐng)求 --> <a style="color:red;" href="http://localhost:8080/ExcelDemo/excelStudent">導(dǎo)出到Excel</a> <br> <br> <br> <p style="color:red;">(由于太過(guò)匆忙,前端頁(yè)面顯示的數(shù)據(jù)都是靜態(tài)數(shù)據(jù),后臺(tái)定義了一個(gè)List傳入了靜態(tài)寫(xiě)死的數(shù)據(jù)來(lái)模擬)</p> </body> </html>??? 5. web.xml配置
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><servlet><servlet-name>ExcelDemo</servlet-name><servlet-class>com.ed.util.ExcelDemo</servlet-class></servlet><servlet-mapping><servlet-name>ExcelDemo</servlet-name><url-pattern>/excelStudent</url-pattern></servlet-mapping> </web-app>??? 注:此案例在前端展示的數(shù)據(jù)為靜態(tài)模擬數(shù)據(jù),導(dǎo)入Excel中的數(shù)據(jù)由控制類ExcelDemo.java的getStudent()方法中定義。
僅供大家參考,不足之處望大家多多指點(diǎn)。(轉(zhuǎn)載請(qǐng)注明出處)
總結(jié)
以上是生活随笔為你收集整理的java表格数据导出到Excel案例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: tomcat 拦截指定url_一口气说出
- 下一篇: Win11再被吐槽,文件管理器居然都有广