/**导出信息**/
@RequestMapping("fileUpload")//前台发出请求
@ResponseBody
protected ResultBean fileUpload(@RequestBody Map<String, Object> map, HttpServletRequest request, HttpServletResponse response) {
ResultBean result = new ResultBean();
try {
String token=map.get("token").toString();
User user= (User) RedisCacheUtil.getCache(token);
List<Reseller> list=new ArrayList<Reseller>();//获取对象的集合
List<Map<String, Object>> arrayList = new ArrayList<Map<String, Object>>();//创建Map的集合,用来存放转换成表格的数据
if (user == null) {
result.setResultCode("-1");
result.setResultMsg("登录失效");
return result;
} else {
if (user.getTitle().equals("2")) {
list = resellerService.resellerList(null, user.getOrgId(), "2");
} else {
list = resellerService.resellerList(null, null, "1");
}
for (Reseller reseller : list) {//遍历集合
Map<String, Object> pram = new LinkedHashMap<String, Object>();//创建key对应的键值对
pram.put("公司名称", reseller.getCompanyName());
pram.put("公司详细地址", reseller.getAddress());
pram.put("联系人", reseller.getContact());
pram.put("联系方式", reseller.getTel());
pram.put("是否开设专卖店(0否1是)", reseller.getIsshop());
String dis = reseller.getControlDistrict();
StringBuilder sb = new StringBuilder();
if (StringUtils.isNotEmpty(dis)) {
if (dis.contains(",")) {
String[] sd = dis.split(",");
for (String sf : sd) {
District dt = districtMapper.selectByPrimaryKey(Integer.parseInt(sf));
sb.append(dt.getName() + ",");
}
} else {
District dt = districtMapper.selectByPrimaryKey(Integer.parseInt(dis));
sb.append(dt.getName());
}
}
pram.put("区域", sb);
pram.put("签约到期日", reseller.getContractDate());
pram.put("客户类型(经销商0、一般客户1)", reseller.getType());
arrayList.add(pram);
}
if (arrayList.size() > 0) {//装填完毕后,进入该方法
result=exportListData(arrayList,request);
} else {
result.setResultCode("-1");
result.setResultMsg("暂无数据");
return result;
}
}
return result;
} catch (Exception e) {
e.printStackTrace();
result.setResultCode("-1");
result.setResultMsg("异常");
return result;
}
}
/****
* 公用导出列表数据
* @param list 列表
*/
protected ResultBean exportListData(List<Map<String, Object>> list,HttpServletRequest request) {
ResultBean result=new ResultBean();
Set<String> keySet = list.get(0).keySet();//获取所有的key集合
String[] strArr = new String[keySet.size()];//转成数组
String[] array = keySet.toArray(strArr);
String filePath = request.getSession().getServletContext()
.getRealPath("/")
+ "upload/";
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + ".xls";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(new Date());
File f = new File(filePath.toString());
if (!f.exists()) {// 如果目标文件所在的目录不存在,则创建父目录
f.mkdirs();
}
f = new File(filePath+fileName);
OutputStream out = null;//创建流
try {
out = new FileOutputStream(f);
ImportExcel.exportExcel(array, list, out);
out.close();
result.setResultMsg("成功");
result.setResult("/upload/"+fileName);
result.setResultCode("0");
return result;
} catch (Exception e) {
result.setResultMsg("文件导出失败");
result.setResultCode("0");
return result;
}
}
/**
* 利用JAVA的反射机制,将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上<br>
* 用于单个sheet
*
* @param <T>
* @param headers 表格属性列名数组
* @param dataset 需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的
* javabean属性的数据类型有基本数据类型及String,Date,String[],Double[]
* @param out 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
*/
public static <T> void exportExcel(String[] headers, Collection<T> dataset, OutputStream out) {
exportExcel(headers, dataset, out, null);
}
/**
* 利用JAVA的反射机制,将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上<br>
* 用于单个sheet
*
* @param <T>
* @param headers 表格属性列名数组
* @param dataset 需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的
* javabean属性的数据类型有基本数据类型及String,Date,String[],Double[]
* @param out 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
* @param pattern 如果有时间数据,设定输出格式。默认为"yyy-MM-dd"
*/
public static <T> void exportExcel(String[] headers, Collection<T> dataset, OutputStream out,
String pattern) {
// 声明一个工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
// 生成一个表格
HSSFSheet sheet = workbook.createSheet();
write2Sheet(sheet, headers, dataset, pattern);
try {
workbook.write(out);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 每个sheet的写入
*
* @param sheet 页签
* @param headers 表头
* @param dataset 数据集合
* @param pattern 日期格式
*/
private static <T> void write2Sheet(HSSFSheet sheet, String[] headers, Collection<T> dataset,
String pattern) {
// 产生表格标题行
HSSFRow row = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
HSSFCell cell = row.createCell(i);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
// 遍历集合数据,产生数据行
Iterator<T> it = dataset.iterator();
int index = 0;
while (it.hasNext()) {
index++;
row = sheet.createRow(index);
T t = (T) it.next();
try {
if (t instanceof Map) {
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) t;
int cellNum = 0;
for (String k : headers) {
if (map.containsKey(k) == false) {//map中不存在key
continue;
}
Object value = map.get(k);
HSSFCell cell = row.createCell(cellNum);
cell.setCellValue(String.valueOf(value));
cellNum++;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 设定自动宽度
for (int i = 0; i < headers.length; i++) {
sheet.autoSizeColumn(i);
}
}保存代码,留着以后可能会用到;