zoukankan      html  css  js  c++  java
  • 05_Excel操作_02_模拟Web环境的User列表导出

    【思路解释】

    在正式上到WebProject之前,准备模拟一下WebProject后台的导出流程。

    主要都写在ExcelService层,在Excel的Service层,首先要获得UserList,即数据库查询的User用户列表,这个UserList从UserDao的getUserList()方法获得,这个getUserList()方法实际没有查询数据库,只是自己创造了一些数据。

    ExcelService获得了UserList之后,然后将数据按照一定的格式创建Excel、在Excel中写入数据。

    【工程截图】

    【User.java】

    package com.Higgin.Excel.domain;
    
    public class User {
        private int id; 
        private String name;
        private String sex;
        private String phone;
        private String email;
      ...省去get和set方法...... }

    【UserDao.java】//模拟从数据库中获得数据

    package com.Higgin.Excel.dao;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.junit.Test;
    
    import com.Higgin.Excel.domain.User;
    
    public class UserDao {
        /**
         * 模拟从数据库获取的User列表
         * @return
         */
        public List<User> getUserList(){
            List<User> userList=new ArrayList<User>();
            for(int i=1;i<=99;i++){
                User user=new User();
                user.setId(i);
                user.setName("Higgin"+i);
                user.setSex(i%3==0?"男":"女");
                user.setPhone("000000000"+(i*i));
                user.setEmail("myemail"+i+"@qq.com");
                userList.add(user);
            }
            return userList;
        }
        
    }

    【ExcelService.java】

    package com.Higgin.Excel.service;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.List;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    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.CellRangeAddress;
    import org.junit.Test;
    import com.Higgin.Excel.dao.UserDao;
    import com.Higgin.Excel.domain.User;
    
    public class ExcelService {
        private UserDao userDao=new UserDao();
        
        //模拟从数据库中查询获得对应的User列表
        private List<User> userList=userDao.getUserList();
        
        @Test
        public void outputExcel() throws IOException{
            //1.创建工作簿
            HSSFWorkbook workbook=new HSSFWorkbook();
                //1.1创建 合并单元格对象
            CellRangeAddress cellRangeAddress=new CellRangeAddress(0,0,0,4);
                //1.2创建 头标题,并设置其字体
            HSSFCellStyle style1=createCellStyle(workbook,(short)16);  //自己写的 设置单元格样式的方法 见最后
                //1.3创建 标题样式
            HSSFCellStyle style2=createCellStyle(workbook,(short)13);
            
            //2.创建工作表
            HSSFSheet sheet =workbook.createSheet("用户列表");
                //2.1 加载合并单元格对象
            sheet.addMergedRegion(cellRangeAddress);
            
            //3.创建行
                //3.1创建头标题行,并写入头标题
            HSSFRow row1=sheet.createRow(0);
            HSSFCell cell1=row1.createCell(0);
            cell1.setCellStyle(style1);
            cell1.setCellValue("用户列表");
            
                //3.2 创建列标题,并写入列标题
            HSSFRow row2=sheet.createRow(1);
            String[] titles={"id","姓名","性别","电话","邮箱"}; 
            for(int i=0;i<titles.length;i++){
                HSSFCell cell2=row2.createCell(i);
                cell2.setCellStyle(style2);
                cell2.setCellValue(titles[i]);
            }
            
            //4.创建单元格,写入用户数据到excel
            if(userList!=null&&userList.size()>0){
                for(int j=0;j<userList.size();j++){
                    HSSFRow row=sheet.createRow(j+2);  //因为前两行分别是头标题和列标题,故要从第3行开始
                    row.createCell(0).setCellValue(String.valueOf(userList.get(j).getId()));
                    row.createCell(1).setCellValue(userList.get(j).getName());
                    row.createCell(2).setCellValue(userList.get(j).getSex());
                    row.createCell(3).setCellValue(userList.get(j).getPhone());
                    row.createCell(4).setCellValue(userList.get(j).getEmail());
                }
            }
            
            //5.输出
            String fileName="D:\用户列表.xls";
            FileOutputStream fileOutputStream=new FileOutputStream(fileName);
            workbook.write(fileOutputStream);
            workbook.close();
            fileOutputStream.close();
        }
        
        /**
         * 创建单元格 样式
         * @param workbook 工作簿
         * @param fontSize 字体大小
         * @return 单元格样式
         */
        private static HSSFCellStyle createCellStyle(HSSFWorkbook workbook,short fontSize){
            HSSFCellStyle style=workbook.createCellStyle();  //创建单元格对象
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);  //水平居中
            style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  //垂直居中
                //创建字体
            HSSFFont font=workbook.createFont();
            font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //加粗字体
            font.setFontHeightInPoints(fontSize);     //设置字体大小
                //在样式中加载字体
            style.setFont(font);
            return style;
        }
    }

    【运行结果】

  • 相关阅读:
    [Vue + TS] Using Route events inside Vue
    [Vue + TS] Write a Vue Component as a Class in TypeScript
    [Mobx] Use MobX actions to change and guard state
    [TypeScript] Type check JavaScript files using JSDoc and Typescript 2.5
    一年四个P(Project)
    android之IntentFilter的用法_Intent.ACTION_TIME_TICK在manifest.xml不起作用
    (step7.2.3)hdu 2554(N对数的排列问题——简单数论)
    hdu 1528 Card Game Cheater ( 二分图匹配 )
    SilkTest天龙八部系列5-类的属性
    SilkTest天龙八部系列6-用open agent进行测试
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5784619.html
Copyright © 2011-2022 走看看