程式設計師:java導出Excel,附帶依賴、後端代碼和前端JS

2020-12-13 程序猿的內心獨白

第一步:加入需要的依賴

<!-- Apache POI庫用於導出Excel -->

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi</artifactId>

<version>${poi.version}</version>

</dependency>

<!-- 解析Excel文件的jar包 用於2007+ 版本的excel -->

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi-ooxml</artifactId>

<version>${poi.version}</version>

</dependency>

第二步:工具類

import org.apache.poi.xssf.usermodel.*;

import org.springframework.core.io.ClassPathResource;

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;

import java.io.*;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

* 功能說明:文件工具類

* @author xuwen

* @date 2019/04/22

*/

public class FileUtils {

/**

* 導出文件

* @param response 請求響應

* @param sheetName Sheet名稱

* @param headers 表頭

* @param stringList 表數據

*/

public static void downloadExcelFile(HttpServletResponse response, String sheetName, String[] headers,

List<String[]> stringList) {

FileUtils.exportExcelFile(response, FileUtils.createExcelFile(sheetName, headers, stringList));

}

/**

* 創建excel文件

* @param sheetName Sheet名稱

* @param headers 表頭

* @param stringList 表數據

* @author xuwen

*/

private static XSSFWorkbook createExcelFile(String sheetName, String[] headers, List<String[]> stringList) {

// 創建excel文件

XSSFWorkbook workbook = new XSSFWorkbook();

// 設置excel文件格式

XSSFCellStyle cellStyle = workbook.createCellStyle();

// 設置sheet名稱

XSSFSheet sheet = workbook.createSheet(sheetName);

// 初始化行號

int rowNum = 0;

// 創建表頭行

XSSFRow row = sheet.createRow(rowNum);

// 填充表頭

for (int m = 0; m < headers.length; m++) {

XSSFCell cell = row.createCell(m);

cell.setCellValue(headers[m]);

}

// 填充表格數據

for (int n = 0; n < stringList.size(); n++) {

XSSFRow dataRow = sheet.createRow(++rowNum);

String[] data = stringList.get(n);

for (int j = 0; j < data.length; j++) {

dataRow.createCell(j).setCellValue(data[j]);

}

}

return workbook;

}

/**

* 下載模板

* @param response 請求響應

* @param file 文件

* @author xuwen

*/

public static void downloadTemplate(HttpServletResponse response, String file) {

try {

ClassPathResource classPathResource = new ClassPathResource(file);

InputStream inputStream = classPathResource.getInputStream();

XSSFWorkbook workbook = new XSSFWorkbook(inputStream);

FileUtils.exportExcelFile(response, workbook);

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 在響應中返回文件流

* @param response 請求響應

* @param workbook excel文件

* @author xuwen

*/

public static void exportExcelFile(HttpServletResponse response, XSSFWorkbook workbook) {

response.setContentType("application/octet-stream;charset=UTF-8");

String excelFileName = "export.xlsx";

try {

response.addHeader("Content-Disposition", "attachment;filename="

+ new String(excelFileName.getBytes("GB2312"), "iso8859-1"));

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

try {

OutputStream outputStream = response.getOutputStream();

workbook.write(outputStream);

outputStream.flush();

outputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

第三步:前端部分

自定義一個點擊事件 在 Ajax/Axios/Fetch 的 成功回調函數 裡觸發此方法即可。(這一步使用vue和jquery都一樣,因為使用的是原生js)

/**

* 下載文件

* @author xuwen

*/

export function download(data, fileName) {

let blob = new Blob([data]); //創建一個blob對象

let a = document.createElement('a'); //創建一個<a></a>標籤

a.href = URL.createObjectURL(blob); // response is a blob

a.download = fileName; //文件名稱

a.style.display = 'none';

document.body.appendChild(a);

a.click();

a.remove();

}

第四步:自定義業務邏輯

這裡為了做簡單示例,dao查詢直接用Map接收數據。

public void exportExcel(HttpServletResponse response, String id) {

// sheet名稱

String sheetName = "庫存信息";

// 表頭

String[] headers = {"序號", "編號", "名稱", "下單時間"};

//查詢需要導出報表的信息

List<Map<String, Object>> list = mapper.findById(id);

List<String[]> strList = new ArrayList<>();

int index = 0;

for (Map<String,Object> map : list) {

index ++;

//String.valueOf() 和 .toString() 懶得判空,直接使用 +「」 變字符串

String[] strings = {String.valueOf(index), map.get("code") + "", map.get("name") + "", map.get("createDate") + ""};

strList.add(strings);

}

// 導出文件, 這裡調用上面第二步給的工具類即可

FileUtils.downloadExcelFile(response, sheetName, headers, strList);

相關焦點

  • 前端開發,測試,後端,該如何選擇?
    首先,我是一名從業8年的前端工程師,後端也略會一二,期間也兼職過公司的測試崗位,談談我的一點想法,僅供參考。1、所謂前端首先要搞明白,你是否對前端開發、編程敲代碼感興趣,而不是說看中了IT行業的高薪,覺得別人去培訓機構培訓半年,出來在西安月薪8K等。如果你對編程不感興趣,那麼你在培訓機構或者是工作上班後,每天都是折磨,都是煎熬。
  • 如何使用JavaScript實現前端導入和導出excel文件
    使用JavaScript實現前端導入excel文件並自動生成可編輯的Table組件在開始實現之前, 我們先來看看實現效果.使用JavaScript實現前端基於Table數據一鍵導出excel文件同樣的, 我們實現將table數據一鍵導出為excel也是類似, 不過方案有所不同, 我們先來看看在Dooring中的實現效果.
  • 優雅 | 今天很水的文章-Excel導入導出
    前端部分這裡闡述前端部分導入,導出,生成Excel表格這裡使用的是一個js-xlsx插件,所以這裡進行嘗試。安裝依賴yarn add xlsx項目中引入import * as XLSX from 'xlsx'導出基本實現定義導出的基本方法export default function download
  • Web前端和後端有什麼區別(下)
    Jquery是封裝js的js插件。其目的是操作更方便,寫代碼更少。開始使用jquery也非常簡單。那些和js一樣,只是換成了jq代碼。其他的百度就夠了。 5、最好的後臺語言是 java, php,為什麼?
  • 2017年Node.js使用大調查,後端使用多於前端!
    【IT168評論】之前,就有網友針對「Node.js用在前端還是後端?」的問題進行討論。近日,Node.js基金會發布了Node.js 2017用戶調查,我們用數據說話,看看Node.js到底適用於哪些應用和開發環境?同時也看看全世界的程式設計師都是怎樣用Node.js。
  • 初學編程,前端、後端開發哪個更有優勢?
    編程不僅僅就是寫代碼做程序就完了,要去看今年最好的軟體開發技術是哪個,最優秀的程式語言是哪一種,它們又是被應用在哪些領域裡?當你有這些疑問的時候,可以來看這篇文章,這篇文章詳細介紹了前端和後端開發技術的對比,從使用程式語言的不同,到對開發技能的要求,甚至未來的發展規劃都有詳細的介紹。什麼是前端開發?
  • Java通用代碼生成器光發布1.5.0 嘗鮮版 2,支持 PDF 導出功能
    默認支持Excel和PDF導出功能。,和平之翼和光三代動詞算子式代碼生成器組成的動詞算子式代碼生成器陣列,在我的碼雲站點https://gitee.com/jerryshensjf/大家可以找到這些代碼生成器。
  • 後端:Hutool Java 工具類庫導出 Excel,超級簡單!
    在開發應用系統的時候,導出文件是必不可放的功能。以前用過POI、easyexcel等工具的導入導出功能,但總感覺太麻煩了,代碼特別多,感覺並不是很好用。今天給大家介紹一款新工具,java工具類庫Hutool。
  • 基於的ASP.NET Core+Vue.js開源的前後端分離內容管理系統CMS
    今天我將給大家介紹另外一個基於.NET Core + Vue.js開源的前後端分離的CMS框架LinCms,之所以要介紹這款CMS,主要是因為它的界面做工精美,並且使用了很多良好的設計理念,項目還集成了Swagger的增強版Knife4jUI,非常值得學習研究。什麼是 Lincms?
  • Java程式設計師常用的軟體
    java程式設計師常用的軟體一、常用的開發工具(1)EclipseEclipse 是一個開放原始碼的、基於Java的可擴展開發平臺。就其本身而言,它只是一個框架和一組服務,用於通過插件組件構建開發環境。幸運的是,Eclipse 附帶了一個標準的插件集,包括Java開發工具(Java Development Kit,JDK)。
  • web前端和後端的區別 web前端開發薪資
    web前端和後端的區別 Web前端: 顧名思義是來做Web的前端的。我們這裡所說的前端泛指Web前端,也就是在Web應用中用戶可以看得見碰得著的東西。包括Web頁面的結構、Web的外觀視覺表現以及Web層面的交互實現。
  • zuihou-admin-cloud 1.9.1 發布,代碼生成器支持前後端和建項目
    今日更新日誌:新增1. zuihou-ui 增加公共導出excel組件
  • Java 通用代碼生成器光 2.0.0 Insight(內省) 發布嘗鮮版 4,代碼...
    功能亮點截圖Excel和資料庫的新玩法其實,還可以這樣用代碼生成器,把Excel裡的數據整成代碼生成器的模板格式,填好數據,生成項目,操作數據完成工作,再利用代碼生成物的Excel導出功能得到加工好的數據,非常方便,使您用用了在Excel和資料庫之間自由遷徙的能力。
  • 女生適合學編程嗎,前端的女生多,還是後端的女生多?工資高嗎
    一、首先我們一起看下男女程式設計師的比例。以2018年的程式設計師調查來看,男女比例93:7。中國程式設計師佔全球程式設計師總和的10%。即便如此,我國市場對程式設計師的需求仍然非常旺盛。二、我們來看下各省程式設計師人地理分布圖上我們能看到一半以上的程式設計師來自於北京(23.55%)、廣東(16.53%)、浙江(12.81%)和上海(12.40%)。北上廣深,仍然是我國程式設計師最密集的地方。另外杭州更是發展迅速,目前也正在重金打造成中國新矽谷。
  • Springmvc框架對json的支持 Java程式設計師必看
    在web.xml中我們添加幾條通過名為default的servlet處理的url-pattern,分別對應js和css文件。但是在寫json的時候還是出現了許多問題,用eclipse寫js代碼經常除了bug卻不知道問題出來哪裡。我們可以使用alert()或console.info()函數來進行判斷問題出在哪一行上。解決了發送json的問題後,又遇到一個bug,發送的json字符串返回的確實一個http415錯誤代碼,大概是說後端接收的參數類型不正確的意思,下面請看java代碼。
  • 我開始討厭node.js了
    擁抱JavaScript2014年,我從一個半吊子c#程式設計師轉速前端,突然就愛上了JavaScript,感覺好像一顆被c#束縛已久的心終於解放了,js那种放蕩不羈愛自由的操作領悟神魂顛倒,我感覺自己擺脫了那些過度封裝的程序,所有的代碼都盡在掌握之中,那種感覺說不出的爽。
  • Java 開源低代碼開發平臺「光」發布 2.1 Faith 信念第二個嘗鮮版...
    功能亮點截圖Excel和資料庫的新玩法其實,還可以這樣用代碼生成器,把Excel裡的數據整成代碼生成器的模板格式,填好數據,生成項目,操作數據完成工作,再利用代碼生成物的Excel導出功能得到加工好的數據,非常方便,使您擁有了在Excel和資料庫之間自由遷徙的能力。
  • Java 通用代碼生成器光 2.0.0 Insight(內省) 發布 Beta2 版,代碼...
    內省(Insight)的Beta2版的動詞否定功能有了動詞否定功能,您可以否定掉不需要的功能,但是注意,動詞間有依賴關係,比如,您否定了Clone功能,卻沒有否定CloneAll功能,這時,代碼生成器會報錯,原因是CloneAll依賴Clone動詞完成每一個Clone動作,否定CloneAll而不否定Clone是可以的,反之則有編譯錯誤。
  • 一文看懂前端和後端開發
    這些東西是由前端開發者開發出來的,他們使用了 Ionic 、 Swift 、 Kotlin 、 Bootstrap 、 Angular 、Vue 、 jQuery 、 React.js 等開發技術。後面我們會更多地介紹這些開發技術。
  • 探討PHP和Node.js開發之間有什麼區別,各有什麼優勢和缺點?
    在很長一段時間內,決定在Node.js和PHP之間進行選擇是一件很麻煩的事情,但對於後端程式設計師來說,這一直很麻煩,但它從未影響過開發人員。但是事情很快就發生了變化,現在開發人員必須選擇其中之一。Node.js與PHP的戰爭最近變得相當麻煩,對於開發人員來說,從中選擇合適的選擇簡直就是一場噩夢。