java将jsp页面表格导出excel表格数据_简单的POI导出JSP页面表格数据到excel

数据库中的equipment表数据: 读取数据库中表数据的代码TestExcel.java public class TestExcel extends BaseAction{/** * @param args * @throws Exception */public String excel() {try{Connection connection = con(); String sql = select * from equipm

数据库中的equipment表格数据:

test.jsp?url=http%3A%2F%2Fimg.blog.csdn.net%2F20140409091436078&refer=http%3A%2F%2Fblog.csdn.net%2Fzfc0826%2Farticle%2Fdetails%2F23246911

读取数据库中表格数据的代码TestExcel.java

public class TestExcel extends BaseAction{

/**

* @param args

* @throws Exception

*/

public String excel() {

try{

Connection connection = con();

String sql = "select * from equipment";

PreparedStatement ps = pre(sql, connection);

ResultSet rs = ps.executeQuery();

String [] string = {"设备编号","学院名称","入库时间","实验室位置","实验箱名称","使用状态"};

ArrayList listname = new ArrayList();

for(int i = 0;i< string.length;i++){

listname.add(string[i]);

}

// ArrayList listname = (ArrayList) Arrays.asList(string);

ArrayList listData = new ArrayList();

while(rs.next()){

ArrayList list = new ArrayList();

list.add(rs.getString(1));

list.add(rs.getString(2));

list.add(rs.getTimestamp(3));

list.add(rs.getString(4));

list.add(rs.getString(5));

list.add(rs.getString(6));

listData.add(list);

}

OutputStream out = response.getOutputStream();

//重置输出流

response.reset();

//设置导出Excel报表的导出形式

response.setContentType("application/vnd.ms-excel");

//设置下载的excel文件名称

response.setHeader("Content-Disposition", "attachment;filename=zfc.xls");

ExcelFileGenerator ex = new ExcelFileGenerator(listname,listData);

ex.expordExcel(out);

//设置输出形式

System.setOut(new PrintStream(out));

//刷新输出流

out.flush();

//关闭输出流

if(out!=null){

out.close();

}

}catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

return null;

}

public static Connection con() throws Exception{

Connection connection = null;

Class.forName("com.mysql.jdbc.Driver");

connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/ems", "root", "123456");

return connection;

}

public static PreparedStatement pre(String sql,Connection connection) throws Exception{

PreparedStatement ps = null;

ps = connection.prepareStatement(sql);

return ps;

}

}

将list集合的中的数据导入到excel表中的步骤如下:

* 1、创建 HSSFWorkBook对象

* 2、获取要导出的表格的总记录数

* 3、根据总记录和每个excels的所容纳的记录数,进行分页处理,得出分为几个sheet的excels

* 4、得出sheet,进行每个sheet的循环处理

*      4.1、通过workbook对象进行创建createSheet,HSSFSheet对象

*      4.2、拥有了HSSFSheet对象,创建sheet.createRow行表头,单独的一行即数据说明

*      4.3、创建表头行HSSFRow,开始导入表头行数据,开始对表头这一行进行数据循环填充

*              4.3.1、通过行头对象HSSFRow创建HSSFCell列对象

*              4.3.2、有列对象,可以设置显示的样式,单元格宽度通过sheet对象设置

*              4.3.3、列对象设置完了,可以进行值的填充cell.setValue

*       4.4、接着开始循环每一行数据,对总记录进行循环,如果超过最大容量,那么最大值就是它,否则就是实际记录数

*       4.5、开始进入循环,然后都要创建一个行对象HSSFRow,根据现在的页数取出第几条数据集合,进行循环

*               4.5.1、也是通过HSSFRow,创建HSSFCell列对象

*               4.5.2、通过cell对象设置相应的样式或者编码

*               4.5.3、编码设置完,就可以进行每列数据的填充

* 5、返回workBook对象

代码ExcelFileGenerator.java:

public class ExcelFileGenerator {

private final int SPLIT_COUNT = 1500; //Excel每个工作簿的行数

private ArrayList fieldName = null; //excel标题数据集

private ArrayList fieldData = null; //excel数据内容

private HSSFWorkbook workBook = null;

/**

* 构造器

* @param fieldName 结果集的字段名

* @param data

*/

public ExcelFileGenerator(ArrayList fieldName, ArrayList fieldData) {

this.fieldName = fieldName;

this.fieldData = fieldData;

}

/**

* 1、创建 HSSFWorkBook对象

* 2、获取要导出的表格的总记录数

* 3、根据总记录和每个excels的所容纳的记录数,进行分页处理,得出分为几个sheet的excels

* 4、得出sheet,进行每个sheet的循环处理

* 4.1、通过workbook对象进行创建createSheet,HSSFSheet对象

* 4.2、拥有了HSSFSheet对象,创建sheet.createRow行表头,单独的一行即数据说明

* 4.3、创建表头行HSSFRow,开始导入表头行数据,开始对表头这一行进行数据循环填充

* 4.3.1、通过行头对象HSSFRow创建HSSFCell列对象

* 4.3.2、有列对象,可以设置显示的样式,单元格宽度通过sheet对象设置

* 4.3.3、列对象设置完了,可以进行值的填充cell.setValue

* 4.4、接着开始循环每一行数据,对总记录进行循环,如果超过最大容量,那么最大值就是它,否则就是实际记录数

* 4.5、开始进入循环,然后都要创建一个行对象HSSFRow,根据现在的页数取出第几条数据集合,进行循环

* 4.5.1、也是通过HSSFRow,创建HSSFCell列对象

* 4.5.2、通过cell对象设置相应的样式或者编码

* 4.5.3、编码设置完,就可以进行每列数据的填充

* 5、返回workBook对象

* 创建HSSFWorkbook对象

* @return HSSFWorkbook

*/

public HSSFWorkbook createWorkbook() {

workBook = new HSSFWorkbook();

int rows = fieldData.size();

int sheetNum = 0;

if (rows % SPLIT_COUNT == 0) {

sheetNum = rows / SPLIT_COUNT;

} else {

sheetNum = rows / SPLIT_COUNT + 1;

}

for (int i = 1; i <= sheetNum; i++) {

HSSFSheet sheet = workBook.createSheet("Page " + i);

HSSFRow headRow = sheet.createRow((short) 0);

for (int j = 0; j < fieldName.size(); j++) {

HSSFCell cell = headRow.createCell((short) j);

//添加样式

cell.setCellType(HSSFCell.CELL_TYPE_STRING);

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

//添加样式

//设置所有单元格的宽度

sheet.setColumnWidth((short)j, (short)6000);

//创建样式(使用工作本的对象创建)

HSSFCellStyle cellStyle = workBook.createCellStyle();

//创建字体的对象

HSSFFont font = workBook.createFont();

//将字体加粗

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

//设置字体的颜色

short color = HSSFColor.RED.index;

font.setColor(color);

//将新设置的字体属性放置到样式中

cellStyle.setFont(font);

if(fieldName.get(j) != null){

cell.setCellStyle(cellStyle);

cell.setCellValue((String) fieldName.get(j));

}else{

cell.setCellStyle(cellStyle);

cell.setCellValue("-");

}

}

for (int k = 0; k < (rows < SPLIT_COUNT ? rows : SPLIT_COUNT); k++) {

HSSFRow row = sheet.createRow((short) (k + 1));

//将数据内容放入excel单元格

ArrayList rowList = (ArrayList) fieldData.get((i - 1)* SPLIT_COUNT + k);

//ArrayList rowList = fieldData;

for (int n = 0; n < rowList.size(); n++) {

HSSFCell cell = row.createCell((short) n);

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

if(rowList.get(n) != null){

cell.setCellValue((String) rowList.get(n).toString());

}else{

cell.setCellValue("");

}

}

}

}

return workBook;

}

public void expordExcel(OutputStream os) throws Exception {

workBook = createWorkbook();

workBook.write(os);

os.close();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值