java导出ecxel

@Override
public void exportFile(String catalogIds,HttpServletResponse response) {
 String fileName = "导出文件信息列表.xls";
 try {
 this.setResponseHeader(response, fileName);
 OutputStream os = response.getOutputStream();
 ExportExcelUtil eeu = new ExportExcelUtil();
 HSSFWorkbook workbook = new HSSFWorkbook();
 List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
 // 截取;之前的字符串
 String fileIds = catalogIds.substring(0, catalogIds.indexOf(";"));
 if(!fileIds.equals("") && fileIds != null) {// 判断是否选择了文件选择的话进行打包压缩下载否则不执行
  String[] fileIdsArray = fileIds.split(",");
  for(int j = 0; j < fileIdsArray.length; j++) {
   List<Map<String, Object>> map=catalogMapper.exportFiles(fileIdsArray[j]);
   resultList.addAll(map);
  }

 }

 // 截取;之后的字符串
 String muluIds = catalogIds.substring(fileIds.length() + 1, catalogIds.length());
 if(!muluIds.equals("") && muluIds != null) {
  String [] muluIdsArray = muluIds.split(",");
  for(int i = 0; i < muluIdsArray.length; i++) {
   List<Map<String, Object>> map=catalogMapper.exportFolders(muluIdsArray[i]);
   resultList.addAll(map);
  }

 }
 if (Objects.nonNull(resultList)&&resultList.size() > 0) {
  String a="文件名,文件路径,大小,上传人,上传时间";
  String b="catalogName,catalogPath,fileSize,uploadUser,uploadTime";
  String[] headers =a.split(",");
  String[] columns = b.split(",");
  String[][] content = new String[resultList.size()][headers.length];
  for (int i = 0; i < resultList.size(); i++) {
   content[i] = new String[headers.length];
   for (int j = 0; j <columns.length;j++ ) {
    content[i][j] = Objects.isNull(resultList.get(i).get(columns[j]))?null:resultList.get(i).get(columns[j]).toString();
   }
  }

  eeu.exportExcel(workbook, 0,"文件信息", headers, content, os);
 }
  workbook.write(os);
  os.flush();
  os.close();
 } catch (IOException e) {
  e.printStackTrace();
 } catch (Exception e) {
  e.printStackTrace();
 }

}
//发送响应流方法
public void setResponseHeader(HttpServletResponse response, String fileName) {
 try {
  response.setContentType("application/octet-stream");
  String file_name = URLEncoder.encode(fileName, "UTF-8");
  response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
  response.setHeader("Content-disposition", "attachment;filename=" + file_name);
 } catch (Exception ex) {
  ex.printStackTrace();
 }
}

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
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.hssf.util.HSSFColor;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.core.io.ClassPathResource;

/**
 * ExportExcelUtil<br>
 *
 * @author lijianjun <br>
 * @time 2021/12/6 16:23 <br>
 */
public class ExportExcelUtil {

    /**
     *
     * @param title 标题
     * @param headers  表头
     * @param values  表中元素
     * @return
     */
    public static HSSFWorkbook getHSSFWorkbook(String title, String headers[], String[][] values){

        //创建一个HSSFWorkbook,对应一个Excel文件
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();

        //在workbook中添加一个sheet,对应Excel文件中的sheet
        HSSFSheet hssfSheet = hssfWorkbook.createSheet(title);
        //创建标题合并行
        hssfSheet.addMergedRegion(new CellRangeAddress(0,(short)0,0,(short)headers.length - 1));

        //设置标题样式
        HSSFCellStyle style = hssfWorkbook.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);   //设置居中样式
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        //设置标题字体
        Font titleFont = hssfWorkbook.createFont();
        titleFont.setFontHeightInPoints((short) 28);
        style.setFont(titleFont);

        //设置值表头样式 设置表头居中
        HSSFCellStyle hssfCellStyle = hssfWorkbook.createCellStyle();
        hssfCellStyle.setAlignment(HorizontalAlignment.CENTER);   //设置居中样式
        hssfCellStyle.setBorderBottom(BorderStyle.THIN);
        hssfCellStyle.setBorderLeft(BorderStyle.THIN);
        hssfCellStyle.setBorderRight(BorderStyle.THIN);
        hssfCellStyle.setBorderTop(BorderStyle.THIN);
        Font titleFont0 = hssfWorkbook.createFont();
        titleFont0.setFontHeightInPoints((short) 20);
        hssfCellStyle.setFont(titleFont0);

        //设置表内容样式
        //创建单元格,并设置值表头 设置表头居中
        HSSFCellStyle style1 = hssfWorkbook.createCellStyle();
        style1.setAlignment(HorizontalAlignment.RIGHT);
        style1.setBorderBottom(BorderStyle.THIN);
        style1.setBorderLeft(BorderStyle.THIN);
        style1.setBorderRight(BorderStyle.THIN);
        style1.setBorderTop(BorderStyle.THIN);
        Font titleFont1 = hssfWorkbook.createFont();
        titleFont1.setFontHeightInPoints((short) 16);
        style1.setFont(titleFont1);
        style1.setWrapText(true);

        //产生标题行
        HSSFRow hssfRow = hssfSheet.createRow(0);
        HSSFCell cell = hssfRow.createCell(0);
        cell.setCellValue(title);
        cell.setCellStyle(style);



        //产生表头
        HSSFRow row1 = hssfSheet.createRow(1);
        for (int i = 0; i < headers.length; i++) {
            HSSFCell hssfCell = row1.createCell(i);
            hssfCell.setCellValue(headers[i]);
            hssfCell.setCellStyle(hssfCellStyle);
        }

        //创建内容
        for (int i = 0; i <values.length; i++){
            row1 = hssfSheet.createRow(i +2);
            for (int j = 0; j < values[i].length; j++){
                //将内容按顺序赋给对应列对象
                HSSFCell hssfCell = row1.createCell(j);
                hssfCell.setCellValue(values[i][j]);
                hssfCell.setCellStyle(style1);
                hssfSheet.setColumnWidth(i,values[i][j].getBytes().length*256+4000>15000?15000:values[i][j].getBytes().length*256+4000);
            }
            row1.setHeightInPoints(20);

        }
        return hssfWorkbook;
    }


    /**
     * @Title: exportExcel
     * @Description: 导出Excel的方法
     * @param workbook
     * @param sheetNum (sheet的位置,0表示第一个表格中的第一个sheet)
     * @param sheetTitle  (sheet的名称)
     * @param headers    (表格的标题)
     * @param values   (表格的数据)
     * @param out  (输出流)
     * @throws Exception
     */
    public Boolean exportExcel(HSSFWorkbook workbook, int sheetNum,
                               String sheetTitle, String[] headers, String[][] values,
                               OutputStream out) {
        Boolean res = false ;
        try{
            // 生成一个表格
            HSSFSheet sheet = workbook.createSheet();
            workbook.setSheetName(sheetNum, sheetTitle);
            // 设置表格默认列宽度为20个字节
            sheet.setDefaultColumnWidth((short) 20);
            // 生成一个样式
            CellStyle style = workbook.createCellStyle();
            // 设置这些样式
            style.setAlignment(HorizontalAlignment.CENTER);
            style.setVerticalAlignment(VerticalAlignment.CENTER);
            style.setBorderRight(BorderStyle.THIN);
            style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
            style.setBorderLeft(BorderStyle.THIN);
            style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
            style.setBorderTop(BorderStyle.THIN);
            style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
            style.setBorderBottom(BorderStyle.THIN);
            style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
            style.setFillForegroundColor(HSSFColor.GREY_40_PERCENT.index);
            style.setFillPattern(FillPatternType.SOLID_FOREGROUND);


            HSSFCellStyle style1 = workbook.createCellStyle();
            style1.setAlignment(HorizontalAlignment.RIGHT);
            style1.setBorderBottom(BorderStyle.THIN);
            style1.setBorderLeft(BorderStyle.THIN);
            style1.setBorderRight(BorderStyle.THIN);
            style1.setBorderTop(BorderStyle.THIN);
            Font titleFont1 = workbook.createFont();
            titleFont1.setFontHeightInPoints((short) 14);
            style1.setFont(titleFont1);
            style1.setWrapText(true);


            // 生成一个字体
            Font headerFont = workbook.createFont();
            headerFont.setFontName("Arial");
            headerFont.setFontHeightInPoints((short) 18);
            headerFont.setBold(true);
            headerFont.setColor(IndexedColors.WHITE.getIndex());
            // 把字体应用到当前的样式
            style.setFont(headerFont);

            // 指定当单元格内容显示不下时自动换行
            style.setWrapText(true);

            // 产生表格标题行
            HSSFRow row = sheet.createRow(0);
            for (int i = 0; i < headers.length; i++) {
                HSSFCell cell = row.createCell((short) i);

                cell.setCellStyle(style);
                HSSFRichTextString text = new HSSFRichTextString(headers[i]);
                cell.setCellValue(text.toString());
            }
            /*// 遍历集合数据,产生数据行
            if (result != null) {
                int index = 1;
                for (List<String> m : result) {
                    row = sheet.createRow(index);
                    int cellIndex = 0;
                    for (String str : m) {
                        HSSFCell cell = row.createCell((short) cellIndex);
                        cell.setCellValue(str.toString());
                        cellIndex++;
                    }
                    index++;
                }
            }*/

            //创建内容
            for (int i = 0; i <values.length; i++){
                row = sheet.createRow(i +1);
                for (int j = 0; j < values[i].length; j++){
                    //将内容按顺序赋给对应列对象
                    HSSFCell hssfCell = row.createCell(j);
                    hssfCell.setCellValue(values[i][j]);
                    hssfCell.setCellStyle(style1);
                    //sheet.setColumnWidth(i, Objects.isNull(values[i][j])?50:values[i][j].getBytes().length*256+4000>15000?15000:values[i][j].getBytes().length*256+4000);
                    //sheet.setColumnWidth(i,15000);
                }
                row.setHeightInPoints(20);

            }

            res = true;
        }catch (Exception e){
            e.printStackTrace();
        }
        return res;
    }


    public static SXSSFWorkbook createTemplate(String sheetName, int titleColumnNumber, String titleName, List<String> columnNameList) {
        SXSSFWorkbook workbook = new SXSSFWorkbook();
        SXSSFSheet sheet = workbook.createSheet(sheetName);
        sheet.setDefaultColumnWidth(18);
        CellStyle style = workbook.createCellStyle();
        if (titleColumnNumber > 1) {
            sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, titleColumnNumber));
        }

        SXSSFRow rowTitle = sheet.createRow(0);
        style.setAlignment(HorizontalAlignment.LEFT);
        SXSSFCell titleCell = rowTitle.createCell(0);
        titleCell.setCellValue(titleName);
        CellStyle titleStyle = getCellStyle(workbook);
        titleCell.setCellStyle(titleStyle);
        Font titleFont = workbook.createFont();
        titleFont.setFontHeightInPoints((short)20);
        titleFont.setBold(true);
        titleStyle.setFont(titleFont);
        if (CollectionUtils.isNotEmpty(columnNameList)) {
            CellStyle columnTitleStyle = getCellStyle(workbook);
            Font columnTitleFont = workbook.createFont();
            columnTitleFont.setFontHeightInPoints((short)12);
            columnTitleFont.setBold(true);
            columnTitleStyle.setFont(columnTitleFont);
            SXSSFRow row = sheet.createRow(1);

            for(int i = 0; i < columnNameList.size(); ++i) {
                SXSSFCell columnCell = row.createCell(i);
                columnCell.setCellValue((String)columnNameList.get(i));
                columnCell.setCellStyle(columnTitleStyle);
            }
        }

        return workbook;
    }

    private static CellStyle getCellStyle(SXSSFWorkbook workbook) {
        CellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setAlignment(HorizontalAlignment.CENTER_SELECTION);
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        cellStyle.setBorderBottom(BorderStyle.THIN);
        cellStyle.setBorderLeft(BorderStyle.THIN);
        cellStyle.setBorderRight(BorderStyle.THIN);
        cellStyle.setBorderTop(BorderStyle.THIN);
        return cellStyle;
    }

    public static Workbook getWorkbook(String excelName) {
        Workbook workbook = null;
        ClassPathResource classPathResource = new ClassPathResource("excel/" + excelName);

        try {
            InputStream io = classPathResource.getInputStream();
            workbook = WorkbookFactory.create(io);
        } catch (IOException var4) {
            var4.printStackTrace();
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        }

        return workbook;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值