使用HSSFWorkbook导出Excel表格
作者:互联网
使用HSSFWorkbook导出Excel表格
一、加依赖或者导入jar包
去https://mvnrepository.com下载Apache POI
这里使用的3.9
二、上代码
/**
*
* <li>action控制层</li>
* @param req
* @param resp
* @throws Exception
*/
public void ExcelOut(HttpServletRequest req, HttpServletResponse resp) throws Exception{
// TODO Auto-generated method stub
List<Emp> selectAll = empService.selectAll();//从数据库查询出想要的数据
ExportExcelUtil.exportExcelBook(req, resp, selectAll);//进行EXCEL表格的绘制以及传输
}
这里我把它作为工具类,感觉有点不妥
package com.test.utils;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLDecoder;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import com.test.pojo.Emp;
public class ExportExcelUtil {
/*
HSSFWorkbook:excel的工作簿
HSSFSheet:excel的工作表
HSSFRow:excel的行
HSSFCell:excel的单元格
HSSFFont:excel字体
HSSFDataFormat:日期格式
HSSFHeader:sheet头
样式:
HSSFCellStyle:单元格样式
一个Excel的文件对应一个工作簿(HSSFWorkbook),
一个工作簿可以有多个工作表(我们通常看到的Sheet0、Sheet1)(HSSFSheet)组成,
一个工作表是由多行(HSSFRow)组成,
一行又是由多个单元格(HSSFCell)组成。
*/
/**
* 导出数据生成EXCEL方法
* @param request
* @param response
* @param list
* @throws IOException
*/
public static void exportExcelBook(HttpServletRequest request, HttpServletResponse response,List<Emp> list)
throws IOException {
if (list == null) {
return;
}
//文件名称,客户端传来的参数,防止中文文件名乱码参数编码因此这里需要解码
String fileName = URLDecoder.decode(request.getParameter("fileName"),"UTF-8");
//创建Excel工作薄对象
HSSFWorkbook workbook = new HSSFWorkbook();
//创建Excel工作表对象
HSSFSheet sheet = workbook.createSheet();
//有多少栏(列)就要设置多少,格式 sheet.setColumnWidth(列号,宽)
sheet.setColumnWidth(0, 3000);
sheet.setColumnWidth(1, 5000);
sheet.setColumnWidth(2, 4000);
sheet.setColumnWidth(3, 2500);
sheet.setColumnWidth(4, 3000);
sheet.setColumnWidth(5, 6000);
sheet.setColumnWidth(6, 6000);
// 设置表头字体样式
HSSFFont columnHeadFont = workbook.createFont();
columnHeadFont.setFontName("宋体");
columnHeadFont.setFontHeightInPoints((short) 10);
columnHeadFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 列头的样式
HSSFCellStyle columnHeadStyle = workbook.createCellStyle();
columnHeadStyle.setFont(columnHeadFont);
// 左右居中
columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 上下居中
columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
columnHeadStyle.setLocked(true);
columnHeadStyle.setWrapText(true);
// 左边框的颜色
columnHeadStyle.setLeftBorderColor(HSSFColor.BLACK.index);
// 边框的大小
columnHeadStyle.setBorderLeft((short) 1);
// 右边框的颜色
columnHeadStyle.setRightBorderColor(HSSFColor.BLACK.index);
// 边框的大小
columnHeadStyle.setBorderRight((short) 1);
// 设置单元格的边框为粗体
columnHeadStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
// 设置单元格的边框颜色
columnHeadStyle.setBottomBorderColor(HSSFColor.BLACK.index);
// 设置单元格的背景颜色(单元格的样式会覆盖列或行的样式)
columnHeadStyle.setFillForegroundColor(HSSFColor.WHITE.index);
// 设置普通单元格字体样式
HSSFFont font = workbook.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short) 10);
//创建Excel工作表第一行
HSSFRow row0 = sheet.createRow(0);
// 设置行高
row0.setHeight((short) 750);
HSSFCell cell = row0.createCell(0);
//设置单元格内容
cell.setCellValue(new HSSFRichTextString("雇员编号"));
//设置单元格字体样式
cell.setCellStyle(columnHeadStyle);
cell = row0.createCell(1);
cell.setCellValue(new HSSFRichTextString("姓名"));
cell.setCellStyle(columnHeadStyle);
cell = row0.createCell(2);
cell.setCellValue(new HSSFRichTextString("工作"));
cell.setCellStyle(columnHeadStyle);
cell = row0.createCell(3);
cell.setCellValue(new HSSFRichTextString("上级编号"));
cell.setCellStyle(columnHeadStyle);
cell = row0.createCell(4);
cell.setCellValue(new HSSFRichTextString("工资"));
cell.setCellStyle(columnHeadStyle);
cell = row0.createCell(5);
cell.setCellValue(new HSSFRichTextString("奖金"));
cell.setCellStyle(columnHeadStyle);
cell = row0.createCell(6);
cell.setCellValue(new HSSFRichTextString("部门编号"));
cell.setCellStyle(columnHeadStyle);
// 循环写入数据
for (int i = 0; i < list.size(); i++) {
Emp emp = list.get(i);
//第一行以此类推
HSSFRow row = sheet.createRow(i + 1);
//第一个单元格,以此类推
cell = row.createCell(0);
cell.setCellValue(new HSSFRichTextString(String.valueOf(emp.getEmpno())));
cell.setCellStyle(columnHeadStyle);
cell = row.createCell(1);
cell.setCellValue(new HSSFRichTextString(emp.getEname()));
cell.setCellStyle(columnHeadStyle);
cell = row.createCell(2);
cell.setCellValue(new HSSFRichTextString(emp.getJob()));
cell.setCellStyle(columnHeadStyle);
cell = row.createCell(3);
cell.setCellValue(new HSSFRichTextString(String.valueOf(emp.getMgr())));
cell.setCellStyle(columnHeadStyle);
cell = row.createCell(4);
cell.setCellValue(new HSSFRichTextString(String.valueOf(emp.getSal())));
cell.setCellStyle(columnHeadStyle);
cell = row.createCell(5);
cell.setCellValue(new HSSFRichTextString(String.valueOf(emp.getComm())));
cell.setCellStyle(columnHeadStyle);
cell = row.createCell(6);
cell.setCellValue(new HSSFRichTextString(String.valueOf(emp.getDeptno())));
cell.setCellStyle(columnHeadStyle);
// cell.setCellValue(new HSSFRichTextString(DateUtils.DateToString(stu.getCreate_time(), "yyyy-MM-dd HH:mm:ss")));
}
// 获取输出流
OutputStream os = response.getOutputStream();
// 重置输出流
response.reset();
// 设定输出文件头
//Content-Disposition属性有两种类型:inline 和 attachment
//inline :将文件内容直接显示在页面
//attachment:弹出对话框让用户下载
response.setHeader("Content-disposition",
"attachment; filename=" + new String(fileName.getBytes("GB2312"), "8859_1") + ".xls");
// 定义输出类型,定义
response.setContentType("application/msexcel");
workbook.write(os);
os.close();
return;
}
}
前端简单处理了
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<base href="/TestDemo/">
</head>
<body>
<a href="javascript:void(0)" onclick="outExcel()">导出雇员表</a>
<script>
function outExcel(){
var fileName ="雇员信息表";
//编码防止中文字符乱码
window.location.href=encodeURI("empout/ExcelOut?fileName="+encodeURIComponent(fileName));
}
</script>
</body>
</html>
标签:Excel,表格,columnHeadStyle,HSSFWorkbook,cell,import,new,HSSFRichTextString,setCell 来源: https://www.cnblogs.com/zhangsonglin/p/10858949.html