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导出到excelHSSFWorkbook 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导出到excelHSSFWorkbook 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();//关闭输出流