// 创建工作簿
HSSFWorkbook wb = new HSSFWorkbook();
// 创建工作表
HSSFSheet sheet = wb.createSheet();
// 设置工作表的索引行的宽度,15 * 256表示15个字符宽度
sheet.setColumnWidth(0, 15 * 256);
sheet.setColumnWidth(1, 15 * 256);
sheet.setColumnWidth(2, 15 * 256);
sheet.setColumnWidth(3, 15 * 256);
// 设置表格格式
HSSFCellStyle style = wb.createCellStyle();
// 设置字体
HSSFFont font = wb.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short) 12);
// 设置单元格类型
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
style.setFont(font);
style.setWrapText(true);
// 合并起止行0,0,起止列0,3单元格
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 3));
// 创建行
HSSFRow row0 = sheet.createRow(0);
row0.setHeight((short) 600);
// 在行中创建单元格,并设置内容及格式
HSSFCell cell0 = row0.createCell(0);
cell0.setCellValue("七彩评价社团信息");
cell0.setCellStyle(style);
// 通过获取的list数据在表格中进行填充数据
for (LeagueMemberDto stu : list) {
HSSFRow rowX = sheet.createRow(num++);
cell = rowX.createCell(0);
cell.setCellValue(stu.getName());
cell.setCellStyle(style);
}
/** 若要为创建的工作簿进行下载,可以先下载到服务器(也可以不用),再由客户端下载 **/
// 文件下载的地址(服务器)
String upLoadPath = request.getSession().getServletContext().getRealPath("/") + "/download/athleteFile/";
String filePath = upLoadPath + fileName;
// 创建下载的文件夹
File dirFile = new File(upLoadPath);
if (!dirFile.exists() || !dirFile.isDirectory()) {
dirFile.mkdirs();
}
// (在服务器) 生成文件
workbook.write(new FileOutputStream(filePath));
// 下载文件
FileUtil.download(filePath, fileName + ".xls", request, response, false);
EXCEL文件下载:
excel文件下载时可以直接获取response的getOutputStream()进行文件流的输出,再设置response的相关头信息即可实现浏览器下载,代码如下:
String fileName = "人员信息.xls";
// 更换文件名的编码格式,否则在浏览器无法正常显示
fileName = response.encodeURL(new String(fileName.getBytes("utf-8"), "iso8859-1"));
response.reset(); // 清空输出流
response.setContentType("application/vnd.ms-excel;charset=utf-8\"");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
outputStream = response.getOutputStream();
workbook.write(outputStream);
EXCEL文件导入
JAR包支持:
ERROR提醒:
-
前端在使用form进行input文件的上传时,需要为相应input设置name属性,否则无法正常上传
-
将input标签加上multiple属性表示可上传多个文件
-
小数字符串转化为整型:转换为Int类型String num =“1.00”; int abc =Double.valueOf(num).intValue();
前端: 使用jquery实现同一个form中,不同按钮使用不用servlet进行处理,代码如下:
<form action="../ExcelImportServlet" method="post" enctype="multipart/form-data" id="handle" name="handle">
<div class="input-group">
<div class="custom-file">
<input type="file" class="custom-file-input" id="inputGroupFile04" name="file" multiple>
<label class="custom-file-label" for="inputGroupFile04">Choose
file</label>
</div>
<div class="input-group-append">
<button class="btn btn-outline-secondary" onclick="$.handler.uploadExcel()">upload</button>
</div>
<div class="input-group-append">
<button class="btn btn-outline-secondary" onclick="$.handler.download()">download</button>
</div>
</div>
</form>
<script type="text/javascript">
$(function() {
$.handler = {
download: function() {
$("#handle").attr("action","../ExcelDownloadServlet");
},
uploadExcel: function() {
$("#handle").attr({
action : "../ExcelImportServlet",
method : "post",
enctype: "multipart/form-data"
});
}
}
})
</script>
调用:<button class="btn btn-outline-secondary" onclick="$.handler.uploadExcel()">upload</button>
后端: excel文件导入时前端可以使用form表单上传文件(将input标签加上multiple属性表示可上传多个文件),同时需要将form表单属性设置为: enctype=“multipart/form-data”,上传后使用Apache文件上传组件处理文件上传,代码如下:
public static int importExcel(HttpServletRequest request) {
// 使用Apache文件上传组件处理文件上传步骤:
// 为解析类提供配置信息
DiskFileItemFactory factory = new DiskFileItemFactory();
// 创建解析类的实例
ServletFileUpload sfu = new ServletFileUpload(factory);
// 设置单个上传的文件大小
sfu.setFileSizeMax(1024 * 1024 * 5);
//设置总上传文件的文件大小
sfu.setSizeMax(1024 * 1024 * 50);
try {
List<UserDto> userLists = new ArrayList<>();
List<FileItem> fileItems = sfu.parseRequest(request);
System.out.println("FileItem的数目为:" + fileItems.size());
for (FileItem item : fileItems) {
if (item.isFormField()) {
} else {
String fileName = item.getName();
String fileType = fileName.substring(fileName.lastIndexOf("."));
System.out.println("文件名后缀为:" + fileName);
if (fileType.equals(".xls") || fileType.equals(".xlsx")) {
InputStream is = item.getInputStream();
HSSFWorkbook workbook = new HSSFWorkbook(is);
HSSFSheet sheet;
HSSFRow row;
System.out.println("工作簿的表数为:" + workbook.getNumberOfSheets());
// 遍历工作表
for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
sheet = workbook.getSheetAt(i);
System.out.println("工作表的行数为:" + sheet.getLastRowNum());
// 遍历行
for (int j = sheet.getFirstRowNum() + 1; j <= sheet.getLastRowNum(); j++) {
UserDto user = new UserDto();
row = sheet.getRow(j);
user.setId(Double.valueOf(row.getCell(0).toString()).intValue());
user.setName(row.getCell(1).toString().trim());
user.setSex(row.getCell(2).toString().trim());
user.setEmail(row.getCell(3).toString().trim());
user.setTelephone(row.getCell(4).toString().trim());
userLists.add(user);
}
// 将读取的数据导入数据库
DBBean.insertUserExcelToDB(userLists);
}
} else {
return -1;
}
}
}
} catch (FileUploadException e) {
logger.debug(e.getMessage(), e);
return 0;
} catch (IOException e) {
logger.debug(e.getMessage(), e);
return 0;
}
return 1;
}