java后端导入excel模板和导入excel文件去读数据

时间:2023-03-09 00:14:44
java后端导入excel模板和导入excel文件去读数据

模板转载地址:https://www.cnblogs.com/zhangyangtao/p/9802948.html

直接上代码(我是基于ssm写的demo,导入文件目前只能读取.xls后缀的excel文件)

     <!--导入的核心依赖-->
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
     //这是下载模板的方法
@RequestMapping("/downloadExcel.do")
@ResponseBody
public void downloadExcel(HttpServletResponse res, HttpServletRequest req) throws Exception {
//文件的名称
String fileName = "excelTemplate.xls";
ServletOutputStream out;
res.setContentType("multipart/form-data");
res.setCharacterEncoding("UTF-8");
res.setContentType("text/html");
//文件的路径 resource/template/1.xlsx
String filePath = getClass().getResource("/template/" + fileName).getPath();
System.out.println(filePath);
String userAgent = req.getHeader("User-Agent");
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
}else {
// 非IE浏览器的处理:
fileName = new String((fileName).getBytes("UTF-8"), "ISO-8859-1");
}
filePath = URLDecoder.decode(filePath, "UTF-8");
res.setHeader("Content-Disposition", "attachment;fileName=" + fileName);
FileInputStream inputStream = new FileInputStream(filePath);
out = res.getOutputStream();
int b = 0;
byte[] buffer = new byte[1024];
while ((b = inputStream.read(buffer)) != -1) {
// 4.写到输出流(out)中
out.write(buffer, 0, b);
}
inputStream.close();
out.flush();
out.close();
// if (out != null) {
// out.flush();
// out.close();
//
//   } }

导入excel文件读取数据的方法

 @RequestMapping("/importExcel.do")
public void import2(String xlsPath) throws IOException, BiffException { // 导入已存在的Excel文件,获得只读的工作薄对象
FileInputStream fis = new FileInputStream(xlsPath);
Workbook wk = Workbook.getWorkbook(fis);
// 获取第一张Sheet表
Sheet sheet = wk.getSheet(0);
// 获取总行数
int rowNum = sheet.getRows();
System.out.println("插入总行数:" + (rowNum-2));
// 从数据行开始迭代每一行
for (int i = 2; i < rowNum; i++) {
// 先判断插入的数据是否和数据库的数据重复
System.out.println(sheet.getCell(0, i).getContents());
if (userService.findUser(sheet.getCell(0, i).getContents()) > 0) {
continue;
}
User u = new User();
// getCell(column,row),表示取得指定列指定行的单元格(Cell)
// getContents()获取单元格的内容,返回字符串数据。适用于字符型数据的单元格
// 使用实体类封装单元格数据
u.setName(sheet.getCell(0, i).getContents());
u.setAge(sheet.getCell(1, i).getContents());
u.setNickName(sheet.getCell(2, i).getContents());
userService.saveUser(u);
System.out.println("成功插入:" + sheet.getCell(0, i).getContents()); /*
* // 判断单元格的类型,单元格主要类型LABEL、NUMBER、DATE if (sheet.getCell(2, i).getType ==
* CellType.NUMBER) {
*
* // 转化为数值型单元格 NumberCell numCell = (NumberCell) sheet.getCell(2, i); //
* NumberCell的getValue()方法取得单元格的数值型数据 info.setRscore(numCell.getValue());
*
* } if (sheet.getCell(3, i).getType == CellType.NUMBER) { NumberCell numCell =
* (NumberCell) sheet.getCell(3, i); info.setRscore(numCell.getValue); }
*
* if (sheet.getCell(4, i).getType == CellType.DATE) { DateCell dateCell =
* (DateCell) sheet.getCell(4, i); // DateCell的getDate()方法取得单元格的日期型数据
* info.setDate(dateCell.getDate()); }
*/
}
fis.close();
wk.close();
}