在Java的程序中,将内容写入Excel,并将Excel表格下载

//创建Servlet

@WebServlet("/DownServlet")   //注解
public class DownServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public DownServlet() {
super();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 下载Excel操作--导出Excel
//excel:存放数据(以二维表的形式存放)
//二维表:列(cols) 单元格
String[]cols={"username","pwd","salary"};//设置列名
String[]labers={"用户名","密码","工资"};//设置列名字
List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();//(存放map集合)
Map<String, Object> map=new HashMap<String, Object>();//定义object类型(存放键值对)
map.put("username", "东东");
map.put("pwd", "123");
map.put("salary", 2000);
list.add(map);
response.setHeader("Content-disposition", "attachment;filename=empInfo.xls");//激活文件下载对话框(*重点*)
OutputStream out=response.getOutputStream();//?输出流写入
XSSFWorkbook workbook = new XSSFWorkbook();  //java导出Excel的工具类
XSSFSheet sheet = workbook.createSheet("emp");  // 创建sheet页
// 每个页中有行,创建行 按照索引index顺序创建
XSSFRow row = sheet.createRow(0);// index 从0开始,获取该页的第一行
// 在把我们对应的数据插入到Excel中的sheet页中
for (int i = 0; i < labers.length; i++) {
// 单元格
XSSFCell cell = row.createCell(i);//获取第一行的单元格
cell.setCellValue(labers[i]);// 把label中的值出入到到单元格中
}// 此时把表格中的列标题的值放到了Excel的表中
// 把对应的列的值放入到单元格中
for (int i = 0; i < list.size(); i++) {
row = sheet.createRow(i + 1);// 因为第一行放的是列标题,所以从第二行开始
Map<String, Object> map2 = list.get(i);
for (int j = 0; j < cols.length; j++) {
XSSFCell cell = row.createCell(j);
cell.setCellValue(map2.get(cols[j]).toString());// map.get(key)-->获取到value值,将获取的value值放进单元格中
}
}
try {
workbook.write(out);// 使用文件流写入(不是很懂)
} catch (IOException e) {
e.printStackTrace();
}
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}

posted @ 2018-08-16 20:47  Captain灬  阅读(1646)  评论(0编辑  收藏  举报