概述
vue前端代码:file-saver - npm
index.js:
export function exportFile(data) {
return request({
url: '/url/export',
method: 'get',
params: data,
responseType: 'blob'
})
}
index.vue:
import FileSaver from 'file-saver'
import { exportFile } from '@/api/*****/url/index'
methods: {
// TODO 自定义字段导出 实例
exportQuery() {
let data = {};
data.headArray = ['项目名称','项目名称','项目名称','项目名称','项目名称'];
let list =[];
let list1 =[];
list1.push("项目名称-1");
list1.push("项目名称-2");
list1.push("项目名称-3");
list1.push("项目名称-4");
list1.push("项目名称-5");
let list2 =[];
list1.push("项目名称-1");
list1.push("项目名称-2");
list1.push("项目名称-3");
list1.push("项目名称-4");
list1.push("项目名称-5");
list.push(list1);
list.push(list2);
data.headArray = ['项目名称','项目名称','项目名称','项目名称','项目名称'];
data.dataList = list;
exportFile(data).then(response => {
const blob = new Blob([response])
FileSaver.saveAs(blob, 'XXXXX.xls')
})
},
}
后端Java代码:
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.2.0</version>
</dependency>
ExportEntity.java
import lombok.Data;
import java.util.List;
@Data
public class ExportEntity {
// 多个Sheet的数据
// List<List<List<String>>> dataLinesList;
List dataLinesList;
// 单个Sheet的数据
List<List<String>> dataList;
// head数据
String[] headArray;
// Sheet数据
String[] sheetArray;
}
ExportWordUtil.java
import cn.afterturn.easypoi.word.WordExportUtil;
import com.zzy.common.core.utils.StringUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* 动态生成exel,并导出
*/
public class ExportWordUtil {
public static void exportWordByImg(String fileName, Map<String, Object> params, HttpServletResponse response) {
try {
XWPFDocument doc = WordExportUtil.exportWord07("template/supervisionSheet.docx", params);
response.setCharacterEncoding("utf-8");
// 设置强制下载不打开
response.setContentType("application/force-download");
// 设置文件名
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); // + java.net.URLEncoder.encode(fileName));
OutputStream out = response.getOutputStream();
doc.write(out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 单个Sheet使用
*
* @param dataList 包裹每行数据的list
* @param headArray 自定义head
* @param response
*/
public static void createExcel(ExportEntity entity, HttpServletResponse response) {
String[] sheetArray = new String[]{"Sheet1"};
List list = new ArrayList();
list.add(entity.getDataList());
createExcel(list, entity.getHeadArray(), sheetArray, response);
}
/**
* 自定义多个Sheet的使用方法:
* String[] sheetArray = new String[]{"Sheet1", "Sheet2", "Sheet3"};
* List<List> list = new ArrayList();
* // Sheet1 的数据
* list.add(dataList);
* // Sheet2 的数据
* list.addAll(dataList);
* // Sheet3 的数据
* list.addAll(dataList);
* createExcel(list, headArray, sheetArray, response);
*
* @param dataList 多个Sheet数据
* @param headArray head数据
* @param sheetArray Sheet数据
* @param response
*/
public static void createExcel(List<List> dataList, String[] headArray, String[] sheetArray, HttpServletResponse response) {
try { // 创建excel工作簿
SXSSFWorkbook wb = new SXSSFWorkbook();
// 创建字体、可以设置样式
Font f = wb.createFont();
// 创建单元格格式、可以设置样式
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setBorderBottom(BorderStyle.THIN); //下边框
cellStyle.setBorderLeft(BorderStyle.THIN);//左边框
cellStyle.setBorderTop(BorderStyle.THIN);//上边框
cellStyle.setBorderRight(BorderStyle.THIN);//右边框
// 创建sheet
for (int n = 1; n <= sheetArray.length; n++) {
SXSSFSheet sheet = wb.createSheet(sheetArray[n - 1]);// 新创建一个sheet
// 创建一个sheet
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
for (int j = 0; j < headArray.length; j++) {
if (StringUtils.isEmpty(headArray[j])) {
continue;
}
// 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。
sheet.setColumnWidth(j, (45 * 150));
row.setHeight((short) (25 * 20));
cell = row.createCell(j);
cell.setCellValue(headArray[j]);
//水平居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
//垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cell.setCellStyle(cellStyle);
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");// 日期格式化
// 每一个sheet最大条数: 1048500
List list = dataList.get(n - 1);
for (int i = 0; i < list.size(); i++) {
row = sheet.createRow(i + 1);// 创建的行
Object obj = list.get(i);// 获得对象
if (obj instanceof Map) {
Map objMap = (Map) obj;
Set keys = objMap.keySet();
int j = 0;
for (Object objK : keys) {
cell = row.createCell(j);// 设置单元格(列)
j++;
Object value = objMap.get(objK);
// 获取属性的类型
String type = value.getClass().toString();
// 判断类型
if (value instanceof Date) {
cell.setCellValue(df.format(value));
cell.setCellStyle(cellStyle);
} else {
cell.setCellValue(value + "");
cell.setCellStyle(cellStyle);
}
}
} else if (obj instanceof List) {
List objList = (List) obj;
int j = 0;
for (Object objK : objList) {
cell = row.createCell(j);// 设置单元格(列)
j++;
Object value = objK + "";
// 判断类型
if (value instanceof Date) {
cell.setCellValue(df.format(value));
cell.setCellStyle(cellStyle);
} else {
cell.setCellValue(value + "");
cell.setCellStyle(cellStyle);
}
}
} else {
Field[] field = obj.getClass().getDeclaredFields();// 得到字段数组
int k = 0;
for (int j = 0; j < field.length; j++) {
if (Modifier.isStatic(field[j].getModifiers())) {
continue;
}
cell = row.createCell(k);// 设置单元格(列)
String name = field[j].getName();// 获得字段的名字
name = name.substring(0, 1).toUpperCase() + name.substring(1);
// 获取属性的类型
String type = field[j].getGenericType().toString();
// 判断类型
if (type.equals("class java.util.Date")) {
Method m = obj.getClass().getMethod("get" + name);// 通过get方式得到Method
Date value = (Date) m.invoke(obj);
if (StringUtils.isNotNull(value)) {
cell.setCellValue(df.format(value));
} else {
cell.setCellValue("");
}
cell.setCellStyle(cellStyle);
}
if (type.equals("class java.lang.String")) {
Method m = obj.getClass().getMethod("get" + name);
// 调用getter方法获取属性值
String value = (String) m.invoke(obj);
cell.setCellValue(value);
cell.setCellStyle(cellStyle);
}
if (type.equals("class java.lang.Integer")) {
Method m = obj.getClass().getMethod("get" + name);
Integer value = (Integer) m.invoke(obj);
cell.setCellValue(value);
cell.setCellStyle(cellStyle);
}
if (type.equals("class java.lang.Short")) {
Method m = obj.getClass().getMethod("get" + name);
Short value = (Short) m.invoke(obj);
cell.setCellValue(value);
cell.setCellStyle(cellStyle);
}
if (type.equals("class java.lang.Double")) {
Method m = obj.getClass().getMethod("get" + name);
Double value = (Double) m.invoke(obj);
cell.setCellValue(value);
cell.setCellStyle(cellStyle);
}
if (type.equals("class java.lang.Boolean")) {
Method m = obj.getClass().getMethod("get" + name);
Boolean value = (Boolean) m.invoke(obj);
cell.setCellValue(value);
cell.setCellStyle(cellStyle);
}
k++;
}
}
}
}
response.setCharacterEncoding("utf-8");
// 设置强制下载不打开
response.setContentType("application/force-download");
// 设置文件名
response.addHeader("Content-Disposition", "attachment;fileName=test.xls"); // + java.net.URLEncoder.encode(fileName));
OutputStream out = response.getOutputStream();
wb.write(out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
最后
以上就是唠叨小丸子为你收集整理的JAVA-动态导出Excel(自定义sheet,head)的全部内容,希望文章能够帮你解决JAVA-动态导出Excel(自定义sheet,head)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复