JAVA导出Excel(支持多sheet)

一、批量导出:

/**
     *
     * @Title: expExcel
     * @Description: 批量导出客户信息
     * @param @param params
     * @param @param request
     * @param @param response
     * @param @throws Exception
     * @return void
     * @throws
     */
    @RequestMapping("expExcel")
    public void expExcel(QueryCustomParam params,HttpServletRequest request,HttpServletResponse response) throws Exception{

        User u = getUser(request.getSession());//SessionUtils.getUser(request.getSession());

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd hh:mm");

        //获取网站部署路径(通过ServletContext对象),用于确定下载文件位置,从而实现下载
        String path = request.getServletContext().getRealPath("/");  

        List<CustomResp> list = null;
        List<ContactsResp> list2 = null;
        String fileName = "我的客户导出";
        String url = path + "download\\" + fileName + ".xls";

        params.setEmpIds(String.valueOf(u.getEmpId()));
        QueryContactsParam params2 = new QueryContactsParam();
        params2.setEmpId(Long.valueOf(u.getEmpId()));
        params2.setCorpId(Long.valueOf(u.getCorpId()));
        params2.setFlag("4");

        try {  

            list = customService.selectMyCustom(params); //我的客户
            list2 = contactsService.selectContactsList(params2); //查询我的客户包含的所有联系人信息

            //数据
            List<String[]> dataset = new ArrayList<String[]>();
            for (int i = 0; i < list.size(); i++) {
                String[] arr = new String[16];
                arr[0] = list.get(i).getName()==null ? "" : list.get(i).getName().toString();
                arr[1] = list.get(i).getShortName()==null ? "" : list.get(i).getShortName().toString();
                arr[2] = list.get(i).getNumber()==null ? "" : list.get(i).getNumber().toString();
                arr[3] = list.get(i).getAddress()==null ? "" : list.get(i).getAddress().toString();
                arr[4] = list.get(i).getUrl()==null ? "" : list.get(i).getUrl().toString();
                arr[5] = list.get(i).getDescription()==null ? "" : list.get(i).getDescription().toString();
                arr[6] = list.get(i).getHighseasName()==null ? "" : list.get(i).getHighseasName().toString();
                arr[7] = list.get(i).getHighseasDate()==null ? "" : sdf2.format(list.get(i).getHighseasDate());
                arr[8] = list.get(i).getEmpName()==null ? "" : list.get(i).getEmpName().toString();
                arr[9] = list.get(i).getOrganName()==null ? "" : list.get(i).getOrganName().toString();
                arr[10] = ""; //领取日期    暂无数据
                arr[11] = list.get(i).getExpireDate()==null ? "" : sdf2.format(list.get(i).getExpireDate());
                arr[12] = "4"; //联系人数量
                arr[13] = list.get(i).getCreateDate()==null ? "" : sdf2.format(list.get(i).getCreateDate());
                arr[14] = list.get(i).getCustomStatusName()==null ? "" : list.get(i).getCustomStatusName().toString();
                arr[15] = list.get(i).getCustomLevelName()==null ? "" : list.get(i).getCustomLevelName().toString();

                dataset.add(arr);
            }

            //数据
            List<String[]> dataset2 = new ArrayList<String[]>();
            for (int i = 0; i < list2.size(); i++) {
                String[] arr2 = new String[16];
                arr2[0] = list2.get(i).getName()==null ? "" : list2.get(i).getName().toString();
                arr2[1] = list2.get(i).getSex()==null ? "" : getSex(list2.get(i).getSex());
                arr2[2] = list2.get(i).getBirthday()==null ? "" : sdf.format(list2.get(i).getBirthday());
                arr2[3] = "";
                arr2[4] = list2.get(i).getOrganName()==null ? "" : list2.get(i).getOrganName().toString();
                arr2[5] = list2.get(i).getPosition()==null ? "" : list2.get(i).getPosition().toString();
                arr2[6] = list2.get(i).getCompany()==null ? "" : list2.get(i).getCompany().toString();
                arr2[7] = list2.get(i).getAddress()==null ? "" : list2.get(i).getAddress().toString();
                arr2[8] = list2.get(i).getUrl()==null ? "" : list2.get(i).getUrl().toString();
                arr2[9] = list2.get(i).getInterest()==null ? "" : list2.get(i).getInterest().toString();
                arr2[10] = list2.get(i).getRemark()==null ? "" : list2.get(i).getRemark().toString();
                arr2[11] = list2.get(i).getCreateDate()==null ? "" : sdf2.format(list2.get(i).getCreateDate());
                arr2[12] = list2.get(i).getCustomName()==null? "" : list2.get(i).getCustomName();
                arr2[13] = list2.get(i).getEmpName()==null? "" : list2.get(i).getEmpName();
                arr2[14] = list2.get(i).getContactsRoleName()==null? "" : list2.get(i).getContactsRoleName();
                arr2[15] = list2.get(i).getContactsRelationName()==null? "" : list2.get(i).getContactsRelationName();

                dataset2.add(arr2);
            }

            //表头
            String[] handers1 = {"客户全称","客户简称","客户编号","地址","网址","介绍","公海名称","加入公海时间","跟进人","跟进人部门","领取日期","到期日期","联系人数量","创建日期","客户状态","客户分级" };
            String[] handers2 = {"姓名","性别","生日","手机","部门","职务","公司","公司地址","公司网站","兴趣爱好","备注","创建日期","客户简称","归属人","角色关系","亲密程度" };

            //对象
            ExcelExp e1 = new ExcelExp("我的客户", handers1, dataset);
            ExcelExp e2 = new ExcelExp("客户联系人", handers2, dataset2);

            List<ExcelExp> mysheet = new ArrayList<ExcelExp>();
            mysheet.add(e1);
            mysheet.add(e2);

            ExcelExportUtil.exportManySheetExcel(url, mysheet); //生成sheet
            ExcelExportUtil.getExcel(url, fileName, response); //下载sheet

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

Excel对象:

public class ExcelExp {

    private String fileName;// sheet的名称
    private String[] handers;// sheet里的标题
    private List<String[]> dataset;// sheet里的数据集

    public ExcelExp(String fileName, String[] handers, List<String[]> dataset) {
        this.fileName = fileName;
        this.handers = handers;
        this.dataset = dataset;
    }

    //getter、setter方法

}

生成Excel:

/**
     *
     * @Title: exportManySheetExcel
     * @Description: 可生成单个、多个sheet
     * @param @param file 导出文件路径
     * @param @param mysheets
     * @return void
     * @throws
     */
    public static void exportManySheetExcel(String file, List<ExcelExp> mysheets){

        HSSFWorkbook wb = new HSSFWorkbook();//创建工作薄
        List<ExcelExp> sheets = mysheets;

        //表头样式
        HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
        //字体样式
        HSSFFont fontStyle = wb.createFont();
        fontStyle.setFontName("微软雅黑");
        fontStyle.setFontHeightInPoints((short)12);
        fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        style.setFont(fontStyle);

        for(ExcelExp excel: sheets){
            //新建一个sheet
            HSSFSheet sheet = wb.createSheet(excel.getFileName());//获取该sheet名称

            String[] handers = excel.getHanders();//获取sheet的标题名
            HSSFRow rowFirst = sheet.createRow(0);//第一个sheet的第一行为标题
            //写标题
            for(int i=0;i<handers.length;i++){
                //获取第一行的每个单元格
                HSSFCell cell = rowFirst.createCell(i);
                //往单元格里写数据
                cell.setCellValue(handers[i]);
                cell.setCellStyle(style); //加样式
                sheet.setColumnWidth(i, 4000); //设置每列的列宽
            }

            //写数据集
            List<String[]> dataset = excel.getDataset();
            for(int i=0;i<dataset.size();i++){
                String[] data = dataset.get(i);//获取该对象

                //创建数据行
                HSSFRow row = sheet.createRow(i+1);

                for(int j=0;j<data.length;j++){
                    //设置对应单元格的值
                    row.createCell(j).setCellValue(data[j]);
                }
            }
        }

        // 写文件
        try {

            FileOutputStream out = new FileOutputStream(new File(file));
            out.flush();
            wb.write(out);
            out.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
时间: 2024-08-30 09:16:43

JAVA导出Excel(支持多sheet)的相关文章

Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框

在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下.(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^) 呵呵,首先我们来导出EXCEL格式的文件吧.现在主流的操作Excel文件的开源工具有很多,用得比较多的就是Apache的POI及JExcelAPI.这里我们用Apache POI!我们先去Apach

Java学习之道:Java 导出EXCEL

1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 POI 的功能. 2.POI结构 HSSF - 提供读写Microsoft Excel XLS格式档案的功能. XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能. HWPF - 提供读写Microsoft

JAVA导出EXCEL实现

JAVA导出EXCEL实现的多种方式 java导出Excel的方法有多种,最为常用的方式就是使用第三方jar包,目前POI和JXL是最常用的二方包了,也推荐使用这两种. POI实现 POI这里不详细解释,可参考徐老师发的博客:http://blog.csdn.net/evangel_z/article/details/7332535,他利用开源组件POI3.0.2动态导出EXCEL文档的通用处理类ExportExcel,详细使用方法下载最新代码看看就可以里,徐老师写的很明了!总之思路就是用Ser

java 操作 Excel,java导出excel

WritableWorkbook out = null; try { response.getServletResponse().reset(); ((HttpServletResponse) response.getServletResponse()).setHeader("Content-Disposition", "attachment;filename=export.xls"); response.getServletResponse().setConten

Java导出Excel表(poi)名中文乱码问题处理

<pre name="code" class="java">String _filename = ValidateTools.date2Str(date, "yyyyMMddHHmmss"); String filename = f_name + _filename; HSSFSheet sheet; HSSFCell cell; response.setContentType("application/x-download

Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ?Copyright 蕃薯耀 2017年9月13日 http://www.cnblogs.com/fanshuyao/ 直接上代码: import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.ref

Java导出Excel三表头

1.问题背景 Java导出Excel表格时,表头出现了三个,即多表头Excel 2.实现源码 /** * * @Project:Report * @Title:ThreeHead.java * @Package:com.you.excel * @Description: * @Author:YouHaiDong * @Date:2015年11月4日 下午3:10:12 * @Version: */ package com.you.excel; import java.io.FileOutputS

java导出excel报表

1.java导出excel报表: package cn.jcenterhome.util; import java.io.OutputStream;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletResponse;import jxl.Workbook;import jxl.format.Alignment;import jxl.format.Border;import jxl.for

java导出excel超出65536条处理( 转)

java导出excel超出65536条处理 IT社区推荐资讯 - ITIndex.net Apr 20 poi包导出excel超出65536报错: java.lang.IllegalArgumentException: Invalid row number (65536) outside allow 解决办法1:XSS替换HSS poi用: XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet sheet1= wb.createSheet("test&q

CRM报表导出excel时指定sheet名

如图所示,设置PageName即可: 这样导出excel时,sheet的名就有了: