POI学习笔记

来源:互联网 发布:sql计算时间间隔小时 编辑:程序博客网 时间:2024/06/02 05:30
 

        最近由于项目关系,接触到POI技术。跟着官网上的HOTOs一路做下来,真感概POI功能的强大和使用的傻瓜。五分钟,包学报会。

        自己感觉跟java swing差不多,在一个‘父组件’上新增‘子组件’,一层套一层,如:

            HSSFWorkbook book = new HSSFWorkbook();
            HSSFSheet sheet = book.createSheet("sheet1");
            HSSFRow row = sheet.createRow(0);

         需要注意到有两个问题:

1. 中文乱码

         解决方案:为每个需要显示中文的HSSFCell设置编码格式,即

   HSSFCell cell = row.createCell((short) counter);
   cell.setEncoding(HSSFCell.ENCODING_UTF_16);

         POI这里设计的不是很合理,无法直接设置某一行或某一列的编码格式,而是需要一个一个cell地去设置,唉,写到手酸。。。不停Ctrl+C Ctrl+V 。。。。

2. 数据格式

        转换后的excel文档里面总是把数字写成科学计数法那样的形式(形如5.5E12),但有些时候又不想让他转换,比如输入的是银行卡号或流水账号。我试图在存放之前就设置cell的格式为STRING,但是没有用,打开excel仍然是科学计数法。当再次读取文件内容时,无法将这些科学计数法表示的数字直接转化成字符串。

        解决方案:使用BigDecimal去处理:

      switch(cellType){
         case HSSFCell.CELL_TYPE_NUMERIC:
          BigDecimal value =  new BigDecimal(cell.getNumericCellValue());
      cellValue = value.toString(); 
          break;
      
         case HSSFCell.CELL_TYPE_STRING:
                     cellValue = cell.getStringCellValue();
          break;
    
             }

其他常见用法见:

http://poi.apache.org/hssf/index.html

 

原创粉丝点击