【思路解释】

在正式上到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;
}
}

【运行结果】

05_Excel操作_02_模拟Web环境的User列表导出的更多相关文章

  1. 05_Excel操作_03_模拟Web环境的Excel导入

    [思路简述] 本文继续上一篇文章,上一篇中生成了“D://用户列表.xls”的excel文件,我们接下来将这个excel导入,然后显示在控制台上. 工程什么的都同上一篇文章,只是在ExcelServi ...

  2. 利用 Apache Synapse 模拟 Web 服务

    Apache Synapse 是一个简单.轻量级的高性能企业服务总线 (ESB),它是在 Apache Software Foundation 的 Apache License Version 2.0 ...

  3. 模拟web服务器 (小项目) 搭建+部署

    模拟web服务器:可以从浏览器中访问到自己编写的服务器中的资源,将其资源显示在浏览器中. 技术选型: corejava 线程池 同任务并发执行 IO流 传递数据 客户端也会像服务端发送数据, 服务器像 ...

  4. ubuntu14.04安装及web环境的搭建

    在进行接下来的工作之前首先得准备一个Ubuntu的启动U盘以及腾出一个至少50G的系统盘(在网上看到有人用20G的,不知道效果怎么样).关于Ubuntu启动U盘大家可以参考这个帖子 http://ti ...

  5. 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的生命周期和程序的生命周期

    [源码下载] 重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的 ...

  6. 在linux CentOS6上安装web环境

    感谢浏览,欢迎交流=.= 都说linux作为服务器优于window,近期也是学习了下linux. win7下安装了linux虚拟机,购买linux阿里云主机,开启linux之旅. 进入正题,在linu ...

  7. linux服务器WEB环境一键安装包lanmp教程之五

    在我们安装了linux服务器WEB环境一键安装包lanmp后,可能会有不少疑问还有就是使用过程中出现的问题,下面为大家总结几点比较常见的,如若还有其他疑问,可到wdlinux论坛寻找相关教程. 1.增 ...

  8. 使用Docker搭建简易的 Java Web 环境

    ![group_5622_0](http://ow20g4tgj.bkt.clouddn.com/2017-09-10-group_5622_0.png) 从[<从最简单的入手学习 Docker ...

  9. C# httpclient获取cookies实现模拟web登录

    目前在公司做一款平台化的产品,我主要负责PC端上的开发,在产品推荐过程中为了节省开发时间很多功能模块没来得及做原生,用CEF嵌入了很多带功能web页面,与客户端进行交互从而实现功能. 在二期开发中,产 ...

随机推荐

  1. 如何进行Hadoop二次开发指导视频下载

    本视频适合对Java有一定了解,熟悉java se的Hadoop爱好者,想对Hadoop进行二次开发.下面是以伪分布为例: 想对Hadoop二次开发:一.首先需要Hadoop和Java之间搭建Ecli ...

  2. HDOJ-ACM1008(JAVA)

    这道题很简单,主要是要搞清楚题目的意思 以下是JAVA语言实现: import java.util.*; import java.io.*; public class Main{ public sta ...

  3. Spring ’14 Wave Update: Installing Dynamics CRM on Tablets for Windows 8.1

    One of the added bonuses of Dynamics CRM is its ability go where you go! With the Spring ’14 Wave Up ...

  4. Learning JavaScript Design Patterns The Module Pattern

    The Module Pattern Modules Modules are an integral piece of any robust application's architecture an ...

  5. java使用xheditor Ajax异步上传错误

    java使用xheditor Ajax异步上传时候错误如下:the request doesn't contain a multipart/form-data or multipart/mixed s ...

  6. 【面试虐菜】—— Oracle中CHAR、VARCHAR的区别

    1.CHAR. CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取 ...

  7. cocos2d-x触屏事件(单点触屏)

    转自:http://blog.csdn.net/onerain88/article/details/7550009 一般经常用到的触屏的情况有两种:一种是Layer统一接收触屏消息,然后由程序根据需要 ...

  8. [HTTPS] MAN IN THE MIDDLE (MITM)

    If you go a public caffee shop, they have free wifi. How could you make sure your infomration cannot ...

  9. hi3531的h264压缩中改动波特率

    typedef struct hiVENC_ATTR_H264_CBR_S { HI_U32 u32Gop; HI_U32 u32StatTime; HI_U32 u32ViFrmRate; HI_F ...

  10. android 98 MediaPlayer+SurfaceView播放视频

    package com.itheima.videoplayer; import java.io.IOException; import android.media.MediaPlayer; impor ...