EXCEL导出总结

下面是我做一个excel导出功能的代码

前台代码:

<form action="excelServlet.do" method="post" id="exportForm">
<div style="margin-left: 550px; margin-top: 100px;">
<span>用户列表</span>
<input type="button" value='导出' onclick="Export()" style='margin-left:50px'/>
</div>
</form>

function Export(){
var form=$("#exportForm");
form.action='excelServlet.do';
form.submit();
}

--------------------------------------------------------------------------------------------------------------------------------

要想连接上servlet的方法,需要再web.xml配置文件中配置一下

<servlet>
<servlet-name>excelServlet</servlet-name>
<servlet-class>servlet.excelServlet</servlet-class><!--这是你所写servlet类的路径-->
</servlet>

<servlet-mapping>
<servlet-name>excelServlet</servlet-name>
<url-pattern>/excelServlet.do</url-pattern><!--放置前端文件的路径再加ervlet-name的内容点上do-->
</servlet-mapping>

-------------------------------------------------------------------------------------------------------------------------------

按这种写法,就能顺利进入servlet中

public class excelServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
super.doGet(request, response);
}

@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 清空输出流
response.reset();

// 输出流
OutputStream os = response.getOutputStream();

// 文件头信息
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setCharacterEncoding("UTF-8");

WebApplicationContext context = WebApplicationContextUtils
.getWebApplicationContext(this.getServletContext());
ListServiceImp listServiceImp = (ListServiceImp) context
.getBean("listService");

// 导出主表结果list
List<User> list = new ArrayList<User>();

// 导入至excel文件
PrintExcel excel = new PrintExcel();
// 导出
// String date1 = new java.text.SimpleDateFormat("yyyyMMddHHmmss")
// .format(new java.util.Date());
String fileName = "用户列表" ;
// 设定输出文件头
response.setHeader(
"Content-disposition",
"attachment; filename="
+ new String(fileName.getBytes("gb2312"),
"iso8859-1") + ".xls");
try {
list = listServiceImp.getList();//这个是查询出一个对象放入list中,这一块内容可以自己填充,自行补齐,代码就不贴出来了
} catch (ServiceException e) {
e.printStackTrace();
}
excel.requirePrintExcel(list, os);
}
}

-----------------------------------------------------------------------------------------------------------------------------------------

然后还有一个工具类

public class PrintExcel {
// 资产预投放导出
@SuppressWarnings("deprecation")
public void requirePrintExcel(List<User> list, OutputStream os)
throws IOException {
try {
// 第一步,创建一个webbook,对应一个Excel文件
// HSSFWorkbook wb = new HSSFWorkbook();
Workbook wb = new SXSSFWorkbook();
// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
Sheet sheet = wb.createSheet("用户列表");
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
Row row0 = sheet.createRow((int) 0);

// 定义标题数组
String[] title = {"登录代号","用户名称"};

// 设置标题字体
Font font = wb.createFont();
font.setFontName("宋体");
font.setColor(HSSFColor.BLUE.index);
font.setFontHeightInPoints((short) 14); // 字体大小
font.setBoldweight(Font.BOLDWEIGHT_BOLD); // 加粗
// 设置标题cell样式
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setFont(font);
cellStyle.setAlignment(CellStyle.ALIGN_CENTER); // 左右居中
cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); // 上下居中
// cellStyle.setLocked(true);
// cellStyle.setWrapText(true); // 自动换行
cellStyle.setBorderBottom(CellStyle.BORDER_THIN);
cellStyle.setBorderLeft(CellStyle.BORDER_THIN);
cellStyle.setBorderRight(CellStyle.BORDER_THIN);
cellStyle.setBorderTop(CellStyle.BORDER_THIN);
// 设置数据字体
Font font2 = wb.createFont();
font2.setFontName("宋体");
font2.setFontHeightInPoints((short) 9);
// 设置条目cell样式
DataFormat format = wb.createDataFormat();
// 数字style
CellStyle cellStyleNum = wb.createCellStyle();
cellStyleNum.setFont(font2);
cellStyleNum.setAlignment(CellStyle.ALIGN_RIGHT);
cellStyleNum.setVerticalAlignment(CellStyle.VERTICAL_CENTER); // 上下居中
// cellStyleNum.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));//
// 设置单元类型
cellStyleNum.setBorderBottom(CellStyle.BORDER_THIN);
cellStyleNum.setBorderLeft(CellStyle.BORDER_THIN);
cellStyleNum.setBorderRight(CellStyle.BORDER_THIN);
cellStyleNum.setBorderTop(CellStyle.BORDER_THIN);
// 文字style
CellStyle cellStyleText = wb.createCellStyle();
cellStyleText.setFont(font2);
cellStyleText.setAlignment(CellStyle.ALIGN_RIGHT);
cellStyleText.setVerticalAlignment(CellStyle.VERTICAL_CENTER); // 上下居中
cellStyleText.setDataFormat(format.getFormat("0.00"));// 设置单元类型
cellStyleText.setBorderBottom(CellStyle.BORDER_THIN);
cellStyleText.setBorderLeft(CellStyle.BORDER_THIN);
cellStyleText.setBorderRight(CellStyle.BORDER_THIN);
cellStyleText.setBorderTop(CellStyle.BORDER_THIN);

// 输出标题
for (int i = 0; i < title.length; i++) {
Cell cell = row0.createCell((short) i);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellStyle(cellStyle);
cell.setCellValue(title[i]);
}
// 数据输出
Cell[] cell1 = new Cell[title.length];
for (int i = 0; i < list.size(); i++) {
Row rowData = sheet.createRow((int) i + 1);
for (int j = 0; j < title.length; j++) {
cell1[j] = rowData.createCell(j);
cell1[j].setCellType(Cell.CELL_TYPE_STRING);
cell1[j].setCellStyle(cellStyleNum);

}
User List = list.get(i);
if(List.getIdNo()!=null&&List.getUserName()!=null){

cell1[0].setCellValue(List.getIdNo());
cell1[1].setCellValue(List.getUserName());
}
}

// 输出标题
for (int i = 0; i < title.length; i++) {//后面放置在这里是为了解决设置这个自适应宽度特别慢的问题
// 调整列宽度
sheet.autoSizeColumn((short) i);
}
// 第五步,下载文件
// try {
wb.write(os);
// } catch (Exception e) {
// e.printStackTrace();
// os.close();
// }
} catch (Exception e) {
e.printStackTrace();
} finally {
os.close();

}
}
}

------------------------------------------------------------------------------------------------------------------------

到这里,问题就解决了,只要补充上数据,就可以到出到excel表格中

posted @ 2017-02-16 11:40  zhanchi111  阅读(2540)  评论(0编辑  收藏  举报