package com.yx.mail;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang3.StringUtils;
import jxl.Workbook;
import jxl.common.Logger;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.NumberFormat;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
/**
* java excel api(jxl) 导出excel工具类
* @author Yanyanhui
*
*/
public class JxlUtil {
private static Logger logger = Logger.getLogger(JxlUtil.class);
private static int MAX_SHEET_SIZE = 65530;
private static String DOUBLE_FORMAT = "#.00";
private static String INTER_FORMAT = "#";
private static WritableCellFormat INTER_CELL_FORMAT = new WritableCellFormat(new NumberFormat(INTER_FORMAT));
private static WritableCellFormat DOUBLE_CELL_FORMAT = new WritableCellFormat(new NumberFormat(DOUBLE_FORMAT));
/**
* 列表转换成excel导出
* @param list 要转换的列表
* @param title 转换列表的标题
* @param sheetName 工作表名称
* @param request 请求
* @param response 响应
* @throws Exception
*/
public static <T> void listToExcel(List<T> list,LinkedHashMap<String, String> title,String sheetName,HttpServletRequest request,HttpServletResponse response) throws Exception{
listToExcel(list, title, sheetName, sheetName, 0, 0, request, response);
}
/**
* 列表转换成excel导出
* @param list 要转换的列表
* @param title 转换列表的标题
* @param sheetName 工作表名称
* @param fileName excel文件名称
* @param request 请求
* @param response 响应
* @throws Exception
*/
public static <T> void listToExcel(List<T> list,LinkedHashMap<String, String> title,String sheetName, String fileName,HttpServletRequest request,HttpServletResponse response) throws Exception{
listToExcel(list, title, sheetName, fileName, 0, 0, request, response);
}
/**
* 列表转换成excel导出
* @param list 要转换的列表
* @param title 转换列表的标题
* @param sheetName 工作表名称
* @param fileName excel文件名称
* @param startRow 从哪行开始输出
* @param request 请求
* @param response 响应
* @throws Exception
*/
public static <T> void listToExcel(List<T> list,LinkedHashMap<String, String> title,String sheetName, String fileName,int startRow,HttpServletRequest request,HttpServletResponse response) throws Exception{
listToExcel(list, title, sheetName, fileName, 0, startRow, request, response);
}
/**
* 列表转换成excel导出
* @param list 要转换的列表
* @param title 转换列表的标题
* @param sheetName 工作表名称
* @param fileName excel文件名称
* @param sheetSize 工作表的大小
* @param startRow 从哪行开始输出
* @param request 请求
* @param response 响应
* @throws Exception
*/
public static <T> void listToExcel(List<T> list,LinkedHashMap<String, String> title,String sheetName, String fileName,int sheetSize,int startRow,HttpServletRequest request,HttpServletResponse response) throws Exception{
if (list == null || list.size() == 0) {
// throw new Exception("列表中没有任何数据");
}
if (sheetSize > MAX_SHEET_SIZE || sheetSize < 1) {
sheetSize = MAX_SHEET_SIZE;
}
try {
setResp(request, response, fileName);
OutputStream outputStream = response.getOutputStream();
WritableWorkbook wwb = Workbook.createWorkbook(outputStream);
int size = 0;
// 因为2003的Excel一个工作表最多可以有65536条记录,除去列头剩下65530条
// 所以如果记录太多,需要放到多个工作表中,其实就是个分页的过程
// 1.计算一共有多少个工作表
double sheetNum = Math.ceil(size / new Integer(sheetSize).doubleValue());
// 2.创建相应的工作表,并向其中填充数据
WritableSheet sheet = wwb.createSheet(sheetName, 0);
fillVeticalSheet(sheet, list, title, startRow, 0);
// setColumnAutoSize(sheet, 2);
wwb.write();
wwb.close();
} catch (WriteException e) {
e.printStackTrace();
logger.error(e.getMessage());
} catch (IOException e) {
e.printStackTrace();
logger.error(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage());
}
}
/**
* 以流的形式导出excel
* @param list 要转换的列表
* @param title 转换列表的标题
* @param sheetName 工作表名称
* @param fileName excel文件名称
* @param sheetSize 工作表的大小
* @param startRow 从哪行开始输出
* @param request 请求
* @param response 响应
* @return
* @throws Exception
*/
public static <T> ByteArrayOutputStream listToExcelReturnOut(List<T> list,LinkedHashMap<String, String> title,String sheetName, String fileName,int sheetSize,int startRow,HttpServletRequest request,HttpServletResponse response) throws Exception{
if (list == null || list.size() == 0) {
// throw new Exception("列表中没有任何数据");
}
if (sheetSize > MAX_SHEET_SIZE || sheetSize < 1) {
sheetSize = MAX_SHEET_SIZE;
}
// OutputStream outputStream = response.getOutputStream();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
setResp(request, response, fileName);
try {
WritableWorkbook wwb = Workbook.createWorkbook(outputStream);
int size = 0;
// 因为2003的Excel一个工作表最多可以有65536条记录,除去列头剩下65530条
// 所以如果记录太多,需要放到多个工作表中,其实就是个分页的过程
// 1.计算一共有多少个工作表
double sheetNum = Math.ceil(size / new Integer(sheetSize).doubleValue());
// 2.创建相应的工作表,并向其中填充数据
WritableSheet sheet = wwb.createSheet(sheetName, 0);
fillVeticalSheet(sheet, list, title, startRow, 0);
// setColumnAutoSize(sheet, 2);
wwb.write();
wwb.close();
} catch (WriteException e) {
e.printStackTrace();
logger.error(e.getMessage());
} catch (IOException e) {
e.printStackTrace();
logger.error(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage());
}
return outputStream;
}
/**
* 填充竖直方向的sheet
* @p
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
MailExceldemo.zip (38个子文件)
demo
.project 1KB
mvnw.cmd 5KB
mvnw 6KB
src
test
java
com
example
demo
DemoApplicationTests.java 331B
main
resources
application.properties 0B
system.properties 209B
java
com
example
demo
DemoApplication.java 304B
yx
mail
Order.java 492B
BaseController.java 1KB
SendEmailService.java 247B
TestMain.java 2KB
JxlUtil.java 17KB
MailConfig.java 1KB
BaseMail.java 5KB
target
classes
application.properties 0B
com
example
demo
DemoApplication.class 703B
yx
mail
BaseMail$MyAuthenricator.class 744B
TestMain.class 4KB
Order.class 723B
SendEmailService.class 384B
BaseMail.class 5KB
JxlUtil.class 13KB
BaseController.class 723B
MailConfig.class 1KB
META-INF
MANIFEST.MF 311B
maven
com.example
demo
pom.properties 233B
pom.xml 2KB
system.properties 209B
test-classes
com
example
demo
DemoApplicationTests.class 622B
.settings
org.eclipse.wst.common.project.facet.core.xml 145B
org.eclipse.m2e.core.prefs 90B
org.eclipse.jdt.core.prefs 243B
org.eclipse.core.resources.prefs 155B
.mvn
wrapper
maven-wrapper.jar 46KB
maven-wrapper.properties 110B
pom.xml 2KB
.classpath 1KB
.gitignore 268B
共 38 条
- 1
资源评论
爬到松树上的猪
- 粉丝: 19
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功