java excel导出并下载

本文介绍了一个用于Java项目的Excel导出工具类实现方法。该工具类能够将数据集转换为Excel文件,并支持自定义标题及列宽设置等功能。通过简单的参数配置即可完成Excel表格的创建与导出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用时,直接传递参数并调用该方法即可

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.Region;

public class excelUtil {

 /**
  *  excel 导出
  * @param excelName  文件名称
  * @param title   表名称
  * @param dataList  表格数据
  * @param titleList  表头名称
  * @param header   表头的map键值
  * @param response 
  */
 @SuppressWarnings("deprecation")
 public static void exportExcelWithTitle(String excelName, String title,
   List<Map<String, Object>> dataList, List<String> titleList,
   List<String> header,HttpServletResponse response){
  
     OutputStream out = null;
     try {
       HSSFWorkbook workbook = new HSSFWorkbook();
       HSSFSheet sheet = workbook.createSheet();
       for (int i = 0; i < titleList.size(); i++)
       {
         sheet.setColumnWidth(i, String.valueOf(titleList.get(i)).getBytes().length * 2 * 256);
       }
       HSSFRow row = null;

       HSSFCellStyle style = workbook.createCellStyle();
       style.setAlignment((short)2);

       row = sheet.createRow(0);
       sheet.addMergedRegion(new Region(0, (short)0, 0, (short)(header.size()-1)));
       HSSFCell cell1 = row.createCell((short)0);
       cell1.setCellStyle(style);
       cell1.setCellValue(title);

       row = sheet.createRow(1);

       createTitle(row, titleList);

       Map<String, Object> dMap = null;

       for (int i = 0; i < dataList.size(); i++) {
         dMap = (Map)dataList.get(i);
         row = sheet.createRow(i + 2);
         HSSFCell cell = null;
         int col = 0;

         for (int j = 0; j < header.size(); j++) {
           cell = row.createCell(col++);
           cell.setCellValue(
             dMap.get(header.get(j)) == null ? "--" : dMap.get(header.get(j)).toString());
         }

       }

       ByteArrayOutputStream baos = new ByteArrayOutputStream();
       workbook.write(baos);
       byte[] data = baos.toByteArray();
       if (data != null) {
         response.reset();
         response.setContentType("application/x-download;charset=UTF-8");
         response.setHeader("Content-Disposition",
           "attachment;filename=" + URLEncoder.encode(excelName, "UTF-8"));
         out = new BufferedOutputStream(response.getOutputStream());
         out.write(data);
         out.flush();
         out.close();
       }
     }
     catch (IOException e) {
       e.printStackTrace();

       if (out != null)
         try {
           out.close();
         } catch (IOException e2) {
          e2.printStackTrace();
         }
     }
     finally
     {
       if (out != null)
         try {
           out.close();
         } catch (IOException e) {
         }
     }
   }
 
 public static void createTitle(HSSFRow row, List<String> pros){
     HSSFCell cell = null;
     for (int i = 0; i < pros.size(); i++) {
       cell = row.createCell(i);
       cell.setCellType(1);
       cell.setCellValue((String)pros.get(i));
     }
   }
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值