问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请问poi导出excel为什么没有下载提示?没有报错

发布网友 发布时间:2022-04-22 15:53

我来回答

1个回答

热心网友 时间:2023-10-03 01:46

额,不太清除你怎么写,说下我的步骤吧,

jsp页面中,给个按钮,点击按钮后调用action中的方法

action中:

首先 List<Student> students ,这个是你需要导出的数据

然后调用service中的方法:

try{
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response =ServletActionContext.getResponse();
studentService.exportExcel(students, request, response);
}catch(Exception e){
GeneralExceptionHandler.handle(e);
}

service 中:

public void exportExcel(List<Student> students,
HttpServletRequest request, HttpServletResponse response) {

ExportExcel<Student> exportExcel = new ExportExcel<Student>();
//工作薄名称
String title = "工作薄名";
//标题行
String[] headers = { "学号", "姓名", "性别", "出生日期", "班级"};

//文件名
String fileName = "Student.xls";

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

//设置对话框
response.setHeader("Content-disposition", "attachment;filename="+ new String(fileName.getBytes("GB2312"),"ISO-8859-1"));
//设置 MIME(Excel)
response.setContentType("application/vnd.ms-excel");
//设置编码
response.setCharacterEncoding("UTF-8");

//执行导出Excel
exportExcel.exportExcel(title, headers, students, os);

//关闭输入输出流
os.flush();
os.close();

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

导出Excel 的类,这里用了泛型 , 这个类在网上很好找到的。

public class ExportExcel<T> {
public void exportExcel(String title, String[] headers,
List<T> dataset, OutputStream out) {
// 声明一个工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
// 生成一个表格
HSSFSheet sheet = workbook.createSheet(title);
// 设置表格默认列宽度为15个字节
sheet.setDefaultColumnWidth((short) 15);
// 生成一个样式
HSSFCellStyle style = workbook.createCellStyle();
// 设置这些样式
style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 生成一个字体
HSSFFont font = workbook.createFont();
font.setColor(HSSFColor.VIOLET.index);
font.setFontHeightInPoints((short) 12);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 把字体应用到当前的样式
style.setFont(font);
// 生成并设置另一个样式
HSSFCellStyle style2 = workbook.createCellStyle();
style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 生成另一个字体
HSSFFont font2 = workbook.createFont();
font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
// 把字体应用到当前的样式
style2.setFont(font2);

// 声明一个画图的顶级管理器
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
// 定义注释的大小和位置,详见文档
HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0,
0, 0, 0, (short) 4, 2, (short) 6, 5));
// 设置注释内容
comment.setString(new HSSFRichTextString("可以在POI中添加注释!"));
// 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容.
comment.setAuthor("leno");

// 产生表格标题行
HSSFRow row = sheet.createRow(0);
for (short i = 0; i < headers.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(style);
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();
// 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
Field[] fields = t.getClass().getDeclaredFields();
for (short i = 0; i < fields.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(style2);
Field field = fields[i];
String fieldName = field.getName();
String getMethodName = "get"
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);
try {
Class tCls = t.getClass();
Method getMethod = tCls.getMethod(getMethodName,
new Class[] {});
Object value = getMethod.invoke(t, new Object[] {});
// 判断值的类型后进行强制类型转换
String textValue = null;
if (value instanceof Boolean) {
boolean bValue = (Boolean) value;
textValue = "男";
if (!bValue) {
textValue = "女";
}
} else if (value instanceof Date) {
Date date = (Date) value;
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
textValue = sdf.format(date);
} else if (value instanceof byte[]) {
// 有图片时,设置行高为60px;
row.setHeightInPoints(60);
// 设置图片所在列宽度为80px,注意这里单位的一个换算
sheet.setColumnWidth(i, (short) (35.7 * 80));
// sheet.autoSizeColumn(i);
byte[] bsValue = (byte[]) value;
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0,
1023, 255, (short) 6, index, (short) 6, index);
anchor.setAnchorType(2);
patriarch.createPicture(anchor, workbook.addPicture(
bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));
} else {
// 其它数据类型都当作字符串简单处理
textValue = value.toString();
}
// 如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成
if (textValue != null) {
Pattern p = Pattern.compile("^//d+(//.//d+)?$");
Matcher matcher = p.matcher(textValue);
if (matcher.matches()) {
// 是数字当作double处理
cell.setCellValue(Double.parseDouble(textValue));
} else {
HSSFRichTextString richString = new HSSFRichTextString(
textValue);
HSSFFont font3 = workbook.createFont();
font3.setColor(HSSFColor.BLUE.index);
richString.applyFont(font3);
cell.setCellValue(richString);
}
}
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 清理资源
}
}

}
try {
workbook.write(out);
} catch (IOException e) {
e.printStackTrace();
}

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
大学入学应该带哪些必备物品? tim删除聊天记录的方法步骤 pc端彻底删除tim聊天记录 甩脂机调到什么档位 如何用甩脂机 甩脂机的正确使用方法 使用抖脂机要注意什么 怎样申请小号微信号 ...的长和宽分别增加6米,扩建后草坪的面积增加了多少 ...扩建后长和宽分别增加10米,扩建后的操场面积增加了多少平方米?_百 ... 长方形的公园它的面积长和宽分别扩大十米后它的平方增加了面积增加了13... Java的POI设置列宽setColumnWidth(参数),参数单元是什么,80像素如何计算,求公式?? poi生成excel,怎样设置表格无边框 喜欢拍照摄影用的,哪款手机性价比高呀? excel单元格宽度设置 如何利用poi对excel里的某一列的宽度进行设 如何利用poi对excel里的某一列的宽度进行设定 华为哪款手机性价比高 最好拍照好的 华为手机拍照好的有哪几款? 手机与打印服务 养猪不是随便就能养成的,五点告诉你如何科学养猪 如何科学养猪 怎么样高效养猪? ipad打不开校园网登录界面 IPad无法登陆校园网 我的ipad文件夹在哪里 ipadair3不弹出校园网认证 如果在工作想要提升学历,怎样找到靠谱的机构报名? 学历提升有必要报机构吗? 学历提升教育机构靠谱吗? poi中把一个sheet移到另一个workbook中 怎么实现? java web poi如何按查询结果导出相应的Excel java web poi如何按查询结果导出相应的Excel 自家的果园上抖音了,怎么发圈形容 兔子可以吃水果吗 404 Not Found 宝盖头(宀)怎么读? 吃水果可以减肥么? 马陵之战简介50字,加分析 马陵之战的历史故事中马陵失利的原因是什么 简要介绍桂陵之战.马陵之战和长平之战等著名战役 作文:读《马陵之战》有感 简要介绍桂陵之战马陵之战和长平之战等著名 马陵之战对魏国的霸业产生了哪些深远的影响? 桂陵之战和马陵之战在历史上真的存在吗? 列举春秋战国时期著名的战役 iPad pro 突然毫无反应了,是什么原因 马陵之战和桂陵之战是一样的吗? ipadpro锁屏键失灵 介绍一下长平之战,桂陵之战,马陵之战