springboot實現資料庫中資料匯出Excel功能
阿新 • • 發佈:2019-01-04
功能介紹
網上查找了一堆的資料匯出程式碼,可能是自己基礎比較薄弱的原因還是別的什麼原因,導致一直沒有執行成功,就算是執行成功的,結果也是差強人意。在此總結一下自己借鑑別人已經經過自己整合出來的一個demo。
步驟解析
1. 前臺頁面新增資料匯出按鈕。
2. 後臺進行資料的匯出功能。
2. 1 資料庫資訊的查詢。
將資料庫中的某張表中的資料進行一個查詢,將查詢到的資料進行寫入excel檔案中。
2. 2 建立一張excel表進行儲存查詢到的資料。
建立一張excel表,首先建立一個工作簿,然後建立一個sheet,在sheet中建立一行作為表頭,將資料庫查詢到的資料分別放到對應的表頭的下方。
程式碼
前臺html頁面程式碼如下:
<table border="0" style="margin-top:4px; margin-left: 18px">
<tr>
<td><a href="#" class="easyui-linkbutton" onclick="downloadfile();">資料匯出</a></td>
</tr>
</table>
前臺頁面js程式碼如下:
function downloadfile(){
window.location.href="/UserExcelDownloads";
}
service和mapper層程式碼如下:
//mapper介面程式碼
@Select("select * from teacher")
public List<Teacher> teacherinfor();
//service層程式碼
public List<Teacher> teacherinfor(){
return teachermapper.teacherinfor();
//同時要建立一個Teacher實體類,類中存放的屬性名要和匯出的資料庫中的表的屬性名一樣
後臺Controller層程式碼如下:
@RequestMapping(value = "UserExcelDownloads", method = RequestMethod.GET)
public void downloadAllClassmate(HttpServletResponse response) throws IOException {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("資訊表");
List<Teacher> classmateList = teacherservice.teacherinfor();
String fileName = "userinf" + ".xls";//設定要匯出的檔案的名字
//新增資料行,並且設定單元格資料
int rowNum = 1;
String[] headers = { "學號", "姓名", "身份型別", "登入密碼"};
//headers表示excel表中第一行的表頭
HSSFRow row = sheet.createRow(0);
//在excel表中新增表頭
for(int i=0;i<headers.length;i++){
HSSFCell cell = row.createCell(i);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
//在表中存放查詢到的資料放入對應的列
for (Teacher teacher : classmateList) {
HSSFRow row1 = sheet.createRow(rowNum);
row1.createCell(0).setCellValue(teacher.getTno());
row1.createCell(1).setCellValue(teacher.getTname());
row1.createCell(2).setCellValue(teacher.getType());
row1.createCell(3).setCellValue(teacher.getTpassword());
rowNum++;
}
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
response.flushBuffer();
workbook.write(response.getOutputStream());
}