使用POI生成Excel,你们都是赞个。但是狐狸以为毕竟不是微软的产品,使用没有C#语言的好用,方法仍是存在极限的。java
下面总结狐狸本身用过的方法:数据库
import org.apache.poi.hssf.usermodel.*;apache
@ 建立一个空白的excelapp
HSSFWorkbook workBook = new HSSFWorkbook();//是操做Excel2003的版本,扩展名是xls
@ 建立sheet页jsp
HSSFSheet sheet = workBook.createSheet(String sheetName);//参数是设置sheet的名字 HSSFSheet sheet = workBook.createSheet();//sheet名字为默认sheet0
@ sheet的其它经常使用设计ide
在poi中并不存在某个单元格或者区域设置可编辑与不可编辑的方法,若是要控制某些列或者行是能够编辑的功能,必须先函数
把sheet设置为密码保护模式,而后对指定的可编辑单元格设置保护失效。字体
sheet.createFreezePane(int colSplit, int rowSplit);//冻结
sheet.createFreezePane(int colSplit, int rowSplit, intleftmostColumn,int topRow);
以上两种冻结方法只是区域参数不一样。ui
sheet.protectSheet("hisense");//密码保护,保护区域不能够修改 HSSFCellStyle styleEdit = workBook.createCellStyle();//设置单元格格式 styleEdit.setLocked(false);//该样式的保护失效
@ sheet中建立行
HSSFRow row = sheet.createRow(int i);//生成第一行,i默认从0开始 row.setHeight((short)900);//设置行高
@ row中设置单元格
HSSFCell cell = row.createCell(int i);//在row行的第i+1列生成一个单元格 cell.setCellValue(new HSSFRichTextString(String text));//单元格赋值 cell.setZeroHeight(true);//将行高设置为零便可以隐藏 cell.setCellStyle(HSSFCellStyle style);//在单元格设置样式,样式在下面详解
若该style = styleEdit(上面sheet部分已经设置,见@ sheet的其它经常使用设计),则表示该单元格能够编辑
@ 单元格格式设置
HSSFCellStyle style = workBook.createCellStyle();//建立单元格样式 HSSFFont font = workBook.createFont();//设置字体 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示 style.setFont(font);//选择须要用到的字体格式
HSSFDataFormat format = workBook.createDataFormat();//设置单元格格式
style.setDataFormat(format.getFormat("@"));//设置单元格为文本格式
style.setBorderRight(HSSFCellStyle.BORDER_THIN);//生成右边框 style.setRightBorderColor(HSSFColor.BLACK.index);//设置右边框颜色 style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex());//设置单元格背景
style.setAlignment(HSSFCellStyle.ALIGN_RIGHT);//设置单元格右对齐
边框的方法有:setBorderLeft,setBorderRight,setBorderTop,setBorderBottom
@ 合并单元格
import org.apache.poi.hssf.util.Region; sheet.addMergedRegion(new Region(startRow, (short) startColumn, endRow, (short) endColumn));
================================================================================
读取excel数据的方法:
@ 读取excel文件
HSSFWorkbook workbook = new HSSFWorkbook(new java.io.FileInputStream( String filePath));
@ 根据sheet名读取sheet内页
HSSFSheet sheet = workbook.getSheet(String sheetName);
@ 读取指定rowIndex的行
HSSFRow row = sheet.getRow(int rowIndex);
@ 读取单元格
HSSFCell cell = row.getCell(int index);
@ 读取单元格内的值
String value = row.getCell(int index).getStringCellValue();
单元格内为空时,用上面方法会报错,解决方法:
HSSFCell Cell = row.getCell(int index); cell.setCellType(HSSFCell.CELL_TYPE_STRING);//设置为string类型 String value = row.getCell(index).getStringCellValue();
@ 用于辅助的好用方法:
int lastCol = row.getLastCellNum();//获取最后一列 int lastRow = sheet.getLastRowNum();//获取最后一行
@ 设置单元格值类型
cell.setCellValue(String);//设置单元格文本值 cell.setCellValue(Double);//设置单元格数字型值
经过以上的函数,能够完成excel的建立和读取操做。
*************************************************************************************************
狐狸最近在完成JSP动态表格导出excel形式而且设置excel受保护部分单元格能够编辑的属性,最后实现批量修改导入到数据的过程。
@ 将JSP页面表格导出excel形式:
实现:利用poi设置excel格式,而且从数据库中读取数据导入到excel中,最后设置response以下:
response.setContentType("application/vnd.ms-excel;charset=gbk"); response.setHeader("Content-Disposition", "attachment;filename=policyParam.xls"); OutputStream out = response.getOutputStream(); workBook.write(out); out.close();
若导出的excel文件是中文,请先转码再导出。
String fileName =java.net.URLEncoder.encode("导出","utf-8"); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename="+fileName+".xls"); OutputStream out = response.getOutputStream(); workBook.write(out); out.close();
项目经理说页面的数据不是能够直接导成excel吗?我以为与其从JSP读出数据,不如直接从数据库读取数据。
@ 将excel的数据批量导入到数据库
第一步设计一个文件上传表单,同时校验excel合法性(模板是否符合当前的对象)
第二步利用 com.jspsmart.upload.SmartUpload读取文件流,从文件流中读取excel数据。
第三步将读到的数据利用JDBC更新到数据库,每1000条commit一次。
第四步若是excel有不合法数据,那么回滚数据。