将数据库中表生成excel


依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10-FINAL</version>
</dependency>

/**
* 生成Excel表
* @param response
* @param dataList 表格数据
* List<String[]> dataList = new ArrayList<>();
* List<Map<String, Object>> results = service.findAll();
* for (Map<String, Object> result : results) {
* String[] data = new String[header.length];
*
* for (int i = 0; i < header.length; i++) {
* if (result.get(header[i]) != null)
* //一行中所有单元格数据
* data[i] = result.get(header[i]).toString();
* }
* dataList.add(data);
*
* }
* @param header 表头
* @param name 表名
* @throws IOException
*/
public void writeToExcel(HttpServletResponse response, List<String[]> dataList, String[] header,String name) throws IOException{

//声明一个工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFCellStyle style = workbook.createCellStyle();

//生成一个表格,设置表格名称为"UserData"
HSSFSheet sheet = workbook.createSheet(name);

//设置表格列宽度为10个字节
sheet.setDefaultColumnWidth(10);

//创建第一行表头
HSSFRow headrow = sheet.createRow(0);

// 遍历添加表头
for (int i = 0; i < header.length; i++) {
//创建一个单元格

HSSFCell cell = headrow.createCell(i);

//创建一个内容对象
HSSFRichTextString text = new HSSFRichTextString(header[i]);

//将内容对象的文字内容写入到单元格中
cell.setCellValue(text);
}

//模拟遍历结果集,把内容加入表格
int temp = 1;
for (String[] data : dataList) {
HSSFRow row = sheet.createRow(temp++);
for (int i = 0; i < data.length; i++) {
HSSFCell cell = row.createCell(i);
HSSFRichTextString text = new HSSFRichTextString(data[i]);
cell.setCellValue(text);
}

}


//准备将Excel的输出流通过response输出到页面下载
//八进制输出流
response.setContentType("application/octet-stream");

//这后面可以设置导出Excel的名称,此例中名为userData.xls
response.setHeader("Content-disposition", "attachment;filename="+name+".xls");

//刷新缓冲
response.flushBuffer();

//workbook将Excel写入到response的输出流中,供页面下载
workbook.write(response.getOutputStream());
}
posted @     阅读(117)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示