Excel导出

action类的方法:
<pre name="code" class="java"><span style="white-space:pre">	</span>//注入代理对象
	@Resource
	private UserService userService;


 
	//excel导出 用户列表(页面不需要跳转  所以不要返回值)
	public void exportExcel() {
		try {
			//获取response输出流
			HttpServletResponse response = ServletActionContext.getResponse();
			//字节流
			ServletOutputStream out = response.getOutputStream();
			//设置response响应头
			response.setHeader("Content-disposition", "attachment;fileName="+URLEncoder.encode("用户列表.xls","UTF-8"));
			
			//查询全部
			list= userService.findAll();
			//调用service,创建一个方法,导出=下载
			userService.exportExcel(list,out);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
业务逻辑处理写在service层,调用了service两个方法:<pre name="code" class="java">userService.findAll();<pre name="code" class="java">userService.exportExcel(list,out);
 
 
接口类:
<pre name="code" class="java"><span style="white-space:pre">	</span>/**
	 * 导出excel
	 * @param list  数据集合
	 * @param out    输出流
	 */
	void exportExcel(List<User> list, OutputStream out);
<span style="white-space:pre">	</span><pre name="code" class="java"><span style="white-space:pre">	</span>/**
	 * 查找全部
	 * @return 返回一个list集合
	 */
	public List<T> findAll();

实现类:<pre name="code" class="java">import org.apache.poi.hssf.usermodel.HSSFCell;
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.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.CellRangeAddress;
import org.springframework.stereotype.Service;

 
<span style="white-space:pre">	</span>@Override
	public void exportExcel(List<User> list, OutputStream out) {
		// 工作薄
		HSSFWorkbook workbook = new HSSFWorkbook();
		// 创建工作表
		HSSFSheet sheet = workbook.createSheet("用户列表");
		// 设置默认的列宽
		sheet.setDefaultColumnWidth(15);

		// 生成第一行
		// 合并单元格(7列)
		CellRangeAddress cra = new CellRangeAddress(0, 0, 0, 6);
		sheet.addMergedRegion(cra);// 合并单元格
		// 合并后的第一行
		HSSFRow row1 = sheet.createRow(0);
		// 合并后的第一行第一列
		HSSFCell row1_cell = row1.createCell(0);
		// 设置值
		row1_cell.setCellValue("用户列表");
		// 设置样式(调用公用方法)
		row1_cell.setCellStyle(createCellStyle(workbook, (short) 16));

		// 生成标题行
		HSSFRow row2 = sheet.createRow(1);
		// 标题数组
		String[] head = { "用户名", "帐号", "所属部门", "性别", "手机号码", "电子邮箱", "生日" };
		// 标题样式
		CellStyle headCellStyle = createCellStyle(workbook, (short) 10);
		for (int i = 0; i < head.length; i++) {
			// 创建每一列
			HSSFCell cell_ = row2.createCell(i);
			// 设置每一列的样式
			cell_.setCellStyle(headCellStyle);
			// 设置列值
			cell_.setCellValue(head[i]);
		}
		// 生成数据行
		// 遍历集合
		if (list != null) {
			for (int i = 0; i < list.size(); i++) {
				// 对象
				User user = list.get(i);
				// 一个对象对应的是一行
				HSSFRow row = sheet.createRow(i + 2);
				// 创建每一列
				row.createCell(0).setCellValue(user.getName());
				row.createCell(1).setCellValue(user.getAccount());
				row.createCell(2).setCellValue(user.getDept());
				row.createCell(3).setCellValue(user.isGender() ? "男" : "女");
				row.createCell(4).setCellValue(user.getMobile());
				row.createCell(5).setCellValue(user.getEmail());
				row.createCell(6).setCellValue(
						this.converDateToString(user.getBirthday()));

			}
		}
		try {
			// 输出excel,关闭流
			workbook.write(out);
			workbook.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

<span style="white-space:pre">	</span>@Override
	public List<T> findAll() {
		
		return baseDao.findAll();
	}


下载组件,引入jar包
        poi-3.15-beta2.jar
        poi-ooxml-3.15-beta2.jar
        poi-ooxml-schemas-3.15-beta2.jar
        xmlbeans-2.6.0.jar
 

<span style="white-space:pre">	java中excel操作的方式</span>  推荐 poi   是apache提供的开源组件!
        目前最新版本:Apache POI 3.15-beta2
 
<span style="white-space:pre">	了解excel
        07或以上: xlsx  后缀
        03或之前: xls   后缀


        工作簿:表示整个excel对象   (Workbook)
        工作表:表示一个excel页签   (Sheet)
        行:    excel的一行         (Row)
        单元格: excel的列          (Cell)</span>

<span style="white-space:pre">	excel 2003 操作:
        
            HSSFWorkbook  工作簿
                HSSFSheet<span style="white-space:pre">	</span>createSheet()               通过工作簿创建工作表
                HSSFCellStyle<span style="white-space:pre">	</span>createCellStyle()       创建单元格样式
                HSSFFont<span style="white-space:pre">	</span>createFont()                创建字体


            HSSFSheet 
                 HSSFRow<span style="white-space:pre">	</span>createRow(int rownum)       通过工作表,创建行


            HSSFRow
                  HSSFCell<span style="white-space:pre">	</span>createCell(int column)      创建单元格
                  int<span style="white-space:pre">	</span>getPhysicalNumberOfCells()      单元格个数
                  int<span style="white-space:pre">	</span>getRowNum()                     行个数
            HSSFCell
                  double<span style="white-space:pre">	</span>getNumericCellValue()           获取日期单元格值
                  java.lang.String<span style="white-space:pre">	</span>getStringCellValue()    获取普通字符串数据值
                  java.util.Date<span style="white-space:pre">	</span>getDateCellValue()      获取日志单元格的值!


       
       excel 2007 操作:
            只需要把H换成X


            XSSFWorkBook
            XSSFSheet
            XSSFRow
            XSSFCell</span>


导出用户列表  (新建excel,输出给浏览器)


        a. listUI.jsp
            点击:"导出", 提交到action (user_exportExcel.action)
        
        b. 在action中,完成导出 (下载)
            b1. 查询用户列表
            b2. 设置下载的响应头:Content-disposition
            b3. 把excel文件写入到reponse输出流!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值