poi入门实例与实现response工单导出

一、引入jar包:

1、poi-3.16.jar

2、poi-ooxml-3.16.jar

3、poi-ooxml-schemas-3.16.jar

4、commons-collections4-4.1.jar

5、xmlbeans-2.6.9.jar

注意版本号要统一否则会产生classNotFound的异常

二、编写一个poi打印的简单入门实例:

import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

/**
 * 简单的poi报表打印类
 * @author Administrator
 *
 */
public class PoiDemo {
	public static void main(String[] args) {
		//创建工作薄
		Workbook wb = new HSSFWorkbook();
		//用工作薄对象创建单元格格式对象
		CellStyle cellStyle = wb.createCellStyle();
		//用工作薄对象设置字体
		Font font = wb.createFont();
		//设置单元格格式
		cellStyle.setFont(font);
		//创建工作表
		Sheet sheet = wb.createSheet();
		//创建行对象
		Row row = sheet.createRow(0);
		//创建单元格对象
		Cell cell = row.createCell(0);
		//设置单元格内容
		cell.setCellValue("第一个行 第一个单元格的值");
		//设置第二个单元格的值
		Cell cell2 = row.createCell(1);
		cell2.setCellValue("第一行 第二个单元格");
		//设置文件输出流
		try {
			FileOutputStream out = new FileOutputStream("e:\\a.xls");
			//将报表输出到指定的路径下
			wb.write(out);
			//关流
			out.close();
			System.out.println("报表打印结束");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

关于设置单元格的样式,后续会进行补充。

三、介绍通过在线下载的方式实现表格的打印

实现方式是

1、点击按钮在后台触发事件。

2、在事件里面通过向response流里面进行写数据实现数据的导出。

3、注意不能发送ajax请求,通过location.href=url的方式进行发送请求。

创建流的代码如下:

OutputStream os = response.getOutputStream();// 取得输出流
response.reset();// 清空输出流
String filename = "XXX.xlsx";
response.setContentType("application/msexcel");
response.setHeader("Content-disposition", "attachment; filename="
		+ URLEncoder.encode(filename, "UTF-8"));
在创建了workbook之后将数据workbook.write(os);
public void exportUserCount(String startTime, String endTime, String interval, HttpServletResponse response) {
	try {
		//创建工作薄对象
		Workbook workbook = new SXSSFWorkbook();
		//创建response输出流
		OutputStream os = response.getOutputStream();
		response.reset();
		String filename = "工号统计报表"+startTime+"_"+endTime+".xlsx";
		response.setContentType("application/msexcel");
		response.setHeader("Content-disposition", "attachment; filename="
				+ URLEncoder.encode(filename, "UTF-8"));
		//创建工作表
		Sheet sheet = workbook.createSheet();
		//获取结果集
		JSONObject result = loadUserId(startTime,endTime,interval);
		JSONArray lines = result.getJSONObject("data").getJSONArray("rows");
		//创建表头
		Row row = sheet.createRow(0);
		//设置每一列的宽度
		sheet.setColumnWidth(0,25*256);
		sheet.setColumnWidth(1,25*256);
		sheet.setColumnWidth(2,25*256);
		sheet.setColumnWidth(3,25*256);
		sheet.setColumnWidth(4,25*256);
		//创建单元格的格式 字体加粗
		CellStyle cellStyle = workbook.createCellStyle();
		Font font = workbook.createFont();
		font.setBold(true);
		cellStyle.setFont(font);
		//设置标题行的内容
		Cell cell = row.createCell(0);
		cell.setCellValue("时间段");
		cell.setCellStyle(cellStyle);
		cell = row.createCell(1);
		cell.setCellValue("APhotline");
		cell.setCellStyle(cellStyle);
		cell = row.createCell(2);
		cell.setCellValue("SSE");
		cell.setCellStyle(cellStyle);
		cell = row.createCell(3);
		cell.setCellValue("PC(实时识别)");
		cell.setCellStyle(cellStyle);
		cell = row.createCell(4);
		cell.setCellValue("PC(离线转写)");
		cell.setCellStyle(cellStyle);
		//遍历结果集
		for(int i = 0; i < lines.size(); i++) {
			JSONObject line = lines.getJSONObject(i);
			row = sheet.createRow(i+1);
			cell = row.createCell(0);
			cell.setCellValue(line.getString("time"));
			cell = row.createCell(1);
			cell.setCellValue(line.getString("APhotline"));
			cell = row.createCell(2);
			cell.setCellValue(line.getString("SSE"));
			cell = row.createCell(3);
			cell.setCellValue(line.getString("PCOnline"));
			cell = row.createCell(4);
			cell.setCellValue(line.getString("PCOffline"));
		}
		
		workbook.write(os);
		os.flush();
		os.close();
		
	} catch (Exception e) {
		e.printStackTrace();
	}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值