目录
一、效果图
二、excle 生成的工具类原理
三、excle 生成的工具类源码
四、在 Controller 层中如何使用?
五、测试
通过调用工具类,先判断在服务器中指定的文件夹中有没有存在同名的 excle 表,有的话就先删除掉,没有的话,就在指定的文件夹中生成一份新的 excle 表格,再调用浏览器的下载接口,把 excle 表下载到自己电脑上的指定位置,然后删除掉服务器上的 excle 表格。
CreateExcelFile : 生成 excle 的函数
send : 调用浏览器下载接口的函数
main : 测试类,可以自己运行下测试工具类是否能够正常使用。
源码中部分可能需要修改的地方,都带有解释,其它自己看。
需要导入的两个 jar 包:
package com.utils;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.NumberFormats;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
public class MakeExcel {
public MakeExcel() {}
// 入参是一个list,一条数据存一个map对象,map对象中存列和值得对应关系,destFile当然就是要存的文件信息。
// headList很重要,它是列的展示,当然和数据的列要对应不然找不到对应的地方存储。
public static void CreateExcelFile(List
代码中有解释
/**
* 下载用户 excle 表接口
* @param response
* @throws IOException
*/
@RequestMapping("/download")
public void download(HttpServletResponse response) throws IOException {
//可以根据自己的实际情况指定一个地方存放 excle 文件,记得要文件的全名
String FILEPATH = "d:/a.xls";
// 判断 "d:/a.xls" 文件是否已经存在,如果存在就删除掉
deleteFile(FILEPATH);
// 首行表头信息
List ll = new ArrayList<>();
ll.add("用户ID");
ll.add("用户账号");
ll.add("用户密码");
ll.add("今日状态");
ll.add("总签到次数");
// 获取所有用户信息
List allUserList = userService.displayAllUser();
// 将用户的相关信息遍历到 List> 中
List> list = new ArrayList<>();
for (TUser tUser : allUserList) {
Map map = new HashMap<>();
map.put("用户ID", tUser.getUserid());
map.put("用户账号", tUser.getUsername());
map.put("用户密码", tUser.getPassword());
map.put("今日状态", tUser.getState());
map.put("总签到次数", tUser.getCount());
list.add(map);
}
try {
// 第一个参数:表格中的数据
// 第二个参数:表格保存的路径
// 第三个参数:表格第二行的列信息
// 第四个参数:表格第一行的表头信息
// 参照效果图看会清楚些
MakeExcel.CreateExcelFile(list, new File(FILEPATH), ll, "Tell me");
} catch (WriteException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//调用浏览器下载接口
MakeExcel.send(FILEPATH, response);
boolean deleteFileState = deleteFile(FILEPATH);
if (deleteFileState) {
System.out.println("服务器上文件删除成功!!!");
} else {
System.out.println("服务器上文件删除失败!!!");
}
}
/**
* 删除单个文件
*
* @param sPath 被删除文件的文件名
* @return 单个文件删除成功返回true,否则返回false
*/
public boolean deleteFile(String sPath) {
boolean flag = false;
File file = new File(sPath);
// 路径为文件且不为空则进行删除
if (file.isFile() && file.exists()) {
file.delete();
flag = true;
}
return flag;
}
先在 tomcat 下跑起来,然后直接调用。由于我这里没有写前端,就直接在浏览器上输入链接:http://localhost:8080/sign/download(这是我自己项目的链接,你根据自己的实际项目名称去改),在浏览器上运行之后,浏览器会弹出如下的下载窗口。剩下的就跟我们平时在浏览器上下载东西一样了。下载后的表格效果图在博客前面已经给了。如果不喜欢这样的表格,可以自行根据注释修改。