使用办公文档插件:

文件-------HSSFWorkbook

页----------HSSFSheet

行----------HSSFRow

列----------HSSFCell

样式--------HSSFCellStyle

1.使用apache-poi生成excel:

1).导入依赖:

                   

<!--poi依赖-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.15</version>
        </dependency>

2).使用封装类生成excel文件:

//使用apache-poi生成excel文件
public class CreateExcelTest {
    public static void main(String[] args) throws IOException {
        //创建HSSFWorkbook对象,对应一个excel文件
        HSSFWorkbook wb = new HSSFWorkbook();
        //使用wb创建HSSFSheet对象。对应wb文件中的一页
        HSSFSheet sheet = wb.createSheet("学生列表");
        //使用sheet创建HSSFRow对象,对应sheet中的一行
        HSSFRow row = sheet.createRow(0);//行号:从0开始依次增加
        //使用row创建HSSFCell对象,对row中的列
        HSSFCell cell = row.createCell(0);//列的编号:从0开始依次增加
        cell.setCellValue("学号");

         cell = row.createCell(1);
         cell.setCellValue("姓名");

        cell = row.createCell(2);
        cell.setCellValue("年龄");

        //生成HSSFCellStyle对象
        HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);//对齐方式
        //使用sheet创建10个HSSFRow对象,对应sheet中的10行
        for(int i=1;i<=10;i++){
             row = sheet.createRow(i);
            //使用row创建HSSFCell对象,对row中的列
            cell = row.createCell(0);//列的编号:从0开始依次增加
            cell.setCellValue(100+i);

            cell = row.createCell(1);
            cell.setCellValue("NAME"+i);

            cell = row.createCell(2);
            cell.setCellStyle(style);
            cell.setCellValue(20+i);
        }

        //调用工具函数生成excel文件
        OutputStream os = new FileOutputStream("D:\\实践项目\\CRM后台系统\\serverDir\\studentList.xls");//目录必须手动创建好,文件名可以自动生成
        wb.write(os);
        //关闭流资源
        os.close();
        wb.close();
        System.out.println("===========ok==============");
    }
}

2.导出下载文件

1)test类测试用Java生成excel文件

//使用apache-poi生成excel文件
public class CreateExcelTest {
    public static void main(String[] args) throws IOException {
        //创建HSSFWorkbook对象,对应一个excel文件
        HSSFWorkbook wb = new HSSFWorkbook();
        //使用wb创建HSSFSheet对象。对应wb文件中的一页
        HSSFSheet sheet = wb.createSheet("学生列表");
        //使用sheet创建HSSFRow对象,对应sheet中的一行
        HSSFRow row = sheet.createRow(0);//行号:从0开始依次增加
        //使用row创建HSSFCell对象,对row中的列
        HSSFCell cell = row.createCell(0);//列的编号:从0开始依次增加
        cell.setCellValue("学号");

         cell = row.createCell(1);
         cell.setCellValue("姓名");

        cell = row.createCell(2);
        cell.setCellValue("年龄");

        //生成HSSFCellStyle对象
        HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);//对齐方式
        //使用sheet创建10个HSSFRow对象,对应sheet中的10行
        for(int i=1;i<=10;i++){
             row = sheet.createRow(i);
            //使用row创建HSSFCell对象,对row中的列
            cell = row.createCell(0);//列的编号:从0开始依次增加
            cell.setCellValue(100+i);

            cell = row.createCell(1);
            cell.setCellValue("NAME"+i);

            cell = row.createCell(2);
            cell.setCellStyle(style);
            cell.setCellValue(20+i);
        }

        //调用工具函数生成excel文件
        OutputStream os = new FileOutputStream("D:\\实践项目\\CRM后台系统\\serverDir\\studentList.xls");//目录必须手动创建好,文件名可以自动生成
        wb.write(os);
        //关闭流资源
        os.close();
        wb.close();
        System.out.println("===========ok==============");
    }
}

2)前端jsp例子

<script type="text/javascript">
    $(function (){
        //给下载按钮添加事件
        $("#fileDownloadBtn").click(function (){
            //发送文件下载的请求
            //所有文件下载的请求只能发同步请求。!!!!!
            window.location.href="workbench/activity/fileDownload.do";
        })
    })
</script>

3)controller类接收响应,现把文件读取到服务器中,再发送到浏览器进行下载

//文件下载上传
    @RequestMapping("/workbench/activity/fileDownload.do")
    public void fileDownload(HttpServletResponse response) throws IOException {
        //1.设置响应类型
        response.setContentType("application/octet-stream;charset=UTF-8");
        //2.获取输出流
        //response.getWriter()//这个是以字符的形式传输的,这种一般是之前的HTML文件那些
        OutputStream out = response.getOutputStream();//这个是以字节的形式传输的,传输的是现在表格等

        //浏览器接收到响应信息之后,默认情况下,都会在浏览器窗口打开响应信息。
        // 即使打不开,也会调用应用程序来打开;只有实在打不开才会激活文件下载窗口
        //可以设置响应头信息,使浏览器接收响应信息直接激活下载窗口
        response.addHeader("Content-Disposition","attachment;filename=mystudentList.xls");

        //读取excel文件(InputStream),把输出到浏览器(OutoutStream)
        InputStream is = new FileInputStream("D:\\实践项目\\CRM后台系统\\serverDir\\studentList.xls");
        byte[] buff=new byte[256];
        int len=0;
        while ((len=is.read(buff))!=-1){
            out.write(buff,0,len);
        }
        //关闭资源
        is.close();
        out.flush();
    }