前面有一篇博文写的是将Excel表格中的数据导入到数据库中,今天在写一篇是将数据库中的数据导出到Excel表中,也算是一套下来了,为自己以后留个备份,也乘机分享一下锻炼一下文笔。
<form id="ExportForm8">
开始时间:<input type="date" name="qimiandateStart">
结束时间:<input type="date" name="qimiandateEnd">
<input type="button" value="导出" οnclick="qiMianQimiandate()">
</form>
这是表单中的元素,我是以时间区间为导出条件的,另外我采用了Ajax来局部刷新,不进行跳转。
function qiMianQimiandate(){
var message=$("#ExportForm8").serialize();
$.ajax({
url:"/manager/exportQiMianByQimiandate",
type:"POST",
data:message,
dataType:"text",
success:function(a){
alert(a);
}
});
}
这是我js中的代码,var message=$("#ExportForm8").serialize();这是实用虚列化来获取表单中的数据。
接下来,是重头戏了,先把Java中的代码贴出来,在逐个重点解释(以注释形式解释)。
public String exportQiMianByQimiandate() {
HttpServletResponse response=ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
//这一段是设置响应的字符编码
List list=excelExportService.exportQiMianByQimiandate(qimiandateStart, qimiandateEnd);
//调用底层创建list集合
boolean b=false;
String fileName="D://"+qimiandateStart+"-"+qimiandateEnd+"企面表.xlsx";
File file=new File(fileName);
//这一步是创建一个要输出的文件,文件名采用前端传过来的变量,以防止重名。
FileOutputStream fout=null;
try{
if(file.exists()) {
file.delete();
}
//为了防护一个区间多次重复录入,而导致文件相同名产生错误,所以在俩个文件同名时先判断,在删除。
if(!file.exists()) {
file.createNewFile();
}
//创建一个以fileName为文件名的workbook
XSSFWorkbook workbook=new XSSFWorkbook();
//创建一个名字是传进来的班级名字的表
XSSFSheet sheet = workbook.createSheet(qimiandateStart+"-"+qimiandateEnd+"企面表");
XSSFRow row = null;
row = sheet.createRow(0);
XSSFCell cell=null;
cell=row.createCell(0);
cell.setCellValue("就业经理");
cell=row.createCell(1);
cell.setCellValue("企业名称");
cell=row.createCell(2);
cell.setCellValue("日期");
cell=row.createCell(3);
cell.setCellValue("星期");
cell=row.createCell(4);
cell.setCellValue("时间");
cell=row.createCell(5);
cell.setCellValue("参加人员名单");
cell=row.createCell(6);
cell.setCellValue("面试地址");
cell=row.createCell(7);
cell.setCellValue("联系人");
for (int i = 1; i <= list.size(); i++) {
row=sheet.createRow(i);
cell=row.createCell(0);
cell.setCellValue(((QiMianInfo)list.get(i-1)).getJiuyeManager());
cell=row.createCell(1);
cell.setCellValue(((QiMianInfo)list.get(i-1)).getCompanyname());
cell=row.createCell(2);
cell.setCellValue(((QiMianInfo)list.get(i-1)).getQimiandate());
cell=row.createCell(3);
cell.setCellValue(((QiMianInfo)list.get(i-1)).getXingqi());
cell=row.createCell(4);
cell.setCellValue(((QiMianInfo)list.get(i-1)).getQimiantime());
cell=row.createCell(5);
cell.setCellValue(((QiMianInfo)list.get(i-1)).getCanjiapeople());
cell=row.createCell(6);
cell.setCellValue(((QiMianInfo)list.get(i-1)).getMianshiaddress());
cell=row.createCell(7);
cell.setCellValue(((QiMianInfo)list.get(i-1)).getContant());
//以上这一大摞是给Excel加表头,和表内信息。
}
fout=new FileOutputStream(file);
workbook.write(fout);
b=true;
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
fout.flush();
fout.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(b) {
try {
PrintWriter out = response.getWriter();
out.write("Excel导出成功");//想前端返回响应
} catch (IOException e) {
e.printStackTrace();
}
}else {
try {
PrintWriter out = response.getWriter();
out.write("Excel导出失败");
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
以上就是数据库被导出Excel,更底层的到就不写来。