zoukankan      html  css  js  c++  java
  • POI 自用API

     poi包下载 API

    使用POI生成Excel,大家都是赞个。可是狐狸觉得毕竟不是微软的产品,使用没有C#语言的好用,方法还是存在极限的。

    下面总结狐狸自己用过的方法:

    import org.apache.poi.hssf.usermodel.*;

    @ 创建一个空白的excel

    HSSFWorkbook workBook = new HSSFWorkbook();//是操作Excel2003的版本,扩展名是xls

    @ 创建sheet页

    HSSFSheet sheet = workBook.createSheet(String sheetName);//参数是设置sheet的名字
    
    HSSFSheet sheet = workBook.createSheet();//sheet名字为默认sheet0

      @ sheet的其它常用设计

         在poi中并不存在某个单元格或者区域设置可编辑与不可编辑的方法,如果要控制某些列或者行是可以编辑的功能,必须先

        把sheet设置为密码保护模式,然后对指定的可编辑单元格设置保护失效。

      sheet.createFreezePane(int colSplit, int rowSplit);//冻结
      sheet.createFreezePane(int colSplit, int rowSplit, intleftmostColumn,int topRow);

        以上两种冻结方法只是区域参数不同。

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

       

       

  • 相关阅读:
    10.C# 构造函数
    9.C# 类
    8.C#友元程序集----可访问性相关
    7.C# 多态的实现
    4.C#虚方法virtual详解
    3.C#的访问权限修饰符
    2.静态类成员、静态构造函数、静态类
    1.面向对象的基本概念
    6.C# 释放非托管资源2
    原生js实现轮播图原理
  • 原文地址:https://www.cnblogs.com/zhutouying/p/3234300.html
Copyright © 2011-2022 走看看