POI 自用API

 poi包下载 APIhtml

使用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有不合法数据,那么回滚数据。

相关文章
相关标签/搜索