杰信项目第二天之poi-导出工作表+小细节

hibernate中get是返回一条,find是返回多条
工作表版本1(简单)

public void export() throws IOException{
//用poi导出到excel
/*
* 编写代码的原则:先写框架
* 操作步骤:
* 1、创建工作簿
* 2、创建工作表
* 3、创建行对象
* 4、创建单元格对象
* 5、设置单元格内容
* 6、设置单元格样式(代码量最大)
* 7、写文件
* 8、关闭
* 9、下载
*/
HSSFWorkbook wb = new HSSFWorkbook(); //创建工作簿对象
HSSFSheet sheet = wb.createSheet(); //用工作簿对象来创建工作表
HSSFRow nRow = sheet.createRow(4); //用工作表对象来创建行对象
/**
* 用行对象和单元格对象来进行定位
*/
HSSFCell nCell = nRow.createCell((short)4); //用行对象来创建单元格
nCell.setCellValue("marry circemers"); //设置单元格的内容
FileOutputStream fOut = new FileOutputStream(new File("d:\\testpoi.xls")); //创建输出流
wb.write(fOut); //将工作簿对象写入输出流
fOut.flush(); //刷新缓冲区
fOut.close(); //关闭输出流
}

以下代码是创建工作表的标题列

public void export1() throws IOException{
HSSFWorkbook wb = new HSSFWorkbook();//创建工作簿对象
HSSFSheet sheet = wb.createSheet();//用工作簿对象来创建工作表
/**
* 用行对象和单元格对象来进行定位
*/
HSSFRow nRow = null;//用工作表对象来创建行对象
HSSFCell nCell = null;//用行对象来创建单元格
//输出标题
String[] titles = new String[]{"全称","简称","联系人","电话","手机","验货员","备注"};
//首先,把行定位到第一行
nRow = sheet.createRow(0);
//开始循环写入到每一列(每一列的单元格对象)
FileOutputStream fOut = new FileOutputStream(new File("d:\\testpoi.xls"));//创建输出流
for (int i = 0; i < titles.length; i++) {
//从第0列开始创建单元格一直到第i列
nCell = nRow.createCell((short)i);
//从数组的第一个元素开始写一直写到第i个元素
nCell.setCellValue(titles[i]);
}
/**
* 获取数据
*/
wb.write(fOut);//将工作簿对象写入输出流
fOut.flush();//刷新缓冲区
fOut.close();//关闭输出流
}

以下代码是将真实数据添加进excel表格

public void export1() throws IOException{
//用poi导出到excel
HSSFWorkbook wb = new HSSFWorkbook();//创建工作簿对象
HSSFSheet sheet = wb.createSheet();//用工作簿对象来创建工作表
/**
* 由于写满5个就要换行,所以定义一个行指针变量, 让5列执行完以后行号+1,这样就不会覆盖之前的了
* 因为第一行是标题所以要定位到第二行开始写正式的数据,
* 又由于行是从第0列开始算第一行,所以定义rowNo=1
*/
int rowNo=1;//定义一个行指针变量
/**
* 定义一个列指针变量
* 列指针变量的作用是每写完一种类型的数据,就+1.指针移动到下一列继续写下一列的数据
*/
short colNo=0;//定义一个列指正变量
/**
* 用行对象和单元格对象来进行定位
*/
HSSFRow nRow = null;//用工作表对象来创建行对象
HSSFCell nCell = null;//用行对象来创建单元格
//输出标题
String[] titles = new String[]{"全称","简称","联系人","电话","手机","验货员","备注"};
//首先,把行定位到第一行
nRow = sheet.createRow(0);
//开始循环写入到每一列(每一列的单元格对象)
FileOutputStream fOut = new FileOutputStream(new File("d:\\testpoi.xls"));//创建输出流
for (int i = 0; i < titles.length; i++) {
//从第0列开始创建单元格一直到第i列
nCell = nRow.createCell((short)i);
//从数组的第一个元素开始写一直写到第i个元素
nCell.setCellValue(titles[i]);
}
/**
* 获取数据
*/
FactoryDAO oDao = (FactoryDAO) this.getDao("daoFactory");
List<Factory> dataList = oDao.find("from Factory o where o.state=1");
for (Factory f : dataList) {
//每次完成一次循环就把行号下移一次
nRow = sheet.createRow(rowNo++);
nCell = nRow.createCell(colNo++);
nCell.setCellValue(f.getFullName());
nCell = nRow.createCell(colNo++);
nCell.setCellValue(f.getFactoryName());
nCell = nRow.createCell(colNo++);
nCell.setCellValue(f.getContractor());
nCell = nRow.createCell(colNo++);
nCell.setCellValue(f.getPhone());
nCell = nRow.createCell(colNo++);
nCell.setCellValue(f.getMobile());
nCell = nRow.createCell(colNo++);
nCell.setCellValue(f.getInspector());
nCell = nRow.createCell(colNo++);
nCell.setCellValue(f.getCnote());
//每次循环结束将列号重新置0,不然会超出excel范围
colNo=0;
}
wb.write(fOut);//将工作簿对象写入输出流
fOut.flush();//刷新缓冲区
fOut.close();//关闭输出流
}

以下是完整代码,包括样式,字体,边框等

//用poi导出到excel
HSSFWorkbook wb = new HSSFWorkbook();//创建工作簿对象
HSSFSheet sheet = wb.createSheet();//用工作簿对象来创建工作表
/**
* 由于写满5个就要换行,所以定义一个行指针变量, 让5列执行完以后行号+1,这样就不会覆盖之前的了
* 因为第一行是标题所以要定位到第二行开始写正式的数据,
* 又由于行是从第0列开始算第一行,所以定义rowNo=1
*/
int rowNo=1;//定义一个行指针变量
/**
* 定义一个列指针变量
* 列指针变量的作用是每写完一种类型的数据,就+1.指针移动到下一列继续写下一列的数据
*/
short colNo=0;//定义一个列指正变量
/**
* 用行对象和单元格对象来进行定位
*/
/**
* 这里有个重点,poi的列宽底层对中文有bug,无法自动适应,造成一列上显示不全的情况,解决方法要用模板实现
*/
sheet.setColumnWidth((short)0, (short)(25*256)); //设置列宽 POI底层BUG,解决方法要用模板实现
HSSFRow nRow = null;//用工作表对象来创建行对象
HSSFCell nCell = null;//用行对象来创建单元格
//输出标题
String[] titles = new String[]{"全称","简称","联系人","电话","手机","验货员","备注"};
//首先,把行定位到第一行
nRow = sheet.createRow(0);
//开始循环写入到每一列(每一列的单元格对象)
FileOutputStream fOut = new FileOutputStream(new File("d:\\testpoi.xls"));//创建输出流
for (int i = 0; i < titles.length; i++) {
//从第0列开始创建单元格一直到第i列
nCell = nRow.createCell((short)i);
//从数组的第一个元素开始写一直写到第i个元素
nCell.setCellValue(titles[i]);
nCell.setCellStyle(this.title(wb));
}
/**
* 获取数据
*/
FactoryDAO oDao = (FactoryDAO) this.getDao("daoFactory");
List<Factory> dataList = oDao.find("from Factory o where o.state=1");
for (Factory f : dataList) {
//每次完成一次循环就把行号下移一次
nRow = sheet.createRow(rowNo++);
nCell = nRow.createCell(colNo++);
nCell.setCellValue(f.getFullName());
/**
* 这里是将文字样式与内容绑定
*/
nCell.setCellStyle(this.text(wb));
nCell = nRow.createCell(colNo++);
nCell.setCellValue(f.getFactoryName());
nCell.setCellStyle(this.text(wb));
nCell = nRow.createCell(colNo++);
nCell.setCellValue(f.getContractor());
nCell.setCellStyle(this.text(wb));
nCell = nRow.createCell(colNo++);
nCell.setCellValue(f.getPhone());
nCell.setCellStyle(this.text(wb));
nCell = nRow.createCell(colNo++);
nCell.setCellValue(f.getMobile());
nCell.setCellStyle(this.text(wb));
nCell = nRow.createCell(colNo++);
nCell.setCellValue(f.getInspector());
nCell.setCellStyle(this.text(wb));
nCell = nRow.createCell(colNo++);
nCell.setCellValue(f.getCnote());
nCell.setCellStyle(this.text(wb));
//每次循环结束将列号重新置0,不然会超出excel范围
colNo=0;
}
wb.write(fOut);//将工作簿对象写入输出流
fOut.flush();//刷新缓冲区
fOut.close();//关闭输出流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值