数据使用Excel导出下载

此方法导出格式为xls

前端使用a标签链接实现

使用button按钮利用ajax传递请求时会报错,这里需要注意,此问题后期探讨,具体实现方式后期更新再议

Excel导出工具类

public class ExcelUploadUtil {

static final short borderpx = 1;

/**
* 导出excel表格
* @param head 表头
* @param body 数据信息
* @return
*/
public static HSSFWorkbook expExcel(List<String> head, List<List<String>> body) {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Sheet1");
HSSFRow row = sheet.createRow(0);
HSSFCell cell= null;
HSSFCellStyle cellStyle = workbook.createCellStyle();
setBorderStyle(cellStyle, borderpx);
cellStyle.setFont(setFontStyle(workbook, "黑体", (short) 14));
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
sheet.createFreezePane(0,1,0,1);
for (int i = 0; i<head.size(); i++) {
cell = row.createCell(i);
cell.setCellValue(head.get(i));
cell.setCellStyle(cellStyle);
}
HSSFCellStyle cellStyle2 = workbook.createCellStyle();
setBorderStyle(cellStyle2, borderpx);
cellStyle2.setFont(setFontStyle(workbook, "宋体", (short) 12));
cellStyle2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
for (int i = 0; i < body.size(); i++) {
row = sheet.createRow(i + 1);
List<String> paramList = body.get(i);
for (int p = 0; p < paramList.size(); p++) {
cell = row.createCell(p);
cell.setCellValue(paramList.get(p));
cell.setCellStyle(cellStyle2);
}
}
for (int i = 0, isize = head.size(); i < isize; i++) {
sheet.autoSizeColumn(i);
}
return workbook;
}

/**
* 文件输出
* @author xwang
* @param workbook 填充好的workbook
* @param path 存放的位置
*/
public static void outFile(HSSFWorkbook workbook,String path,HttpServletResponse response) {
SimpleDateFormat fdate=new SimpleDateFormat("yyyyMMdd-HH点mm分");
path = path.substring(0, path.lastIndexOf(".")) + fdate.format(new Date()) + path.substring(path.lastIndexOf("."));
OutputStream os=null;
File file = null;
try {
file = new File(path);
String filename = file.getName();
os = new FileOutputStream(file);
response.addHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(filename, "UTF-8"));
os= new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/vnd.ms-excel;charset=utf-8");
workbook.write(os);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
os.flush();
os.close();
System.gc();
System.out.println(file.delete());
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 设置字体样式
* @author xwang
* @param workbook 工作簿
* @param name 字体类型
* @param height 字体大小
* @return HSSFFont
*/
private static HSSFFont setFontStyle(HSSFWorkbook workbook, String name, short height) {
HSSFFont font = workbook.createFont();
font.setFontHeightInPoints(height);
font.setFontName(name);
return font;
}

/**
* 设置单元格样式
* @author xwang
* @param cellStyle 工作簿
* @param border border样式
*/
private static void setBorderStyle(HSSFCellStyle cellStyle, short border) {
cellStyle.setBorderBottom(border); // 下边框
cellStyle.setBorderLeft(border);// 左边框
cellStyle.setBorderTop(border);// 上边框
cellStyle.setBorderRight(border);// 右边框
}

}

Controller类

@RequestMapping("/excelUpload")
public void testExcel2(HttpServletResponse response){
//调用service层方法查询出需要导出的数据
List<Student> lisx=studentService.selectList(null);
for (Student s:lisx
) {
System.err.println("excelUpload:"+s);
}
//创建表数据头
List<String> head = new ArrayList<>();
head.add("学号");
head.add("姓名");
head.add("学校");
head.add("考场");
//创建表体
List<List<String>> body = new ArrayList<>();
for (Student stu : lisx) {
List<String> bodyValue = new ArrayList<>();
bodyValue.add(String.valueOf(stu.getId()));
bodyValue.add(stu.getName());
bodyValue.add(stu.getSchoolName());
bodyValue.add(String.valueOf(stu.getSeatNumber()));
//将数据添加到表体中
body.add(bodyValue);
}

//Excel表格表名
String fileName = "学生信息统计.xls";
HSSFWorkbook excel = ExcelUploadUtil.expExcel(head,body);
ExcelUploadUtil.outFile(excel,"./"+fileName,response);

}

原文地址:https://www.cnblogs.com/xiaowangxiao/p/11055572.html

时间: 2024-10-12 21:02:22

数据使用Excel导出下载的相关文章

利用Aspose.Cells完成easyUI中DataGrid数据的Excel导出功能

我准备在项目中实现该功能之前,google发现大部分代码都是利用一般处理程序 HttpHandler实现的服务器端数据的Excel导出,但是这样存在的问题是ashx读取的数据一般都是数据库中视图的数据,难免会含有方便操作的 主键ID这列的记录.现在项目需要在easyUI的DataGrid中显示的数据能全部导出Excel,包括DataGrid中的中文标题,其他的统统不 要. 完成该功能所需的工具和环境:Newtonsoft.Json序列化和反序列化类库.easyUI前端UI框架.HttpHandl

数据库数据用Excel导出的3种方法

将数据库数据用Excel导出主要有3种方法:用Excel.Application接口.用OleDB.用HTML的Tabel标签 方法1——Excel.Application接口: 首先,需要要Excel.dll这个文件,确保自身机器上装有MS Office,在Office安装目录(../Microsoft Office/OFFICE11/,具体目录取决于自己的安装)中找到Excel.exe,然后放在(../Microsoft Visual Studio 8/SDK/v2.0/Bin)目录中,在C

关于数据筛选后Excel导出下载

2016.5.11 二种方法: 前台筛选器 1.生成文件流下载 ①后台接受form表单,拼接sql public void Down(StudentI i, int Status = 0) { List<string> ls = new List<string>(); List<SqlParameter> lp = new List<SqlParameter>(); if (i.RecommName != null) { ls.Add("[emai

Django+python实现网页数据的excel导出

一直都想做一个网页的excel导出功能,最近抽时间研究了下,使用urllib2与BeautifulSoup及xlwt模块实现 urllib2这个模块之前有用过,关于BeautifulSoup模块,可参看http://www.bkjia.com/Pythonjc/992499.html  ,介绍的比较详细. 如下是部分视图代码: 首先使用urlopen解析网页数据 urlfile = urllib2.urlopen('要解析的url地址')html = urlfile.read() 创建Beaut

java SSM框架下实现数据EXCEL导出下载功能

最近公司项目有个需求,是导出列表中的数据并下载.如下图所示的列表数据,并且该数据不是一个表里的数据. -------------------------------------------------华丽的分割线------------------------------------------------------------------------------------------------------实现步骤如下:本项目实现环境为maven项目1.引入jia包: 2.拷贝Export

关于poi导出大数据量EXCEL导出缓慢的解决方案--生成xml格式的表格文件

今天遇到了一个POI导出EXCEL文件结果文件大小太大导致系统运行缓慢的问题.想到了使用输出XML格式的表格来完成. 首先,我们需要理解一下为什么POI导出EXCEL文件会导致文件大小变大.最主要的原因应该是POI变成中经常会对无关的单元格设置属性.例如:一个EXCEL工作表的最大列数为256,我们只使用10列.而编程时经常会将256列全部渲染格式,造成很大的资源浪费.当然应该还有其他很多原因也会造成表格变大. 使用这个方案的前提是对于表格的格式要求不高,因为使用的是自己的工具,没有POI优化了

c#将数据写入excel导出

1.项目添加引用NPOI包. 2.尝试写一行数据写到excel中并导出. public static void ExcelTest() { //导出:将数据库中的数据,存储到一个excel中 //1.查询数据库数据 //2. 生成excel //2_1.生成workbook //2_2.生成sheet //2_3.遍历集合,生成行 //2_4.根据对象生成单元格 HSSFWorkbook workbook = new HSSFWorkbook(); //创建工作表 var sheet = wor

PHP 从mysql库里取出大量数据写入excel压缩下载

$zip = new ZipArchive;if ($zip->open($filePath . date('Ymd') . '.zip',ZipArchive::OVERWRITE) === TRUE) { $count = $this->mod->getCount($cond); $num = ceil($count/5000);  //取整5000 余数进1 $z = 0; for ($j=0;$j<$num;$j++) { $limit = $j*5000; //每次查询5

.NET使用Office Open XML导出大量数据到 Excel

我相信很多人在做项目的都碰到过Excel数据导出的需求,我从最开始使用最原始的HTML拼接(将需要导出的数据拼接成TABLE标签)到后来happy的使用开源的NPOI, EPPlus等开源组件导出EXCEL,但不久前,我在一个项目碰到一个需求:要将几个分别有近60多万的数据源导出到Excel中,我们先不要讨论这个需求本身是否合理,客户就是要这样.我先后用NPOI和EPPlus,都发现同一个问题:OutOfMemoryException,我电脑12G内存居然不够用? 的确内存溢出了,但内存还剩下好